Flutter 颤振-流是否只读取新文档?

Flutter 颤振-流是否只读取新文档?,flutter,google-cloud-firestore,stream,Flutter,Google Cloud Firestore,Stream,例如,如果我有一个QuerySnapshot类型的Stream,它正在订阅一个文档集合,而现在新文档被添加到该集合中,流是只读取新文档还是重新读取整个集合?每个新添加或更改的文档都需要重新读取一次。I我想这就是你要问的。如果您订阅的是流,并且获得了QuerySnapshots的流,则您可以选择在每次添加或更改新文档时重新加载整个数据库,或者只获取新文档 //Just gets new documents StreamBuilder<QuerySnapshot>(

例如,如果我有一个
QuerySnapshot
类型的
Stream
,它正在订阅一个文档集合,而现在新文档被添加到该集合中,
流是只读取新文档还是重新读取整个集合?

每个新添加或更改的文档都需要重新读取一次。

I我想这就是你要问的。如果您订阅的是
,并且获得了
QuerySnapshots
,则您可以选择在每次添加或更改新文档时重新加载整个数据库,或者只获取新文档

//Just gets new documents
StreamBuilder<QuerySnapshot>(
          stream: Firestore.instance.collection(//Collection).snapshots(),
          builder: (BuildContext context,
              AsyncSnapshot<QuerySnapshot> asyncSnapshot) {
            if (asyncSnapshot.hasData) {
                   //This is the difference
              List<DocumentChange> snapshot =
                  asyncSnapshot.data.documentChanges;
              snapshot.forEach((DocumentChange change) {}

//Get all documents
StreamBuilder<QuerySnapshot>(
          stream: Firestore.instance.collection('Test').snapshots(),
          builder: (BuildContext context,
              AsyncSnapshot<QuerySnapshot> asyncSnapshot) {
            if (asyncSnapshot.hasData) {
                 //This is the difference
              List<DocumentSnapshot> snapshot =
                  asyncSnapshot.data.documents;
              snapshot.forEach((DocumentSnapshot snapshot) {
//只获取新文档
StreamBuilder(
流:Firestore.instance.collection(//collection.snapshots(),
生成器:(BuildContext上下文,
异步快照(异步快照){
if(asyncSnapshot.hasData){
//这就是区别
列表快照=
asyncSnapshot.data.documentChanges;
snapshot.forEach((DocumentChange){}
//获取所有文档
StreamBuilder(
流:Firestore.instance.collection('Test').snapshots(),
生成器:(BuildContext上下文,
异步快照(异步快照){
if(asyncSnapshot.hasData){
//这就是区别
列表快照=
异步快照.数据.文档;
snapshot.forEach((DocumentSnapshot快照){
DocumentChange
自上次快照以来更改的文档数组。如果这是第一次快照,则所有文档都将作为添加的更改出现在列表中。

DocumentSnapshot
每次添加或更改新文档时,都会获取所有文档的列表。


请记住@Doug Stevenson说过,您会为每一个添加或更改的文档收取费用。

因此,使用文档更改仅用于性能目的,在文档读取的意义上,这两个选项没有区别,对吗?使用
DocumentChange
将减少文档读取量,因为您只读取新的或更新的文档是肯定的,但我我的意思是:如果你想显示集合中的所有文档,并开始运行,你可以获得所有文档,将其添加到指定列表中并传递给显示小部件,然后如果集合中的smth发生更改:对于每个文档更改,你将添加/替换/删除指定列表中的文档。这可能会导致提高性能,但在读取方面不会有差异。您必须处理大量文档才能真正注意到性能的提高,但您的逻辑是正确的,需要处理的文档更少,因此需要处理的计算也更少。