Dart将Map <object,object>转换为Map <string,object>

时间:2018-07-09 20:17:35

标签: dart

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

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

Firestore.instance.collection('schedule').document('nfl-2018').snapshots().data.data

2 个答案:

答案 0 :(得分:4)

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

Map<Object, Object> original = ...;
Map<String, Object> wrapped = original.cast<String, Object>();
Map<String, Object> newMap = Map<String, Object>.from(first);

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

答案 1 :(得分:3)

Map.fromdoc here)似乎可以很好地转换地图。正如lrn在下面的评论中指出的那样,这会创建所需类型的 new 地图副本。它不会投射现有地图。

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

您可以在DartPad here中试用!