【发布时间】:2020-04-03 15:02:55
【问题描述】:
我想将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>>();
代码不再起作用并引发了提到的异常。
下面的答案有助于解决这个问题。
【问题讨论】: