【发布时间】: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 post 和 this other one 在这种情况下可能有用。
标签: firebase flutter google-cloud-firestore