firebase - Flutter:如何遍历“DocumentSnapshot.data()”中的每个字段
问题描述
我有一个集合,每个用户都有自己的文档。在文档中,我为新条目创建了一个地图。该文档看起来像这样:
在我的应用程序中,我想获取文档,然后将其变成一个列表,其中每个地图(按时间命名)都是一个条目。我尝试循环遍历它,但问题是其中没有 forEach()DocumentSnapshot.data()
并且它是_JsonDocumentSnapshot
.
我怎样才能把它作为一个列表来获得,其中2021-05-30 20:49:59.671705
, 2021-05-30 20:50:00:600294
, ... 是列表中的单个元素。我计划使用诸如 a 之类的东西自己构建每个条目,ListView.builder()
所以我想列出所有这些条目。
编辑:我的代码看起来像这样:
journal
只是一个DocumentReference
。
journal.snapshots().forEach((element) {
var data = element.data();
print(element.data());
(data ?? {}).forEach((key, value) {
return JournalEntryData(
date: key,
entryText: value['entryText'],
feeling: value['feeling']);
});
});
解决方案
问题是data
设置为element.data()
的类型Object?
因此forEach()
没有定义方法。我尝试将导致错误的 as 转换element.data()
为 a List
,所以我没有走得更远。我应该做的是将其转换element.data()
为Map
有效的。我也应该使用journal.get()
而不是snapshots()
因为它是一个流,所以await
关键字会导致journal.snapshots().forEach()
永远不会结束。
最终代码看起来像这样:
Future<List<JournalEntryData>> getJournalEntries() async {
List<JournalEntryData> entries = [];
await journal.get().then((document) {
Map data = (document.data() as Map);
data.forEach((key, value) {
print('adding entry');
entries.add(JournalEntryData(
date: key,
entryText: value['entryText'],
feeling: value['feeling'],
));
});
});
return entries;
}
我会执行以下操作来获取条目:
var entries = await getJournalEntries();
推荐阅读
- javascript - JavaScript - 复制数组不起作用
- docker - 使用 tensorflow docker 映像在已安装的驱动器上启动 jupyter lab
- javascript - 如何处理输入字符串的错误以不允许数字或符号
- intellij-idea - 在项目 IntelliJ IDEA 中查找最长的文件
- python - PyCharm 中的“未解析的属性引用”
- mysql - Spring Boot:Jdbc javax.net.ssl.SSLException:在接收对等方的 close_notify 之前关闭入站
- arrays - 'numpy.ndarray' 对象不可调用?
- list - 修剪由相同元素组成的最大前缀
- c++ - 在 C++ 中使用 sscanf 赋值
- bash - 如何仅使用其 IP 地址和掩码获取脚本中的所有网络接口?Linux