firebase - 如何根据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”都没有嵌套。
解决方案
你能用这段代码试试吗:
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 }
})
请检查您的过滤器是否正确。就像您搜索的值的类型一样。