Flutter-流仅读取新文档吗?

时间:2020-04-18 01:49:00

标签: flutter google-cloud-firestore stream

例如,如果我有一个Stream类型的QuerySnapshot正在订阅文档集合,并且现在将新文档添加到该集合中,则Stream仅读取新文档还是重新读取整个收藏集?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我想这就是你要的。如果您订阅的是Stream,而您的StreamQuerySnapshots,那么您可以选择在每次添加或更改新文档时重新加载整个数据库,或者只是获取新文档

//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) {

DocumentChange
自上次快照以来已更改的文档数组。如果这是第一个快照,则所有文档都将作为“已添加的更改”出现在列表中。

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

请紧记@Doug Stevenson所说,您需要为每个添加或更改的文档付费。