firebase - 如何在 Flutter 中实时监听 Firebase 更新
问题描述
我有一个从 firebase 读取用户数据的流。我在登录后触发它,它工作得很好。我在我的应用栏中显示数据。当我手动更新 firebase 时,我想立即在我的应用栏上看到新日期。首先,我猜我的 appbar 有问题,但后来我注意到更新 firebase 数据时我的流没有触发。这是我的流代码片段。我错过了什么?
static Future<User> userDataStream(userID) async {
print("userDataStream");
final databaseReference = Firestore.instance;
User currentUser = User();
await for (var snapshot in databaseReference
.collection('users')
.where('userID', isEqualTo: userID)
.snapshots()) {
currentUser.userName = snapshot.documents.first.data['userName'];
currentUser.email = snapshot.documents.first.data['email'];
currentUser.userID = snapshot.documents.first.data['userID'];
currentUser.level = snapshot.documents.first.data['level'];
currentUser.balance = snapshot.documents.first.data['balance'];
print(currentUser.balance);
return currentUser;
}
return currentUser;
}
解决方案
你如何使用这个流很重要。await for
开始倾听用户的声音,然后你return currentUser;
在其中做并打破await for
. 因此,它以后不能继续收听流。
而不是return currentUser;
inside await for
,您可以执行类似setState((){this.renderedUser = currentUser;})
的操作,以便来自服务器的用户成为呈现的用户。如果你这样做,还要在if (!mounted) return;
里面添加,await for
这样当你意识到你在不同的屏幕上时你就停止收听它。
更好的选择可能是使用StreamBuilder
小部件。
推荐阅读
- php - 优化 laravel 查询多对多级联
- sparql - 如何在 GraphDB 中调试发送到远程三元存储的 SPARQL 查询?(SERVICE子句中变量的绑定)
- python - 如何将 django-ckeditor 的 RichTextUploadingField 返回的 HTML 代码转换/导出为 docx 文件?
- python - 使用 Numpy 将多维数组相互附加/插入
- snowflake-cloud-data-platform - 雪花,如果发生恶意攻击怎么办?
- kotlin - 尝试使用 Quarkus 从本地 H2 数据库中检索所有行
- lua - 为什么它一直告诉我试图用“wins”索引 nil?
- javascript - discord js在运行bot.guilds.cache.array()时返回空数组
- java - Dockerized Weblogic 上的 weblogic.jar 为空
- python - 爬取这些特定站点并获取所有内部链接以进行抓取