Flutter中ListView Builder动态实现单选RadioButton问题修正
问题根源在于你给每个Radio分配了独立的groupValue[index],这会让每个Radio属于不同的分组,自然就和Checkbox一样可以多选。要实现全局单选,所有Radio必须共享同一个分组值。
修正步骤:
- 把原有的数组类型
groupValue改成单个变量,用于存储当前选中的值 - 所有Radio的
groupValue统一绑定这个变量 onChanged回调中更新这个变量为当前选中的Radio值
修正后的代码示例:
// 先在State类中定义单个选中值变量 int? selectedValue; // ListView.builder实现部分 ListView.builder( shrinkWrap: true, physics: const ClampingScrollPhysics(), itemCount: sampleData.length, itemBuilder: (context, index) { // 取出当前选项对应的Radio值 final radioValue = value[index][0]; return ButtonBar( alignment: MainAxisAlignment.center, children: <Widget>[ Radio( groupValue: selectedValue, value: radioValue, onChanged: (newValue) { setState(() { selectedValue = newValue as int; }); }, ), // 可添加对应文本,方便用户识别选项 Text(sampleData[index].toString()), ], ); }, ),
关键改动说明:
- 用单个变量
selectedValue替代原数组groupValue,确保所有Radio属于同一分组 - 每个Radio的
value仍对应各自的选项值radioValue,保证选项唯一性 - 更新状态时仅修改
selectedValue,Flutter会自动重新渲染所有Radio,切换选中状态
内容的提问来源于stack exchange,提问作者Mohammad Faizan
相关产品推荐
相关产品推荐

