首页 > 解决方案 > 颤动如何显示所有文档的子集合?

问题描述

我有一个餐厅集合和每个餐厅的订单子集合。而且,我试图为所有餐厅的订单制作一个列表视图。在下面的代码中,我只能列出第一家餐厅的订单。我也尝试使用流生成器来做到这一点,但它不起作用。如果有人帮助我,我会很高兴:)

  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']),
                      );
                    },);
                }
              },
            ),

数据库集合

数据库子集合

标签: firebasefluttercollectionsstreamdocument

解决方案


你犯了一个非常简单的错误。在 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;
}

推荐阅读