我是一个颤抖的菜鸟,试图尝试一些例子。我创建了一个小部件,该小部件使用StreamBuilder从Firebase中提取一些查询。它工作得很好,但是当数据更改时它永远不会更新UI。我尝试阅读有关内容,从所有内容中我都可以看到它应该可以立即使用。我在Firebase端缺少一些步骤来启用更改吗?还是需要以某种方式配置SteamBuilder,使其偶尔获取数据?该代码是基本代码,只需复制并粘贴一些示例即可:
@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: Firestore.instance
.collection("XXX").orderBy('YYY')
.where("userID", isEqualTo: userID)
.snapshots(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(
valueColor: new AlwaysStoppedAnimation<Color>(
Color.fromRGBO(212, 20, 15, 1.0),
),
),
);
} else {
// Return some list view using the data in snapshot.data.documents
}
}
);
}
[更新]:即使更改查询,我的数据也似乎未更新。我猜它正在使用一些本地缓存的数据,而不是再次从服务器获取它。
[[Update 2]:当我使用无法解决任何结果的查询(例如,不存在的收藏)时,纺车一直在运转。当再次运行正确的查询时,它将返回相同的旧结果,而不反映Firebase云中的任何更改。
[[更新3]:问题似乎与包含orderBy的流有关。一旦我删除,一切正常。那是个错误吗?
您需要使用orderBy字段创建索引:
https://firebase.google.com/docs/firestore/query-data/indexing