Flutter CheckBoxListTile


简介

CheckboxListTile “下拉复选框”

  • 带有复选框的 ListTile,带有标签的 ListTile;
  • 整个列表图块是交互式的:点击图块中的任意位置可切换复选框;

基本用法

CheckboxListTile 的属性特征

  • 与 Checkbox 类似的命名属性,比如:onChanged 和 activeColor;
  • 和 ListTile 类似的命名属性,比如:title, subtitle, isThreeLine,dense;
  • selected 属性和 ListTile.selected 属性类似,但使用的颜色是 activeColor 属性,默认为当前 Theme 的颜色;
  • onChanged 回调函数为 null,显示禁用;

进阶用法

CheckboxListTile 单选和全选的示例

实例演示

import 'package:flutter/material.dart';

// Checkbox 默认的实例
// index 当前checkbox 的索引值
class CheckboxListTileStateDefault extends StatefulWidget {
  const CheckboxListTileStateDefault() : super();

  @override
  State<StatefulWidget> createState() => _CheckboxListTileStateDefault();
}

// CheckboxListTile 默认的实例,有状态
class _CheckboxListTileStateDefault extends State {
  bool _value = false;
  void _valueChanged(bool value) {
    for (var i = 0; i < isChecks.length; i++) {
      isChecks[i] = value;
    }
    if(mounted) {
      setState(() => _value = value);
    }
  }
  bool isCheck=false;
  List<bool> isChecks=[false,false,false,false];
  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.start,
      children: <Widget>[
         Center(
          child: CheckboxListTile(
            value: _value,
            selected:true,// 默认文字是否高亮
            onChanged: _valueChanged,
            dense: false,// 文字是否对齐 图标高度
            isThreeLine: false,// 文字是否三行显示
            title:  Text('全部'), // 主标题
            controlAffinity: ListTileControlAffinity.trailing, // 将控件放在何处相对于文本,leading 按钮显示在文字后面,platform,trailing 按钮显示在文字前面
            subtitle:  Text('勾选下列全部结果'), // 标题下方显示的副标题
            secondary:  Icon(Icons.archive), // 从复选框显示在磁贴另一侧的小组件
            activeColor: Colors.red, // 选中此复选框时要使用的颜色
          ),
        ),
         Center(
          child:  CheckboxListTile(
              value: isChecks[0],
              title:  Text('选项1'),
              activeColor: _value ? Colors.red : Colors.green,
              controlAffinity: ListTileControlAffinity.platform,
              onChanged: (bool){
                if(mounted) {
                  setState(() {
                    isChecks[0] = bool;
                  });
                }
              }),
        ),
         Center(
          child:  CheckboxListTile(
              value: isChecks[1],
              title:  Text('选项2'),
              activeColor: _value ? Colors.red : Colors.green,
              controlAffinity: ListTileControlAffinity.platform,
              onChanged: (bool){
                setState(() {
                  isChecks[1]=bool;
                });
              }),
        ),
         Center(
          child:  CheckboxListTile(
              value: isChecks[2],
              title:  Text('选项3'),
              activeColor: _value ? Colors.red : Colors.green,
              controlAffinity: ListTileControlAffinity.platform,
              onChanged: (bool){
                setState(() {
                  isChecks[2]=bool;
                });
              }),
        ),
         Center(
          child:  CheckboxListTile(
              value: isChecks[3],
              title:  Text('选项4'),
              activeColor: _value ? Colors.red : Colors.green,
              controlAffinity: ListTileControlAffinity.platform,
              onChanged: (bool){
                setState(() {
                  isChecks[3]=bool;
                });
              }),
        )
      ],
    );
  }
}

// CheckboxListTile 默认的实例,无状态
class CheckboxListTileDefault extends StatelessWidget {
  final widget;
  final parant;
  const CheckboxListTileDefault ([this.widget,this.parant])
      : super();

  @override
  Widget build(BuildContext context) {
    return CheckboxListTile(
      title: Text('一个简单的例子'),
      activeColor: Colors.red,
      value: widget.valBool['val'],
        onChanged: (bool value) {
          parant.setState(()=> widget.valBool['val'] = value);
        },
        secondary: const Icon(Icons.hourglass_empty),
    );
  }
}