Flutter:如何循环遍历“DocumentSnapshot.data()”中的每个字段

5 dart firebase flutter google-cloud-firestore

我有一个集合,其中每个用户都有自己的文档。在文档中,我为新条目创建了一个地图。该文档看起来像这样: 样本文件

在我的应用程序中,我想获取文档,然后将其转换为一个列表,其中每个地图(按时间标题)将是一个条目。我尝试循环遍历它,但问题是 中没有 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']);
      });
    });
Run Code Online (Sandbox Code Playgroud)

小智 3

问题是data设置的类型element.data()因此未定义Object?该方法。forEach()我尝试将 a 转换element.data()为 a List,这导致了错误,所以我没有沿着这条路走得更远。我应该做的就是选element.data()一个Map有效的演员。我还应该使用journal.get()and notsnapshots()因为它是一个流,所以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;
}
Run Code Online (Sandbox Code Playgroud)

我会执行以下操作来获取条目:

var entries = await getJournalEntries();
Run Code Online (Sandbox Code Playgroud)