在Flutter应用中从Firestore访问嵌套子集合

时间:2020-05-21 09:13:15

标签: firebase flutter google-cloud-firestore stream-builder

我具有以下方式的Firestore数据库结构:

数据库结构

Database Structure

MyPost的结构

MyPost's structure

我有两个主要的收藏集,即:

  1. 用户

  2. 所有帖子

在users集合中,存储了所有用户信息,显示名称,dp_url等 并且在All_posts集合中,每个文档都指示已上传帖子的用户(文档的ID与用于标识上传帖子的用户的用户uid相同)。在all_posts的每个文档中,都有一个名为my_posts的子集合,其中包含文档,即该特定用户的帖子!

我不知道如何使用嵌套的Streambuilders来访问all_posts集合中每个文档(用户)的my_post子集合中的每个帖子。

到目前为止我尝试过什么:

StreamBuilder<QuerySnapshot>(
          stream: Firestore.instance.collection('all_posts').snapshots(),
          builder: (context, snapshot) {
            if (!snapshot.hasData)
              return Text("Loading data...");
            else {
              return ListView(
                children: snapshot.data.documents.map((document) {
                  return StreamBuilder<QuerySnapshot>(
                    stream: Firestore.instance.collection('/all_posts/${document.data['uid']}/my_posts').snapshots(),
                    builder: (context, snapshot) {
                      if (!snapshot.hasData)
                        return Text("Loading data...");
                      else {
                        return FutureBuilder<QuerySnapshot>(
                          future: Firestore.instance.collection('all_posts/${document.data['uid']}/my_posts').getDocuments(),
                          builder: (context, snapshot) {
                            if (snapshot.hasData) {
                              return ListView.builder(
                                itemCount: snapshot.data.documents.length,
                                shrinkWrap: true,
                                itemBuilder: (context, index) {
                                  return ListTile();
                                },
                              );
                            } else {
                              return CircularProgressIndicator();
                            }
                          },
                        );
                      }
                    },
                  );
                }).toList(),
              );
            }
          },
        ),

0 个答案:

没有答案