如何实现Flutter单选Checkbox列表:点击仅选一项
实现单选Checkbox列表的解决方案
你的代码目前存在两个核心问题导致无法实现单选:
- 使用了全局的
isSelected布尔值,所有CheckboxListTile共享同一个状态,点击时会同时选中/取消所有选项 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
相关产品推荐
相关产品推荐

