Flutter/Dart Stream Builder Multiple Collections Firebase

Viewed 201

I know there's probably a better way to do this but would like if its possible, to maintain the current DB structure.. (see attached) DB Collections

Question: How can I return a StreamBuilder with a Listview(child:listTile) that displays profiles for all UID's that a particular user is following(eg: return user profiles that user "BHRaCBR.." is following). In this case im BHRaCBR...

Code below works but only returns one listTile (user):

return StreamBuilder(
        stream: FirebaseFirestore.instance
            .collection('following')
            .doc('BHRaCBR..')
            .collection('userFollowing')
            .where('isApproved', isEqualTo: true)
            .snapshots(),
        builder: (context, snapshot) {
          if (!snapshot.hasData) {
            return CircularProgressIndicator();
          }
          return ListView.builder(
              itemCount: snapshot.data.documents.length,
              itemBuilder: (context, index) {
                DocumentSnapshot ds = snapshot.data.documents[index];
                return StreamBuilder(
                    stream: FirebaseFirestore.instance
                        .collection('profile')
                        .where('uid', isEqualTo: ds['uid'])
                        .snapshots(),
                    builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
                      if (!snapshot.hasData) {
                        return CircularProgressIndicator();
                      }
                      final data0 = snapshot.data.docs;

                      return Container(
                        height: 200,
                        child: ListView.builder(
                            itemCount: data0.length,
                            itemBuilder: (BuildContext ctx, index) {
                              return Card(
                                child: ExpansionTile(
                                  leading: CircleAvatar(
                                    radius: 32,
                                    backgroundImage: NetworkImage(
                                      data0[index]
                                          .data()['image_url']
                                          .toString(),
                                    ),
                                  ),
                                  title: Text(data0[index].data()['username']),
                                ),
                              );
                            }),
                      );
                    });
              });
        });
0 Answers
Related