【问题标题】:Flutter DocumentSnapshotFlutter 文档快照
【发布时间】:2019-04-12 13:23:53
【问题描述】:

我正在尝试从 firebase 的 DocumentSnapshot 中获取数据。

Firestore.instance.collection('products').document("Lucius_Malfoys_Zauberstab").get().then((DocumentSnapshot ds) {
          print(ds.exists);
        });

这个方法工作得很好并且返回true,但是:

      var keys =  ["Lucius_Malfoys_Zauberstab"];


     String id =  keys[0];
     print(id); ---> prints Lucius_Malfoys_Zauberstab


     Firestore.instance.collection('products').document(id).get().then((DocumentSnapshot ds) {
      print(ds.exists);
      });

返回假...

有谁知道,为什么会这样? 这只是我的应用程序中的一个小问题,但我很好奇为什么会发生这种情况。只是为了理解。谢谢!

编辑:

这是购物车集合的截图:

这是产品集合的截图:

【问题讨论】:

  • 我们无法知道data.documents.forEach((DocumentSnapshot doc) { 是什么,所以很难说出了什么问题。您能否使用硬编码的 ID 列表重现该问题,如果可以,请更新您问题中的代码?
  • 我添加了我的 Firebase 的两个屏幕截图。这对您有用还是我应该对列表进行硬编码?顺便提一句。我不认为这个问题与data.documents.forEach((DocumentSnapshot doc) { 部分有关。
  • 如果问题与循环无关,请在没有循环的情况下重现它并更新问题。如果问题与循环有关,请确保我们可以仅使用您提供的代码重现问题。为此,每次使用硬编码值都胜过任何动态。见how to create a minimal, complete, verifiable example
  • 好的,我更新了我的问题并删除了不必要的代码:)

标签: firebase dart flutter google-cloud-firestore


【解决方案1】:

我无法重现该问题。在这一点上我能做的最好的就是向你展示我所做的:

false 的第一次打印是在我获得文档之前。然后我创建了文档,再次运行_test,它打印了true

如果我删除我对 /55652643/{document} 的权限,则不会到达 print 语句,而是会得到一个堆栈跟踪,表明权限已被拒绝。

【讨论】:

  • 好的,所以肯定和var keys = doc["products"].keys.toList();有关,谢谢你的帮助!
  • 请注意,这正是我要求您在没有那个的情况下重现问题的原因。如果你运行了你共享的代码,你应该得到和我一样的结果。
猜你喜欢
  • 2019-03-22
  • 2022-01-25
  • 2018-03-19
  • 1970-01-01
  • 2020-11-27
  • 2021-04-21
  • 2020-06-24
  • 1970-01-01
  • 2020-06-20
相关资源
最近更新 更多