Flutter控件——常用控件:单选开关和复选框

Posted wzj_what_why_how

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter控件——常用控件:单选开关和复选框相关的知识,希望对你有一定的参考价值。

单选开关和复选框

ps:Switch和Checkbox的样式局限性都比较高,建议直接自定义widget处理。

  • Material 组件库中提供了 Material 风格的单选开关 Switch 和复选框 Checkbox ,虽然它们都是继承自StatefulWidget,
    但它们本身不会保存当前选中状态,选中状态都是由父组件来管理的。当Switch或Checkbox被点击时,会触发它们的onChanged回调,我们可以在此回调中处理选中状态改变逻辑。

下面看一个简单的例子:

class SwitchAndCheckBoxTestRoute extends StatefulWidget 
  @override
  _SwitchAndCheckBoxTestRouteState createState() => _SwitchAndCheckBoxTestRouteState();


class _SwitchAndCheckBoxTestRouteState extends State<SwitchAndCheckBoxTestRoute> 
  bool _switchSelected=true; //维护单选开关状态
  bool _checkboxSelected=true;//维护复选框状态
  @override
  Widget build(BuildContext context) 
    return Column(
      children: <Widget>[
        Switch(
          value: _switchSelected,//当前状态
          onChanged:(value)
            //重新构建页面
            setState(() 
              _switchSelected=value;
            );
          ,
        ),
        Checkbox(
          value: _checkboxSelected,
          activeColor: Colors.red, //选中时的颜色
          onChanged:(value)
            setState(() 
              _checkboxSelected=value;
            );
           ,
        )
      ],
    );
  

上面代码中,由于需要维护Switch和Checkbox的选中状态,所以SwitchAndCheckBoxTestRoute继承自StatefulWidget 。
在其build方法中分别构建了一个Switch和Checkbox,初始状态都为选中状态,当用户点击时,会将状态置反,然后回调用setState()通知 Flutter 框架重新构建UI。

属性及外观

Switch和Checkbox属性比较简单,它们都有一个activeColor属性,用于设置激活态的颜色。至于大小,Checkbox的大小是固定的,无法自定义,而Switch只能定义宽度,高度也是固定的。值得一提的是Checkbox有一个属性tristate ,表示是否为三态,其默认值为false ,这时 Checkbox 有两种状态即“选中”和“不选中”,对应的 value 值为true和false ;如果tristate值为true时,value 的值会增加一个状态null。

注意

通过Switch和Checkbox我们可以看到,虽然它们本身是与状态(是否选中)关联的,但它们却不是自己来维护状态,而是需要父组件来管理状态,然后当用户点击时,再通过事件通知给父组件,这样是合理的,因为Switch和Checkbox是否选中本就和用户数据关联,而这些用户数据也不可能是它们的私有状态。

以上是关于Flutter控件——常用控件:单选开关和复选框的主要内容,如果未能解决你的问题,请参考以下文章

UX设计之——复选框和开关按钮

Android自定义控件1--自定义控件介绍

安卓常用控件--单选按钮和复选框

Flutter 单选开关Switch和复选框CheckBox

UI基础入门——UI基础控件2

Flutter -- 基础组件单选开关(Switch)& 单选框(Radio) & 复选框(Checkbox)