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