颤振/飞镖火店返回链接地图 - 如何使用这个?



firestore中,我有一个(简单)maps的array

当将此数据放入Flutter/Dart时,请使用cloud_firestore包,如下所示:

Stream<T> documentStream<T>({
required String path,
required T Function(Map<String, dynamic>? data, String documentID) builder})
{
final DocumentReference<Map<String, dynamic>> reference =
FirebaseFirestore.instance.doc(path);
final Stream<DocumentSnapshot<Map<String, dynamic>>> snapshots =
reference.snapshots();
return snapshots.map((snapshot) => builder(snapshot.data(), snapshot.id));
}

并按如下方式消费:

documentStream(
path: 'firestore_path_doc',
builder: (data, documentId) {
final x = data['array_of_maps'];
print(x[0].runtimeType); // gives LinkedMap<String, dynamic>
final y = x as List<Map<String, String>>; // fails
final y1 = x[0] as Map<String, String>; // fails
},
);

失败。

我找不到将此数组中的地图转换为法线地图的方法。 事实上,我几乎找不到任何关于LinkedMap的信息.挖掘后,我在js(https://pub.dev/packages/js) 包中看到它,但它在那里内部,不应该暴露。

如果我在firestoremap,它很容易转换为dartMap<String, String>。但是array内的map会像LinkedMap一样到达.

我该如何LinkedMap工作?我什至无法迭代它,因为即使我尝试导入js,它在编译时也无法识别。

感谢

x[0]类型是Map<String, dynamic>。您正在尝试将其投射到Map<String, String>,这显然会失败。 不过,您可以手动执行此操作:

final x = data['array_of_maps'] as List<Map<String, dynamic>>;
final myMap = x[0].map((key, value) => MapEntry(key, value.toString()));

我让它按照这个答案工作: 如何将 Firestore 中的地图数组转换为地图飞镖列表

基本上是使用内部mapclass而不是通用Map

最新更新