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

Flutter group_button 5.0.0+:替代废弃selectedButtons保存选中项

解决方案:group_button 5.0+ 版本多选状态保存适配

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 12:20:30