You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter:解决CheckboxListTile点击单个复选框全选的问题

解决Flutter CheckboxListTile多选时全选的问题

你当前的问题是用单个_isChecked布尔变量控制所有复选框的状态,所以点击任意一个复选框时,所有复选框的状态会同步变化。要实现独立多选,需要为每个选项单独维护选中状态,推荐用以下两种方式:

方法一:使用Set存储选中项(简洁高效)

用Set<String>记录所有选中的文本,不需要提前初始化每个项的状态:

List<String> _texts = ["google.com", "youtube.com", "yahoo.com", "gmail.com"];
Set<String> _selectedTexts = {}; // 存储选中的项

// 构建列表部分
Expanded(
  child: ListView(
    children: _texts
        .map((text) => CheckboxListTile(
              title: Text(text),
              value: _selectedTexts.contains(text), // 判断当前项是否选中
              onChanged: (val) {
                setState(() {
                  if (val == true) {
                    _selectedTexts.add(text);
                  } else {
                    _selectedTexts.remove(text);
                  }
                });
              },
            ))
        .toList(),
  ),
),

方法二:使用Map存储每个项的状态(更直观)

用Map<String, bool>直接绑定每个文本的选中状态,需要在初始化时给每个项设置默认状态:

List<String> _texts = ["google.com", "youtube.com", "yahoo.com", "gmail.com"];
late Map<String, bool> _checkedStatus;

@override
void initState() {
  super.initState();
  // 初始化所有项为未选中状态
  _checkedStatus = {for (var text in _texts) text: false};
}

// 构建列表部分
Expanded(
  child: ListView(
    children: _texts
        .map((text) => CheckboxListTile(
              title: Text(text),
              value: _checkedStatus[text], // 直接取当前项的状态
              onChanged: (val) {
                setState(() {
                  _checkedStatus[text] = val!;
                });
              },
            ))
        .toList(),
  ),
),

两种方式都能让每个复选框独立维护自己的选中状态,实现多选功能。

内容的提问来源于stack exchange,提问作者editix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 01:45:35