我正在使用Flutter应用程序,该应用程序显示其中包含项目的类别列表。数据是从firebase提取的。
数据库结构:
我想显示这样的数据,并且必须是实时的:
我尝试使用Streambuilder,但这只能获取类别。 有人可以帮助我,也可以向我指出正确的方向,以获取项目列表作为每个类别的快照吗?预先感谢
快照仅包含字段,不包含集合。那么,我是否需要另一个带有每个类别的documentID的Streambuilder?这似乎是很多工作,需要读取大量数据库,只是为了获取已经获取的项目的集合。
StreamBuilder(
stream: _db.collection('categories').document(widget.id).collection('categories').orderBy('tag', descending: true).snapshots(),
builder: (context, snapshot) {
if(!snapshot.hasData) {
return Loader();
} else {
List<dynamic> docs = snapshot.data.documents;
docs.forEach((element) {
print(element['title']);
print(element.collection('items')); // Does not exist
});
return Text('test');
}
},
答案 0 :(得分:1)
Firestore一次只能加载一个集合(或集合组)中的数据。由于您要尝试从categories
和items
集合中加载数据,因此至少需要两个单独的读取操作。
StreamBuilder(
stream: _db.collection('categories').document(widget.id).collection('categories').orderBy('tag', descending: true).snapshots(),
builder: (context, snapshot) {
if(!snapshot.hasData) {
return Loader();
} else {
List<dynamic> docs = snapshot.data.documents;
docs.forEach((element) {
print(element['title']);
element.reference.collection('items').get()...
});
return Text('test');
}
},
由于这是另一种异步加载操作,因此您需要将get()
调用包装在FutureBuilder
中。