Flutter group_button 5.0.0+:替代废弃selectedButtons保存选中项
在group_button 5.0及以上版本中,selectedButtons属性已被废弃,官方改用selectedIndexes属性控制选中按钮的索引。新版本更推荐开发者主动维护选中状态,而非通过方法动态生成选中列表,以下是适配后的实现方案:
1. 维护选中状态变量
在你的State类中添加状态变量,用于保存当前选中的按钮索引:
List<int> _selectedIndexes = [];
2. 初始化选中状态
在initState或组件构建前,从widget.filters中初始化选中索引(替代原setSelectedBtn方法):
@override void initState() { super.initState(); final valueSet = widget.filters[index].value; // 提取所有isSelected为true的选项索引 _selectedIndexes = valueSet.asMap().entries .where((entry) => entry.value.isSelected) .map((entry) => entry.key) .toList(); }
3. 修改GroupButton配置并更新回调
替换废弃属性,同时在onSelected回调中同步更新状态变量:
GroupButton( selectedIndexes: _selectedIndexes, isRadio: false, spacing: 10, onSelected: (i, isSelected) { setState(() { if (isSelected) { _selectedIndexes.add(i); } else { _selectedIndexes.remove(i); } }); // 保留原有业务逻辑 onFilterSelect(index, i, isSelected); }, buttons: widget.filters[index].value .map((e) => e.value) .toList(), )
额外提示
如果widget.filters是动态变化的,需要在didUpdateWidget方法中重新初始化_selectedIndexes,确保状态与数据源同步;新版本还支持selectedButtonValues属性,若你更倾向于通过按钮文本值管理选中状态,可将状态变量改为List<String>类型,逻辑与上述一致。
内容的提问来源于stack exchange,提问作者M Al
相关产品推荐
相关产品推荐

