Dart将Map <Object,Object>转换为Map <String,Object>

dak*_*ojo 2 dart

我有一个关于Map(Object,Object)类型的类,我知道键都是字符串。如何轻松将其转换为Map(String,Object)?

具体来说,该对象来自Firestore查询

Firestore.instance.collection('schedule').document('nfl-2018').snapshots().data.data
Run Code Online (Sandbox Code Playgroud)

eme*_*sso 6

Map.from此处为文档)作为转换地图的方法似乎效果很好。正如 lrn 在下面的评论中指出的,这会创建所需类型的新Map 副本。它不会投射现有地图。

  final Map<Object, Object> first = <Object, Object>{'a': 'test!', 'b': 1};
  final Map<String, Object> second = Map<String, Object>.from(first);
Run Code Online (Sandbox Code Playgroud)

您可以在此处的DartPad 中尝试一下!


lrn*_*lrn 5

有多种方法可以转换或包装地图。主要的两个是Map.cast方法Map.from构造函数

Map<Object, Object> original = ...;
Map<String, Object> wrapped = original.cast<String, Object>();
Map<String, Object> newMap = Map<String, Object>.from(first);
Run Code Online (Sandbox Code Playgroud)

wrapped创建的地图Map.cast是原始地图的包装。如果原始地图发生变化,则也会发生变化wrapped。它使用起来很简单,但是每次访问都会附带一个额外的类型检查(因为包装程序会在运行时检查类型,并且每次都必须检查,因为原始映射可能已更改)。创建的地图Map.from是一个新地图,这意味着将复制原始地图中的所有数据,并在创建地图时进行类型检查,但之后便是一个未连接到原始地图的单独地图。