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

Flutter报错`List<dynamic>`无法赋值给`List<Widget>`类型参数解决方案

Flutter报错「参数类型'List'无法分配给参数类型'List'」解决方案

报错原因

Dart的类型推断在链式调用的map方法中无法正确识别返回值类型,map调用结束后执行toList()默认返回List<dynamic>类型,而ListView的children参数要求传入List<Widget>类型,因此触发类型不匹配报错。

推荐修复方案

在map方法调用时显式指定泛型类型为<Widget>,强制声明map返回的元素类型为Widget即可解决问题,修改后的代码如下:

StreamBuilder<List<ScanResult>>(
  stream: FlutterBlue.instance.scanResults,
  initialData: [],
  builder: (c, snapshot) => ListView(
    shrinkWrap: true,
    children: snapshot.data!
        .map<Widget>(
          (r) => ScanResultTile(
            result: r,
            onTap: () => Navigator.of(context)
                .push(MaterialPageRoute(builder: (context) {
              r.device.connect();
              return DeviceScreen(device: r.device);
            })),
          ),
        )
        .toList(),
  ),
)

可选修复方案

也可以在toList()执行后添加强制类型转换,代码如下:

children: snapshot.data!
    .map(
      (r) => ScanResultTile(
        result: r,
        onTap: () => Navigator.of(context)
            .push(MaterialPageRoute(builder: (context) {
          r.device.connect();
          return DeviceScreen(device: r.device);
        })),
      ),
    )
    .toList() as List<Widget>,

注意:该方案如果map内返回了非Widget类型的元素,运行时会抛出类型转换异常,更建议使用显式指定map泛型的方案。

内容的提问来源于stack exchange,提问作者helloitsme3

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:54:04