Flutter中RadioListTile点击后状态不更新问题求助
问题:RadioListTile点击后单选状态不更新
代码中默认选中第一项正常,但点击其他选项时,控制台打印显示selectedBell值已正确变更,但UI上单选按钮状态不切换。
问题原因
你提前将RadioListTile实例添加到widgets列表中,每个RadioListTile的groupValue和selected参数在创建时就固定为当时的selectedBell快照值。后续selectedBell变化时,这些已创建的Widget不会自动更新参数,导致UI无法响应状态变更。
修复代码
class SelectBell extends StatefulWidget { SelectBell({ super.key, }); @override State<SelectBell> createState() => _SelectBellState(); } class _SelectBellState extends State<SelectBell> { List<Bell> bells = []; // 存储Bell数据而非预构建的Widget Bell? selectedBell; @override void initState() { super.initState(); loadBells(); } void loadBells() async { DB().getBells().then((fetchedBells) { setState(() { bells = fetchedBells; // 默认选中第一项(如果列表非空) if (selectedBell == null && bells.isNotEmpty) { selectedBell = bells.first; } }); }); } @override Widget build(BuildContext context) { return Scaffold( body: Container( padding: EdgeInsets.all(20), width: 250, child: Column( // 在build阶段动态生成RadioListTile,确保每次状态变化都使用最新值 children: bells.map((bell) { return RadioListTile( title: Text(bell.name), value: bell, groupValue: selectedBell, onChanged: (value) { setState(() { selectedBell = value!; }); }, selected: selectedBell == bell, ); }).toList(), ), ), ); } }
核心修改点
- 将存储Widget的
widgets列表改为存储Bell数据的bells列表 loadBells方法仅负责获取并更新数据,不提前构建Widget- 在
build方法中通过map动态生成RadioListTile,每次setState后都会基于最新的selectedBell重新渲染,确保UI与状态同步
内容的提问来源于stack exchange,提问作者Андрей Веселов
相关产品推荐
相关产品推荐

