flutter StreamBuilder中使用的Firestore快照在数据更改时永远不会更新

问题描述 投票:1回答:1

我是一个颤抖的菜鸟,试图尝试一些例子。我创建了一个小部件,该小部件使用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的流有关。一旦我删除,一切正常。那是个错误吗?

firebase flutter google-cloud-firestore async-await snapshot
1个回答
0
投票

您需要使用orderBy字段创建索引:

https://firebase.google.com/docs/firestore/query-data/indexing

© www.soinside.com 2019 - 2024. All rights reserved.