2 回答
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();
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编译器应将此作为类型检查错误,但直到运行时才似乎不会发生。
添加回答
举报