我想投一个Map<String, dynamic>
来Map<String, List<String>>
。
我在Flutter中尝试了以下方法:
Map<String, dynamic> dynamicMap = {
'a': ['1', '2', '3'],
'b': ['1', '2', '3'],
'c': ['1', '2', '3'],
};
Map<String, List<String>> typedMap = dynamicMap;
但是出现以下错误:
type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Map<String, List<String>>'
然后,我尝试:
Map<String, List<String>> typedMap = dynamicMap.cast<String, List<String>>();
这似乎可以正常工作,但是在尝试使用它时会遇到相同的错误,例如print(typedMap)
。
谢谢您的帮助。
值得一提的是:
Map<String, dynamic> dynamicMap = {
'a': ['1', '2', '3'],
'b': ['1', '2', '3'],
'c': ['1', '2', '3'],
};
Map<String, List<String>> typedMap = dynamicMap.cast<String, List<String>>();
确实有效(对问题中的错误表示歉意)。
但是,当数据来自json时,就像这样:
String rawJson = """{
"a": ["1", "2", "3"],
"b": ["1", "2", "3"],
"c": ["1", "2", "3"]
}""";
final Map<String, dynamic> dynamicMapFromJson = json.decode(rawJson);
Map<String, List<String>> typedMap = dynamicMapFromJson.cast<String, List<String>>();
该代码不再起作用,并引发了提到的异常。
以下答案有助于解决此问题。
Map<String, dynamic> dynamicMap = {
'a': ['1', '2', '3'],
'b': ['1', '2', '3'],
'c': ['1', '2', '3'],
};
Map<String, List<String>> typedMap;
dynamicMap.forEach((key,value){
List<String> list = List.castFrom(value);
typedMap[key] = list
});
这是因为可以在运行时为动态数据类型变量分配任何数据类型。但是这里的typedMap值已经用数据类型声明了List<String>
,除之外没有其他可以分配的值List<String>
。该错误是因为您试图将动态数据类型分配给List<string>
数据类型,这是一个伪示例
String s = dynamic(); //impossible
dynamic s = String(); //possible
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句