类型“_InternalLinkedHashMap<String, dynamic>”不是类型转换中类型 'Map<String, String>' 的子类型
type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Map<String, String>' in type cast
我无法将 Map<String, dynamic>
转换为 Map<String, Map<String, String>
。执行此操作的最佳方法是什么?
请注意,我在 analysis_options.yaml
:
中使用了高级分析选项
analyzer:
enable-experiment:
- extension-methods
strong-mode:
implicit-casts: false
implicit-dynamic: false
我试过了
var de = Map<String, Map<String, String>>.from((json.decode(await rootBundle.loadString('lang/de.json'))) as Map<String, dynamic>);
和
var de = (json.decode(await rootBundle.loadString('lang/de.json')) as Map<String, dynamic>).cast<String, Map<String, String>>();
和
var de = Map.castFrom<String, dynamic, String, Map<String, String>>((json.decode(await rootBundle.loadString('lang/de.json'))) as Map<String, dynamic>);
所有尝试都引发了以下运行时错误:type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Map<String, String>' in type cast
最好的方法是什么?我认为这可以通过遍历地图来完成,但如果这些地图非常大,这是一项昂贵的操作。有什么方法可以在不迭代的情况下转换它们吗?
我认为在处理像这样的嵌套数据时没有办法转换为适当的类型。
这里有一个关于转换嵌套列表的类似讨论:https://github.com/dart-lang/language/issues/1574
我认为在这种情况下您唯一可以做的就是以某种方式迭代数据。
一种可能的解决方案:
final data = await rootBundle.loadString('lang/de.json');
final Map<String, Map<String, String>> de = {
for (final entry in (json.decode(data) as Map).entries)
entry.key as String: {
for (final e in (entry.value as Map).entries)
e.key as String: e.value as String,
},
};
我无法将 Map<String, dynamic>
转换为 Map<String, Map<String, String>
。执行此操作的最佳方法是什么?
请注意,我在 analysis_options.yaml
:
analyzer:
enable-experiment:
- extension-methods
strong-mode:
implicit-casts: false
implicit-dynamic: false
我试过了
var de = Map<String, Map<String, String>>.from((json.decode(await rootBundle.loadString('lang/de.json'))) as Map<String, dynamic>);
和
var de = (json.decode(await rootBundle.loadString('lang/de.json')) as Map<String, dynamic>).cast<String, Map<String, String>>();
和
var de = Map.castFrom<String, dynamic, String, Map<String, String>>((json.decode(await rootBundle.loadString('lang/de.json'))) as Map<String, dynamic>);
所有尝试都引发了以下运行时错误:type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Map<String, String>' in type cast
最好的方法是什么?我认为这可以通过遍历地图来完成,但如果这些地图非常大,这是一项昂贵的操作。有什么方法可以在不迭代的情况下转换它们吗?
我认为在处理像这样的嵌套数据时没有办法转换为适当的类型。
这里有一个关于转换嵌套列表的类似讨论:https://github.com/dart-lang/language/issues/1574
我认为在这种情况下您唯一可以做的就是以某种方式迭代数据。
一种可能的解决方案:
final data = await rootBundle.loadString('lang/de.json');
final Map<String, Map<String, String>> de = {
for (final entry in (json.decode(data) as Map).entries)
entry.key as String: {
for (final e in (entry.value as Map).entries)
e.key as String: e.value as String,
},
};