Флаттер - поток читает только новые документы? - PullRequest
0 голосов
/ 18 апреля 2020

Если у меня есть, например, Stream типа QuerySnapshot, который подписывается на собрание документов, и теперь новые документы добавляются в собрание, Stream читает только новые или перечитывает все коллекция

Ответы [ 2 ]

1 голос
/ 18 апреля 2020

Я думаю, это то, что вы спрашиваете. Если вы подписываетесь на Stream и получаете обратно Stream из 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) {

DocumentChange
Массив документов, которые изменились с момента последнего снимка. Если это первый снимок, все документы будут в списке как добавленные изменения.

DocumentSnapshot
Получает список всех документов при каждом добавлении или изменении нового документа.

Имейте в виду, как @Doug Stevenson сказал, что вы платите за каждый добавленный или измененный документ.

1 голос
/ 18 апреля 2020

Каждый новый добавленный или измененный документ стоит еще одного чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...