如何从Dart Firestore中获取每个文档以及每个文档的子集合

时间:2019-07-30 23:19:13

标签: flutter dart google-cloud-firestore

我有一个项目正在研究,我需要在这里检索名为“ habits”的集合中的所有文档,这很容易,但是与此同时,我希望在名为{{1}的子集合中接收所有文档。 }。这是数据库结构,因此您可以更好地了解。

因为我要跟踪习惯,所以我需要跟踪它完成的所有时间,这就是子收集历史。

Databse

这类似于以下问题here,但该问题与角度有关。

我尝试在import java.util.Arrays; public class IntArray { public int[] myArray; public IntArray () { myArray = new int[0]; } public IntArray (int[] array) { myArray = array; } public int[] getArray() { return myArray; } public int hashCode() { return Arrays.hashCode(myArray); } public boolean equals(Object o) { if (!(o instanceof IntArray)) return false; if (o.myArray.length != myArray.length) return false; else { for (int i = 0; i < o.myArray.length; i++) { if (myArray[i] != myArray[i]) { return false; } } return true; } } } 内部完成此操作,但是很难获得子集合。我编写了一个名为history的函数,该函数返回一个将来的列表,并在StreamBuilder中调用它,但是在显示数据之前,我无法从列表中获取值以检查某些条件。

总体而言,我无法单独从StreamBuilder中获得想要的功能。

这是我当前的文件,用于在集合getHistory()中获取文档,但是我不知道如何在子集合中获取文档。

StreamBuilder

我创建了一个名为habits的类,可以解析FireStore中的信息,但是我不知道如何在该类的子集合历史记录中获取文档列表。另外,我是否需要将历史记录分别解析为地图列表?

我希望最终能够获得与此类似的数据:

class FirebaseService { final StreamController<List<UserHabits>> _habitsController = StreamController<List<UserHabits>>(); FirebaseService(){ Firestore.instance .collection("users") .document("VtL1sxOoCOdJaOTT87IbMRwBe282") .collection("habit") .snapshots() .listen(_habitsAdded); } Stream<List<UserHabits>> get habits => _habitsController.stream; void _habitsAdded(QuerySnapshot snapshot){ var habit = _getHabitsFromSnapshot(snapshot); _habitsController.add(habit); } List<UserHabits> _getHabitsFromSnapshot(QuerySnapshot snapshot){ var habitItems = List<UserHabits>(); var documents = snapshot.documents; var hasDocuments = documents.length > 0; if(hasDocuments) { for (var document in documents) { habitItems.add(UserHabits.fromData(document.data)); } } return habitItems; } }

UserHabits

print(userHabits[0]['habit']) => 'habit'

任何帮助或指导将不胜感激!

0 个答案:

没有答案