【问题标题】:Firestore returns 'instance of querysnapshot' even if the collection does not exists即使集合不存在,Firestore 也会返回“查询快照实例”
【发布时间】:2020-05-28 21:53:07
【问题描述】:
StreamBuilder(
   stream: Firestore.instance.collection('aaaaaaaaaaaaaaaa').snapshots(),
    builder: ( context , snap){

      if(snap.data == null){
         print('A');
      }
      if(snap.data != null){
        print(snap.data);
        print('B');
      }

显然集合 ('aaaaaaaaaaaaaa') 甚至不存在,那么为什么它不返回 null?

【问题讨论】:

  • 由于某种原因它的行为是这样的。为什么不检查长度或其他参数来检查它是否为空。

标签: firebase flutter google-cloud-firestore


【解决方案1】:

查询不存在(或空)的集合不是错误。因此,当没有结果时,Firestore 会为您提供一个空的 QuerySnapshot,而不是错误。

要检测是否有任何结果,请检查QuerySnapshot 是否有任何文档(FlutterFire 似乎没有包装原生的QuerySnapshot.isEmpty() method

【讨论】:

  • 当我试图获取该集合中的文档时,它返回空DocumentSnapshot。所以我认为它永远不会返回 null 那么我如何检查它是否为 null?
  • 我不确定您所说的“空 DocumentSnapshot”是什么意思。如果您snap.data.documents 包含任何文档,则表示该集合不为空。如果没有文档,Firebase 将不会返回 DocumentSnapshot
【解决方案2】:

你应该使用hasData来检查是否有数据:

          StreamBuilder(
            stream: Firestore.instance.collection('aaaaaaaaaaaaaaaa').snapshots(),
            builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
              if (snapshot.hasData) {
                print("a");
              } else{
                return Text("No data");
              }
              return CircularProgressIndicator();
            },
          ),

【讨论】:

  • 仍然得到相同的结果。如果集合不存在,那么为什么它不返回 null?
  • 它应该不返回任何数据,如果你使用我的代码你会得到什么?
猜你喜欢
  • 1970-01-01
  • 2021-05-08
  • 1970-01-01
  • 2018-06-11
  • 1970-01-01
  • 1970-01-01
  • 2021-06-17
  • 2020-06-09
  • 1970-01-01
相关资源
最近更新 更多