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
相关产品推荐
相关产品推荐

