【问题标题】: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
                 (
                 .
                 .
                 )
                 

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore


    【解决方案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();
    

    【讨论】:

      猜你喜欢
      • 2011-04-24
      • 2016-06-20
      • 1970-01-01
      • 2017-05-28
      • 2021-11-21
      • 2017-05-07
      • 2018-08-09
      • 1970-01-01
      • 2013-06-19
      相关资源
      最近更新 更多