如何只显示当前用户的帖子?

时间:2020-07-31 15:29:49

标签: flutter post google-cloud-firestore compare

我正在尝试构建一个扑朔迷离的应用程序,但遇到了这个问题,我似乎找不到任何现有答案。如何只显示当前用户的帖子?我的帖子集合有一个用户ID字段,我想与当前用户进行比较,并仅显示userId和currentUser相同的帖子。


 return FutureBuilder(
        future: FirebaseAuth.instance.currentUser(),
        builder: (ctx, futureSnapshot) {
          if (futureSnapshot.connectionState == ConnectionState.waiting) {
            Center(
              child: CircularProgressIndicator(),
            );
          }
          return StreamBuilder(
              stream: Firestore.instance.collection('posts').snapshots(),
              builder: (context, streamSnapshot) {
                if (streamSnapshot.connectionState == ConnectionState.waiting) {
                  Center(
                    child: CircularProgressIndicator(),
                  );
                }
                final documents = streamSnapshot.data.documents;

                return ListView.builder(
                    itemCount: documents.length,
                    itemBuilder: (ctx, index) => PostItem(
                          documents[index]['title'],
                          documents[index]['imageUrl'],
                          documents[index]['location']['address'],
                        ));
              });
        });

here is my post collection structure

2 个答案:

答案 0 :(得分:2)

您当前正在获得所有带有以下内容的帖子:

Firestore.instance.collection('posts').snapshots()

如果您只想为当前用户发布信息,则类似于:

var uid = (await FirebaseAuth.instance.currentUser()).uid;
Firestore.instance.collection('posts').where('uid', isEqualTo: uid).snapshots()

第一行确定当前用户的UID,然后第二行使用它来仅请求uid字段与值匹配的文档。

答案 1 :(得分:0)

我只是意识到我没有,但是我的未来变成了streambuilder where子句的变量!我正在尝试使用原始的fireauth currentuser!

return FutureBuilder(
        future: FirebaseAuth.instance.currentUser(),
        builder: (ctx, futureSnapshot) {
          if (futureSnapshot.connectionState == ConnectionState.waiting) {
            Center(
              child: CircularProgressIndicator(),
            );
          }
          **final String currentUser** = futureSnapshot.data.uid;
          return StreamBuilder(
              stream: Firestore.instance
                  .collection('posts')
                  .where('userId', isEqualTo: **currentUser**)
                  .snapshots(),
              builder: (context, streamSnapshot) {
                if (streamSnapshot.connectionState == ConnectionState.waiting) {
                  Center(
                    child: CircularProgressIndicator(),
                  );
                }
                final documents = streamSnapshot.data.documents;

                return ListView.builder(
                    itemCount: documents.length,
                    itemBuilder: (ctx, index) => PostItem(
                          documents[index]['userId'],
                          documents[index]['title'],
                          documents[index]['imageUrl'],
                          documents[index]['location']['address'],
                        ));
              });
        });


```