Dart中等效的Javascript“地图”是什么?

我是Dart的新手,我注意到该方法map的工作原理与Javascript不同。


我正在尝试将动态列表转换为对象列表。


在Javascript中,这将起作用:


List<BoxType> boxTypes = data["boxTypes"].map((dynamic boxType) => BoxType.fromDynamic(boxType));

但是在Dart中,我遇到了这个错误:


Exception has occurred.

_TypeError (type 'MappedListIterable<dynamic, dynamic>' is not a subtype of type 'List<BoxType>')

我看到我可以.toList()像这样在最后做一个:


List<BoxType> boxTypes = data["boxTypes"].map((dynamic boxType) => BoxType.fromDynamic(boxType)).toList();

但这会产生此错误:


Exception has occurred.

_TypeError (type 'List<dynamic>' is not a subtype of type 'List<BoxType>')

所以,我应该用什么代替map?


编辑:就目前而言,这就是我正在做的事情,虽然有点难看,但效果很好


for (var i = 0; i < data["boxTypes"].length; i++) {

  boxTypes.add(BoxType.fromDynamic(data["boxTypes"][i]));

}


慕仙森
浏览 151回答 2
2回答

慕虎7371278

因为你使用dynamic你的map,不是BoxType-错误说'List<dynamic>' is not a subtype of 'List<BoxType>',所以刚刚杀青这应该工作:List<BoxType>&nbsp;boxTypes&nbsp;=&nbsp;data["boxTypes"].map((BoxType&nbsp;boxType)&nbsp;=>&nbsp;BoxType.fromDynamic(boxType)).toList();

30秒到达战场

这段代码运行没有问题:void main() {&nbsp; List dynamicList = [1, 2, "hello", true];&nbsp; Map<String, List> map = {'boxTypes': dynamicList};&nbsp; // make sure to check for null with ?. and reeturn an empty list if null&nbsp; List<BoxType> boxes = map["boxTypes"]?.map((box) => BoxType.fromDynamic(box))?.toList() ?? [];&nbsp; // same, but a little shorter&nbsp; //List<BoxType> boxes = map["boxTypes"]?.map(BoxType.fromDynamic)?.toList() ?? [];&nbsp; print(boxes);}class BoxType {&nbsp; String type;&nbsp; BoxType(this.type);&nbsp; static BoxType fromDynamic(value) {&nbsp; &nbsp; if (value is String) {&nbsp; &nbsp; &nbsp; return BoxType(value);&nbsp; &nbsp; }&nbsp; &nbsp; return BoxType(value?.toString() ?? "no value");&nbsp; }&nbsp; String toString() => "BoxType{type=${type}}";}但是,如果我将的类型更改map为Map<String, dynamic>,则会收到与您相同的错误...您可以验证地图类型将值声明为List吗?Dart编译器应将此作为类型检查错误,但直到运行时才似乎不会发生。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript