扑如何显示所有文档的subCollection?

时间:2020-08-19 12:44:04

标签: firebase flutter collections stream document

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

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

Database collection

Database subcollection

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

对于您的第一个问题,我认为Siddharth Agrawal已经为您提供了正确的答案。

对于第二个问题,您的错误在于以下代码段:

                    title: Text(snapshot.data[index].data['phone']),
                    subtitle: Text(snapshot.data[index].data['Address']),

您宁愿这样访问数据:

 snapshot.data['phone']
 snapshot.data['Address']