【Flutter】六、Flutter之表单多选框——Checkbox、CheckboxListTile

Checkbox和CheckboxListTile都是多选框控件,CheckboxListTile可以设置title,Checkbox只显示一个多选框。

一、CheckBox

1.1 CheckBox构造器

  const Checkbox({
    Key key,
    @required this.value,
    this.tristate = false,
    @required this.onChanged,
    this.activeColor,
    this.checkColor,
    this.materialTapTargetSize,
  }) : assert(tristate != null),
       assert(tristate || value != null),
       super(key: key);

2.2 CheckBox属性说明

属性说明
bool value是否被选中
ValueChanged onChanged状态被改变的回调
Color activeColor被选中时的颜色
Color checkColor被选中时图标的颜色,就是对号的颜色,默认为Color(0xFFFFFFFF)
bool tristate是否为三个状态
true:checbox的value可以是true、false、null;复选框为null时显示一个’-‘
false:checkbox的value只能是true or false
MaterialTapTargetSize materialTapTargetSize控制多选框tap目标的大小
MaterialTapTargetSize.padded
MaterialTapTargetSize.shrinkWrap
shrinkWrap比padded要小一点

2.3 CheckBox示例

Checkbox(
	value: _checkBoxValue,
	activeColor: Colors.green,
	checkColor: Colors.red,
	tristate: true,
	materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
	onChanged: (data) {
		print(data);
		setState(() {
			this._checkBoxValue = data;
			data == true || data !=null ? this._checkColor = Theme.of(context).primaryColor :
				this._checkColor = Colors.grey;
		});
	},
)

在这里插入图片描述

二、CheckboxListTile

2.1 CheckboxListTile构造器

const CheckboxListTile({
    Key key,
    @required this.value,
    @required this.onChanged,
    this.activeColor,
    this.title,
    this.subtitle,
    this.isThreeLine = false,
    this.dense,
    this.secondary,
    this.selected = false,
    this.controlAffinity = ListTileControlAffinity.platform,
  }) : assert(value != null),
       assert(isThreeLine != null),
       assert(!isThreeLine || subtitle != null),
       assert(selected != null),
       assert(controlAffinity != null),
       super(key: key);

2.2 CheckboxListTile属性说明

属性说明
bool value同Checkbox
ValueChanged onChanged同Checkbox
Color activeColor同Checkbox
Widget title定义Checkbox的标题
Widget subtitle定义Checkbox的副标题
Widget secondary一个小部件,显示在与复选框相对的另一侧
bool isThreeLine是否显示三行
bool dense是否垂直密集排列
bool selected是否将activeColor应用于title、subtitle、secondary,一般设为false
ListTileControlAffinity controlAffinity控件相对于文本的位置
1.ListTileControlAffinity.leading:复选框在前面
2.ListTileControlAffinity.trailing: 复选框在后面,secondary在前面
3.ListTileControlAffinity.platform:以当前平台的典型方式将控件相对于文本定位,并将辅助小部件放在另一侧。

2.3 CheckboxListTile示例

List<Widget> _getCheckboxListTitle() {
    return checkboxList.map((item) =>
      Flexible(
        child: CheckboxListTile(
          title: Text(item['text']),
          subtitle: Text(item['text']),
          value: item['value'],
          activeColor: Colors.cyanAccent,
          secondary: Icon(Icons.add),
          isThreeLine: false,
          dense: false,
          selected: false,
          controlAffinity: ListTileControlAffinity.trailing,
          onChanged: (data){
            setState(() {
              item['value'] = data;
            });
          },
        ),
      )
    ).toList();
  }
  @override
  void initState() {
    super.initState();
    this.checkboxList = [
      {
        'text': 'Java',
        'value': false
      },
      {
        'text': 'Dart',
        'value': true
      }
    ];
  }
@override
Widget build(BuildContext context){
	return Row(
		children: _getCheckboxListTitle()
	);
}

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MAXLZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值