类型“_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,
    },
};