firebase - 颤动如何显示所有文档的子集合?
问题描述
我有一个餐厅集合和每个餐厅的订单子集合。而且,我试图为所有餐厅的订单制作一个列表视图。在下面的代码中,我只能列出第一家餐厅的订单。我也尝试使用流生成器来做到这一点,但它不起作用。如果有人帮助我,我会很高兴:)
Future getOrders() async{
List list_of_restaureants = await Firestore.instance.collection("Restaurants")
.getDocuments().then((val) => val.documents);
for (int i=0; i<list_of_restaureants.length; i++) {
QuerySnapshot qn = await Firestore.instance.collection("Restaurants")
.document(list_of_restaureants[i].documentID.toString()).collection("Orders").getDocuments();
return qn.documents;
}}
FutureBuilder(
future: getOrders(),
builder: (_,snapshot){
if(snapshot.connectionState == ConnectionState.waiting){
return Center(
child: CircularProgressIndicator(),
);}
else{
return ListView.builder(
itemCount: snapshot.data.length,
physics: BouncingScrollPhysics(),
itemBuilder: (_,index){
return new ListTile(
title: Text(snapshot.data[index].data['phone']),
subtitle: Text(snapshot.data[index].data['Address']),
);
},);
}
},
),
解决方案
你犯了一个非常简单的错误。在 for 循环中,您添加到列表中,然后将其返回。因此,一旦添加了第一个文档,它就会返回列表而不完成 for 循环。所以它只适用于一家餐厅。相反,这样做
Future getOrders() async{
List list_of_restaureants = await Firestore.instance.collection("Restaurants")
.getDocuments().then((val) => val.documents);
List documentsToReturn;
for (int i=0; i<list_of_restaureants.length; i++) {
QuerySnapshot qn = await Firestore.instance.collection("Restaurants") .document(list_of_restaureants[i].documentID.toString()).collection("Orders").getDocuments();
documentsToReturn.addAll(qn.documents);
}
return documentsToReturn;
}
推荐阅读
- laravel - 在 Laravel 请求中删除段或更改 REQUEST_URI?
- postgresql - 在 postgres 中导入 CSV 文件时的错误控制
- ios - 如何在 iPad 上使用 CMPedometer?
- gekko - 当我使用较少的 nlp 迭代时,APOPT 正在为 MINLP 问题找到更好的局部最小值。我期待相反的结果,我错过了什么?
- javascript - 无法使用 selenium 的类实现来抓取网页
- reactjs - 防止 FullCalendar (React) 在每次渲染时重新获取事件和资源
- delphi - 使用已加载的文本独立更改 RichEdit 文本颜色
- javascript - 与 iframe 和/或弹出窗口共享 WebGL 上下文
- sql - 使用 BIGINT(大数)的 MSAccess 子窗体
- javascript - 正则表达式可以匹配并返回部分文本,同时删除其余部分以使特定于性别的文本成为可能