【问题标题】:How do I get only the current users posts to show?如何仅显示当前用户的帖子?
【发布时间】:2020-07-31 15:29:49
【问题描述】:

我正在尝试用颤振构建一个应用程序,但我遇到了这个问题,我似乎无法找到任何现有的答案。如何仅显示当前用户的帖子?我的帖子集合有一个用户 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

【问题讨论】:

  • 你现在有什么问题?请编辑问题以更好地说明您正在使用的数据,以及您希望此代码对这些数据做什么。

标签: flutter post google-cloud-firestore compare


【解决方案1】:

您目前正在收到以下所有帖子:

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

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

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

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

【讨论】:

  • 您好,我已经添加了一个指向具有 userId 字段的后期集合图像的链接。使用您的建议时,我需要将 userId 用作 ('uid', isEqualTo: userId) 但无法识别 userId。
  • 在这种情况下,您需要有一个 FutureBuilder 来确定 UID,然后 inside 您将拥有您已经拥有的 StreamBuilder。跨度>
【解决方案2】:

我刚刚意识到我没有将我的未来变成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'],
                        ));
              });
        });


```

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    相关资源
    最近更新 更多