颤动firebase检查集合是不是为空

Posted

技术标签:

【中文标题】颤动firebase检查集合是不是为空【英文标题】:flutter firebase check if collection is empty颤动firebase检查集合是否为空 【发布时间】:2021-11-02 04:55:50 【问题描述】:

我在我的 Flutter 应用程序上使用 Firestore,我在 ListView 中获取数据。我想知道如何检查集合是否在 Firestore 上没有文档?

编辑:

StreamBuilder<QuerySnapshot>(
            stream: db.collection('favorite_encheres').snapshots(),
            builder: (context, AsyncSnapshot snapshot) 
              if (QuerySnapshot.size == 0) 
                return Container(
                .
                .
                .
                )
                else
                return ListView
                 (
                 .
                 .
                 )
                 

【问题讨论】:

【参考方案1】:

没有单独的操作来检查集合是否存在。集合在其中有文档时自动存在,并在删除最后一个文档时消失。

如果您已经将数据加载到 StreamBuilder 中,您可以检查 QuerySnapshot.size 是否大于 0。

如果您不需要加载所有数据,而只是想知道集合中是否存在任何文档,您可以使用limit 为 1 的查询。如果没有结果,您就知道集合是空的。

【讨论】:

我在使用 QuerySnapshot.size 时出错,“无法使用静态访问实例成员 'size'”我刚刚编辑了帖子并添加了我的代码,你介意检查一下吗 size 属性存在于QuerySnapshot 类的特定实例上,因此在您的代码中为snapshot.size 我替换了它,现在我收到此错误“没有为类型 'AsyncSnapshot' 定义 getter 'size'。尝试导入定义 'size' 的库” Arg.... 我错过了您的 snapshotAsyncSnapshot,而 size 是在 QuerySnapshot 上定义的(如前所述)。我强烈建议自己学习导航这些类型,但在您的代码中应该是:if (snapshot.hashData &amp;&amp; snapshot.data.size == 0)【参考方案2】:

你可以像这样检查Collection是否退出

 Future<bool> _isCollectionExits() async 
    QuerySnapshot<Map<String, dynamic>> _query =
        await FirebaseFirestore.instance.collection('collectionPath').get();

    if (_query.docs.isNotEmpty) 
      // Collection exits
      return true;
     else 
      // Collection not exits
      return false;
    
  

你可以这样使用

bool _isCollExits = await _isCollectionExits();

【讨论】:

以上是关于颤动firebase检查集合是不是为空的主要内容,如果未能解决你的问题,请参考以下文章

颤动检查云Firestore集合中是不是存在用户ID

Firebase Facebook登录检查用户是不是存在

构建 Flutter iOS 应用程序时出错 - Firebase

单击通知按钮不会在颤动中打开应用程序

Laravel 检查集合是不是为空

如何检查 Laravel 集合是不是为空?