firebase - 如何使用颤振在firestore中特定文档的字段内显示地图?
问题描述
这是结构你好,如何从特定文档字段中的 firestore 检索地图以及如何在应用程序中将其显示为列表。这怎么可能实现?有人可以分享一个示例代码片段。例如在“Collection-Doc-Field-{key:value}”中,我想显示字段中的地图。
更新 :
Expanded(
child: new ListView(
children: snapshot.data
.get('$field')
.map((DocumentSnapshot document) {
return new ListTile(
title: Column(
children: (document.data()['$field']
as Map<String, dynamic>)
.entries
.map((e) => ListTile(
title: Text(e.key),
trailing: Text(e.value.toString())))
.toList())
//subtitle: new Text(document.data()['Subjects']),
);
}).toList(),
),
),
这就是我尝试显示字段地图的方式,但最终出现此错误
The following _TypeError was thrown building StreamBuilder<DocumentSnapshot>(dirty, state: _StreamBuilderBaseState<DocumentSnapshot, AsyncSnapshot<DocumentSnapshot>>#d3cf2):
type '(DocumentSnapshot) => ListTile' is not a subtype of type '(String, dynamic) => MapEntry<dynamic, dynamic>' of 'transform'
解决方案
在您的代码中,snapshot.data
是一个DocumentSnapshot对象。因此,当您调用 时,它会根据您的数据库结构.get(field)
返回一个对象。Map<String, dynamic>
当您编写时.map(DocumentSnapshot document)
,您使用了错误的类型,因为它旨在映射Map<String, dynamic>
不是类型中的项目DocumentSnapshot
。
解决方案
您需要将get('$field')
[可以简化为get(field)
] 的结果转换为您期望的对象类型 [在这种情况下,它是Map<String, dynamic>
] 类型,然后循环遍历每个地图条目以返回一个ListTile
小部件。
将您的代码更新为以下代码,这应该可以修复错误:
return ListView(
children:
(snapshot.data.get(field) as Map<String, dynamic>)
.entries
.map((MapEntry mapEntry) {
return ListTile(
title: Text(mapEntry.key),
trailing: Text(mapEntry.value.toString()));
}).toList(),
);
推荐阅读
- java - NoClassDefFoundError: org/eclipse/persistence/internal/oxm/mappings/Field
- python - Dev 已经消失了,我只剩下一个 .pyt 文件我如何查看源代码?
- c# - “调用线程必须是STA,因为许多UI组件都需要这个”单元测试期间的异常
- java - 从 ibm mq 返回的响应有时与请求不匹配
- python - 如何将具有重复索引的堆叠列转换为具有熊猫的多个唯一列?
- amazon-web-services - 在 DynamoDB 中创建新记录时触发电子邮件
- scala - 案例类继承另一个类/特征
- android - 为什么下面的代码没有给我任何输出?
- xslt - 用于添加 ul 列表层次结构的递归 xslt 函数需要修复
- git - 如果 PR 和除 master 之外的任何其他内容,如何防止 Travis-CI 执行脚本