Flutter StreamBuilder 中使用的 Firestore 快照在数据更改时永远不会更新
Firestore snapshot used in flutter StreamBuilder never gets updated when data changes
我是一个 flutter 菜鸟,正在尝试使用一些示例。我创建了一个小部件,它使用 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
}
}
);
}
[更新]:即使我更改查询,我的数据似乎也没有更新。我猜它正在使用一些本地缓存的数据,而不是再次从服务器获取它。
[更新 2]:当我使用解析为无结果的查询(例如,不存在的集合)时,纺车会继续运转。当 运行 再次正确查询时,它会返回相同的旧结果,不会反映 Firebase 云中的任何变化。
[更新 3]:问题似乎与我的包含 orderBy 的流有关。一旦我删除一切正常。那是一个错误吗?
您需要使用 where
和 orderBy
字段创建索引:
https://firebase.google.com/docs/firestore/query-data/indexing
{
"collectionGroup": "XXX",
"queryScope": "COLLECTION",
"fields": [
{
"fieldPath": "userId",
"order": "ASCENDING"
},
{
"fieldPath": "YYY",
"order": "DESCENDING"
}
]
},
我是一个 flutter 菜鸟,正在尝试使用一些示例。我创建了一个小部件,它使用 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
}
}
);
}
[更新]:即使我更改查询,我的数据似乎也没有更新。我猜它正在使用一些本地缓存的数据,而不是再次从服务器获取它。
[更新 2]:当我使用解析为无结果的查询(例如,不存在的集合)时,纺车会继续运转。当 运行 再次正确查询时,它会返回相同的旧结果,不会反映 Firebase 云中的任何变化。
[更新 3]:问题似乎与我的包含 orderBy 的流有关。一旦我删除一切正常。那是一个错误吗?
您需要使用 where
和 orderBy
字段创建索引:
https://firebase.google.com/docs/firestore/query-data/indexing
{
"collectionGroup": "XXX",
"queryScope": "COLLECTION",
"fields": [
{
"fieldPath": "userId",
"order": "ASCENDING"
},
{
"fieldPath": "YYY",
"order": "DESCENDING"
}
]
},