【问题标题】:How to call different Flutter functions based on firebase querySnapshot result [closed]如何根据firebase querySnapshot结果调用不同的Flutter函数[关闭]
【发布时间】: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


【解决方案1】:

你能用这段代码试试吗:

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 }
})

请检查您的过滤器是否正确。比如你搜索的值的类型。

【讨论】:

  • 由于以下错误,我无法运行代码:“未为类型 'QuerySnapshot' 定义方法 'forEach'。”
  • 对不起。我已经更新了答案中的代码。你能再试一次吗?
  • 我已经尝试过了,但是,我现在只在期待结果和不期待结果时才获得任务 B。
  • 我已经更新了代码。你能告诉我当你期望有数据时你看到了什么,当你期望没有数据时你看到了什么。当您拥有它时,您应该会看到您获得的集合的 ID,如果您不期望数据,则不应打印任何内容。
  • 更新后的代码也不起作用。它对你有用吗?
猜你喜欢
  • 1970-01-01
  • 2020-10-09
  • 2014-03-24
  • 2020-03-12
  • 1970-01-01
  • 2021-07-17
  • 1970-01-01
  • 2017-10-20
  • 1970-01-01
相关资源
最近更新 更多