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

如何实现Flutter单选Checkbox列表:点击仅选一项

实现单选Checkbox列表的解决方案

你的代码目前存在两个核心问题导致无法实现单选:

  1. 使用了全局的isSelected布尔值,所有CheckboxListTile共享同一个状态,点击时会同时选中/取消所有选项
  2. onChanged回调里错误修改了列表项的id字段,偏离了单选状态管理的逻辑

下面是修改后的完整代码,通过维护选中项的索引来实现单选功能:

class CheckList extends StatefulWidget {
  const CheckList({Key? key}) : super(key: key);

  @override
  State<CheckList> createState() => _CheckListState();
}

class _CheckListState extends State<CheckList> {
  List checkListItems = [
    {
      "id": 0,
      "title": "Sunday",
    },
    {
      "id": 1,
      "title": "Monday",
    },
  ];

  // 存储选中项的索引,null表示未选中任何项
  int? selectedIndex;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: ListView.builder(
          itemCount: checkListItems.length,
          itemBuilder: (context, index) {
            return CheckboxListTile(
              title: Text(checkListItems[index]['title']),
              // 判断当前项是否为选中项
              value: selectedIndex == index,
              onChanged: (value) {
                setState(() {
                  // 如果value为true,选中当前索引;否则取消选中(设为null)
                  selectedIndex = value == true ? index : null;
                });
              },
            );
          }),
    );
  }
}

关键修改说明:

  • 移除无用的isSelected变量,改用selectedIndex存储当前选中项的索引
  • 每个CheckboxListTile的value通过比较selectedIndex和当前index确定是否选中
  • onChanged回调中通过setState更新selectedIndex,实现单选逻辑:选中当前项时覆盖之前的选中状态,取消时清空选中状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:35:14