【发布时间】:2021-06-04 13:27:18
【问题描述】:
使用 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,如果有要显示的结果,它可以正常工作,但是,如果没有任何结果它显示一个空白的结果页面而不是执行任务 B。
集合“FbCollection1”中只有 3 个文档,这 3 个文档中有 2 个包含正在搜索“字段 Y”的字段。文档和搜索的字段“字段 Y”都没有嵌套。
【问题讨论】:
-
您是否 100% 确定没有结果?您是否尝试循环通过生成的
docs? -
有结果,问题是:如果在包含搜索字段的集合中没有文档,我正在尝试执行“任务B”,但是,该函数总是返回任务A,这工作如果有要显示的结果很好,但是,如果它们不是任何结果,它会显示一个空白的结果页面,而不是执行任务 B。
-
您能否将
querySnapshot.docs.length的值打印到控制台,并在您期望一个空列表时检查它显示的内容。 -
我按照你的要求做了,``` querySnapshot.docs.length `` == 0 无论是我期待还是不期待。我 100% 确定我不应该是 0,因为该字段存在于多个文档中。
-
能否请您提供您的 Firebase 结构的 sn-p。该集合的屏幕截图将有助于澄清问题。
标签: firebase flutter google-cloud-firestore