如何检查 Flutter Firestore 中是不是存在用户文档?

Posted

技术标签:

【中文标题】如何检查 Flutter Firestore 中是不是存在用户文档?【英文标题】:How to check if a user document exists in Flutter Firestore?如何检查 Flutter Firestore 中是否存在用户文档? 【发布时间】:2021-12-29 15:34:06 【问题描述】:

如果用户通过 StreamBuilder 根据用户 ID ('uid') 在 Firestore 中的“用户”集合下有一个文档,我正尝试在用户通过身份验证后添加一个检查。

我遇到的问题是,当我运行我的代码时,它按预期工作,但几秒钟后,即使文档不存在,它也会重定向到“UserHomeScreen”。我该如何纠正这个问题,以便没有用户文档的用户不会被推送到我的“UserHomeScreen”?

这是我的代码:

class UserStream extends StatelessWidget 
  const UserStream(Key? key) : super(key: key);
  

  @override
  Widget build(BuildContext context) 
    return StreamBuilder(
      stream: FirebaseFirestore.instance.collection('users').doc('uid').snapshots(),
      builder: (context, snapshot) 
        if (snapshot.hasData) 
          return const UserHomeScreen();
         else 
          return const SignUpNewUser();
        
      ,
    );
  

【问题讨论】:

【参考方案1】:

当异步调用完成时,snapshot.hasData 为真。即使文档不存在,一旦确定,snapshot.hasData 仍然为真。

为确保文档存在,您还需要检查:

if (snapshot.hasData && snapshot.data!.exists) 
  ...

这也显示在handling one time reads 的文档中。

【讨论】:

以上是关于如何检查 Flutter Firestore 中是不是存在用户文档?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Flutter 在 Firestore 中检查多个文档中的特定值

如何使用 Flutter future<bool> 检查 Firestore 中是不是存在子集合

如何在 FireStore 中获取 isAdmin 字段并在 Flutter 中检查它是真还是假

检查 Flutter Firestore 中是不是已存在字段

如何使用 Firestore 在 Flutter 中搜索文本

Flutter firestore - 检查文档ID是不是已经存在