为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕仙森 2021-04-30 09:27:58
我是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]));}
查看完整描述

2 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

因为你使用dynamic你的map,不是BoxType-错误说'List<dynamic>' is not a subtype of 'List<BoxType>',所以刚刚杀青这应该工作:

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


查看完整回答
反对 回复 2021-05-06
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

这段代码运行没有问题:


void main() {

  List dynamicList = [1, 2, "hello", true];


  Map<String, List> map = {'boxTypes': dynamicList};


  // make sure to check for null with ?. and reeturn an empty list if null

  List<BoxType> boxes = map["boxTypes"]?.map((box) => BoxType.fromDynamic(box))?.toList() ?? [];


  // same, but a little shorter

  //List<BoxType> boxes = map["boxTypes"]?.map(BoxType.fromDynamic)?.toList() ?? [];



  print(boxes);

}


class BoxType {

  String type;

  BoxType(this.type);


  static BoxType fromDynamic(value) {

    if (value is String) {

      return BoxType(value);

    }

    return BoxType(value?.toString() ?? "no value");

  }


  String toString() => "BoxType{type=${type}}";

}

但是,如果我将的类型更改map为Map<String, dynamic>,则会收到与您相同的错误...


您可以验证地图类型将值声明为List吗?


Dart编译器应将此作为类型检查错误,但直到运行时才似乎不会发生。


查看完整回答
反对 回复 2021-05-06
  • 2 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信