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

Flutter报错:表达式类型为void无法使用,列表内Map遍历问题

问题解决

错误原因很明确:forEach方法的返回值是void,但ToggleButtons的children参数要求传入List<Widget>,你不能把一个无返回值的操作直接塞到需要Widget列表的位置里。

直接上修改后的代码:

class ToggleButtonsLeche extends StatefulWidget {
  final Drink drink;
  const ToggleButtonsLeche({Key? key, required this.drink}) : super(key: key);

  @override
  State<ToggleButtonsLeche> createState() => _ToggleButtonsLecheState();
}

class _ToggleButtonsLecheState extends State<ToggleButtonsLeche> {
  late List<bool> _isSelected;

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    // 根据牛奶类型数量动态初始化选中状态,默认第一个选项选中
    final milkTypes = Provider.of<BubbleTeaShop>(context).tiposdeLeche;
    _isSelected = List.generate(milkTypes.length, (index) => index == 0);
  }

  @override
  Widget build(BuildContext context) {
    return Consumer<BubbleTeaShop>(builder: (context, value, child) =>
        SafeArea(child: Column(
          children: [
            ToggleButtons(
              // 用map遍历生成Text组件列表,替代无返回值的forEach
              children: value.tiposdeLeche
                  .map((element) => Text(element.tipodeLeche))
                  .toList(),
              isSelected: _isSelected,
              // 添加点击事件,实现单选逻辑
              onPressed: (int index) {
                setState(() {
                  for (int i = 0; i < _isSelected.length; i++) {
                    _isSelected[i] = i == index;
                  }
                });
              },
            )
          ],
        )
        ),
    );
  }
}

关键改动说明:

  • 用map替代forEach:map会遍历每个牛奶类型并返回对应的Text组件,最后通过toList()转换成符合要求的List<Widget>。
  • 动态生成选中状态列表:不再用固定长度的数组,而是根据牛奶类型的数量自动生成,适配不同数量的选项。
  • 补充点击交互逻辑:添加onPressed方法处理选中状态更新,让ToggleButton真正具备选择功能。

内容的提问来源于stack exchange,提问作者María Pirela

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 04:10:08