【问题标题】:Flutter: PlatformException(error, Invalid document reference. Document references must have an even number of segments, but <x> has 1, null)Flutter: PlatformException(error, Invalid document reference. Document references 必须有偶数个段,但 <x> 有 1,null)
【发布时间】:2020-09-03 01:03:37
【问题描述】:

我的应用中有以下内容:

stream: Firestore.instance.collection('stores').document(currentUserUID).snapshots(),
  builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
     if (snapshot.hasData) {
       return ListView.builder(
         //do some stuff here with the data
       } else {
         return LoadingAnimation();
       }
     }
   }
 }

相当标准,但我收到了上面列出的错误。

我已验证 currentUserID 在调用此流之前填充了正确的数据。

在测试中我发现这个错误可能是由于在运行时“if (snapshot.hasData) {”显示快照中还没有数据引起的。如果我做任何事情,比如最小化应用程序并重新调整焦点,所有数据都会加载。所以它只需要重绘。

有没有办法对此进行“等待”或其他操作?这个问题必须有一个简单的解决方案,似乎是一个简单的问题,但我只是无法在任何其他线程中找到关于此的解决方案。

任何人都知道如何在这个流上执行等待,或者在它接收到数据时强制它更新(我有点认为这是流的全部意义,但这个例子证明它不是这样做)。

【问题讨论】:

  • 您能否添加更多关于如何获取 currentUserUID 值的详细信息?
  • 在上一个屏幕中,我从共享偏好中获取它。我尝试过的所有用于获取 uid 的 firebase 方法都没有奏效。因此,我将事情掌握在自己手中,当您第一次注册时,我将 uid 存储为共享首选项。我什至在启动这个屏幕之前就得到了这个值。当我启动这个屏幕时,我得到的 currentUserUID 值为 jOID51blWsRA9g6Tsc3bIZzbXEa2 然后传递到流。
  • 我不熟悉 Flutter,但您可以查看 this answer,您会看到一个带有 await 操作的流,这可能会有所帮助。我还发现 this postthis other one 在这种情况下可能有用。

标签: firebase flutter google-cloud-firestore


【解决方案1】:

如果错误消息实际上引用了此代码,则意味着currentUserUID 可能是一个空字符串。这是一个非常常见的错误 - 如果您使用 Google 搜索错误消息,您会看到许多其他人犯了同样的错误。

在使用之前打印currentUserUID 的值,以验证它是否包含您期望的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 2021-01-12
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多