>”到“地图>",flutter,dart"/>

首页 > 解决方案 > 投《地图》>”到“地图>"

问题描述

我想投一个Map<String, dynamic>to 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>>();

该代码不再起作用并引发了提到的异常。

下面的答案有助于解决这个问题。

标签: flutterdart

解决方案


地图方法可以帮助您转换您的愿望。

查看以下代码。

我还演示了如何以列表的形式访问 map 的所有值。我希望这对你有用。

Map<String, dynamic> dynamicMap = {
    'a': ['1', '2', '3'],
    'b': ['1', '2', '3'],
    'c': ['1', '2', '3'],
};
Map<String, List<String>> typedMap =
    dynamicMap.map((key, value) => MapEntry(key, value));

typedMap.forEach((key, value) {
    print(value[0]);
});

推荐阅读