首页 > 解决方案 > 如何根据firebase querySnapshot结果调用不同的Flutter函数

问题描述

使用 Flutter,我想搜索一个 Firebase 集合(集合 X)以查明该集合中的任何文档中是否存在一个字段(字段 Y)。如果包含该字段的文档存在,我想执行一个任务(任务 A),如果包含该字段的文档不存在,我想执行一个不同的任务(任务 B)。

这是我尝试过的:

final CollectionReference collectionXRef = FirebaseFirestore.instance.collection("Collection X")

collectionXRef.where("Field Y", isEqualTo: Z)
                  .get().then((QuerySnapshot querySnapshot) {
                if (querySnapshot.docs.length > 0) {
                   Task A
                }
                else { Task B }
})


我遇到的问题是,无论我在 If 语句中添加什么内容:(querySnapshot.docs.length > 0)代码都会继续执行任务 A

这是我尝试过的:

if (querySnapshot.docs.isEmpty)

if (querySnapshot.docs.isNotEmpty) 

if (querySnapshot.docs.length > 0) 

if (querySnapshot.docs.length != 0)

if (querySnapshot.size > 0)

if (querySnapshot.size != 0)

if (querySnapshot.size == 0)

if (querySnapshot.size >= 1)


期望的行为:如果在包含搜索字段的集合中没有文档,我想执行“任务 B”,但是,该函数始终返回任务 A,如果有要显示的结果,它可以正常工作,但是,如果没有t 任何结果它都会显示一个空白的结果页面,而不是执行任务 B。

集合“FbCollection1”中只有 3 个文档,这 3 个文档中有 2 个包含正在搜索“字段 Y”的字段。文档和搜索的字段“字段 Y”都没有嵌套。

标签: firebasefluttergoogle-cloud-firestore

解决方案


你能用这段代码试试吗:

collectionXRef.where("Field Y", isEqualTo: Z)
                  .get().then((QuerySnapshot querySnapshot) {

                    bool hasData=false;

                    querySnapshot.docs.forEach((ds){
                      print('id: ${ds.id}');
                      hasData=true;
                    })

                if (hasData) {
                   Task A
                } else { Task B }
})

请检查您的过滤器是否正确。就像您搜索的值的类型一样。


推荐阅读