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

