我有一个项目正在研究,我需要在这里检索名为“ habits”的集合中的所有文档,这很容易,但是与此同时,我希望在名为{{1}的子集合中接收所有文档。 }。这是数据库结构,因此您可以更好地了解。
因为我要跟踪习惯,所以我需要跟踪它完成的所有时间,这就是子收集历史。
这类似于以下问题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'
任何帮助或指导将不胜感激!