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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:17:06