0

我在我的颤振应用程序中使用 Firestore 流。数据是用户配置文件,因此我需要根据需要对其进行过滤。我的初始数据流如下

Stream s = FirebaseFirestore.instance
        .collection('users')
        .snapshots(includeMetadataChanges: true);

当我必须过滤数据时,我会

setState((){

s = FirebaseFirestore.instance
        .collection('users')
        .where('name',isEqualTo:"MyName")
        .snapshots(includeMetadataChanges: true);

});

这工作正常,但我担心的是读取,我知道数据已缓存,并且只有在某些情况发生变化但我不知道流时才从服务器读取。

我尝试监控 firebase 上的使用情况,但由于该应用程序正在生产中,我无法正确测量任何东西。

如果通过更改流进行过滤确实会导致对 firebase 的读取,那么我还能做些什么来过滤缓存中的数据。

我想到的一件事是在本地存储所有内容,但在本地存储成千上万用户的数据是不切实际的。

4

1 回答 1

1

流是一系列异步事件。它就像一个异步 Iterable——当你请求下一个事件时,流不会在你请求它时获取它,而是在它准备好时告诉你有一个事件。来自 Dart ( https://dart.dev/tutorials/language/streams )

流是在类终止或通过取消流对象时关闭的连续数据流:

streamSub.cancel();

您可以在流构建器中使用流。每次对任何文档应用更改时,它都会重新构建构建器。

StreamBuilder(
   stream: stream,
   builder: (BuildContext content, AsyncSnapshot snapshot) {
   }
)

如果 1 个文档在查询结果中发生更改,您将被计费 1 次阅读。您无需为未更改的单据付费。查询快照对象仅重用内存中来自先前结果集的文档数据。通过道格史蒂文森https://stackoverflow.com/a/60062304/9142870

于 2021-12-18T08:15:55.977 回答