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

时间:2019-04-19 08:10:42

标签: javascript dart

我是Dart的新手,我注意到方法/* |-------------------------------------------------------------------------- | Pre-calculate formulas during export |-------------------------------------------------------------------------- */ 'calculate' => true, 的工作原理与Javascript不同。

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

在Javascript中,这将起作用:

map

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

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

我看到我可以像这样最后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

2 个答案:

答案 0 :(得分:0)

因为您在dynamic中使用map,而不是BoxType-错误显示'List<dynamic>' is not a subtype of 'List<BoxType>',所以只需解决此问题就可以了:

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

答案 1 :(得分:0)

此代码运行没有问题:

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编译器应将此作为类型检查错误,但似乎直到运行时才发生。