Flutter:在Widget中动态执行list.map报错,求解决方案
解决方案
错误的核心原因是你在for循环里用了大括号{},导致代码块被解析成了Set类型,而Column的children需要的是Widget列表。另外你当前的写法存在冗余,没必要把单个ExerData放进数组再做map转换,直接生成目标Widget即可。
修改后的代码如下:
Flexible( child: Column( children: [ ...[ ExerTitle(title, leftEdgeInset, 112), ] .map((menu) => _ExerTitle( title: menu.title, leftEdgeInset: menu.leftEdgeInset, time: menu.time, )), // 去掉大括号,直接根据数组元素生成_ExerData组件 for (int i = 0; i < exerArr.length; i++) _ExerData( exer: exerArr[i], sets: setsArr[i], leftEdgeInset: leftEdgeInset, ), ], ), ),
如果坚持要保留原有的map写法(虽无必要),也可以去掉大括号并确保展开的是Iterable:
Flexible( child: Column( children: [ ...[ ExerTitle(title, leftEdgeInset, 112), ] .map((menu) => _ExerTitle( title: menu.title, leftEdgeInset: menu.leftEdgeInset, time: menu.time, )), for (int i = 0; i < exerArr.length; i++) ...[ ExerData(exerArr[i], setsArr[i], leftEdgeInset), ] .map((menu) => _ExerData( exer: menu.exer, sets: menu.sets, leftEdgeInset: menu.leftEdgeInset, )), ], ), ),
补充说明
- Dart中,集合字面量(比如
[])里的for循环语法不需要用{}包裹循环体,否则会将内部代码解析为Set,和期望的Widget列表类型不匹配。 - 直接根据数组元素生成
_ExerData组件的写法更简洁高效,避免了不必要的数组创建和map转换。
内容的提问来源于stack exchange,提问作者user25674912
相关产品推荐
相关产品推荐

