Flutter中如何映射对象数组?映射类型不匹配问题求助
解决Flutter中Iterable无法赋值给List的错误
问题根源
map()方法返回的是**IterableColumn的children参数要求传入List<Widget>类型,类型不匹配导致报错。而在Text组件内部使用map时,Dart会自动调用Iterable的toString()方法将其转为字符串,因此不会触发类型错误。
两种解决方案
1. 使用toList()转换为List
将map返回的Iterable通过toList()转为List,同时处理_metapodaci为null的情况:
_metapodaci?.map<Widget>((e) => Text("Naziv dokumenta je ${e.label}"))?.toList()
2. 使用扩展运算符...展开Iterable
利用Dart的扩展运算符将Iterable的元素直接展开到children列表中,搭配?处理null场景:
...?_metapodaci?.map<Widget>((e) => Text("Naziv dokumenta je ${e.label}"))
修改后的完整代码
Padding( padding: const EdgeInsets.all(8.0), child: Expanded( child: _metapodaci.isEmpty ? Text("Odaberite vrstu dokumenta") : Column( children: [ Text("Meta podaci: ${_metapodaci.map((e) => e.label)}"), // 方案1:使用toList(),兜底空List避免null _metapodaci?.map<Widget>((e) => Text("Naziv dokumenta je ${e.label}"))?.toList() ?? [], // 或者方案2:使用扩展运算符,自动处理null // ...?_metapodaci?.map<Widget>((e) => Text("Naziv dokumenta je ${e.label}")), ], ), ), ),
内容的提问来源于stack exchange,提问作者Ranko Koturic
相关产品推荐
相关产品推荐

