Flutter Firestore: противоречивые результаты при использовании startAtDocument

#firebase #flutter #google-cloud-firestore #flutter-web

#firebase #flutter #google-облако-firestore #flutter-web

Вопрос:

Я использую Flutter Firestore в Интернете для выполнения запроса на разбивку на страницы. Когда я пытаюсь получить вторую страницу результатов, используя ‘startAtDocument’, результаты иногда отображаются на один документ дальше.

Вот мой простой тестовый пример:

 Future<void> loadSendQueueSIMPLETTEST(SendQueryType theType) async {
    final num PAGE_LENGTH = 3;
    ObservableList<DocumentSnapshot> sendQueueDocsLocal;

    QuerySnapshot snap;

    // We're doing an initial page query
    snap = await Firestore.instance.collection('departments')
        .document(departmentID)
        .collection('send_queue')
        .orderBy('created')
        .limit(PAGE_LENGTH)
        .getDocuments();

    sendQueueDocsLocal = new ObservableList.of(snap.documents);

    sendQueueDocsLocal.forEach((element) {
      print("GOT SEND QUEUE DOCS: ${element.documentID}");
    });

    DocumentSnapshot startDoc = sendQueueDocsLocal[2];
    print("DOING PREV QUERY startAt: ${startDoc.documentID}");
    snap = await Firestore.instance.collection('departments')
        .document(departmentID)
        .collection('send_queue')
        .orderBy('created')
        .startAtDocument(startDoc)
        .limit(PAGE_LENGTH)
        .getDocuments();

    sendQueueDocsLocal.clear();
    sendQueueDocsLocal.addAll(snap.documents);

    sendQueueDocsLocal.forEach((element) {
      print("SECOND SEND QUEUE DOCS: ${element.documentID}");
    });
    

  }
  

Когда я запускаю это с
DocumentSnapshot startDoc = sendQueueDocsLocal[2];
Я получаю эти выходные данные:

 GOT SEND QUEUE DOCS: ahkiflypgVFeUgk6e3Kk
GOT SEND QUEUE DOCS: 7NtDiDR5hwSulB8SOou5
GOT SEND QUEUE DOCS: ioIXHJJKsuPXA7g5Bks2

DOING PREV QUERY startAt: ioIXHJJKsuPXA7g5Bks2

SECOND SEND QUEUE DOCS: Th3pHayGzqA1y1i3UTSf   <-- I expected this to be ioIXHJJKsuPXA7g5Bks2
SECOND SEND QUEUE DOCS: FznOTVIkPXnJi2co7yCp
SECOND SEND QUEUE DOCS: U7EtpyWIBsK6xlUJp43A
  

Если я изменю начальный документ на другой документ (с другим индексом), например:
DocumentSnapshot startDoc = sendQueueDocsLocal[1];
Результаты выглядят нормально:

 GOT SEND QUEUE DOCS: ahkiflypgVFeUgk6e3Kk
GOT SEND QUEUE DOCS: 7NtDiDR5hwSulB8SOou5
GOT SEND QUEUE DOCS: ioIXHJJKsuPXA7g5Bks2

DOING PREV QUERY startAt: 7NtDiDR5hwSulB8SOou5

SECOND SEND QUEUE DOCS: 7NtDiDR5hwSulB8SOou5   <--- This looks right!
SECOND SEND QUEUE DOCS: ioIXHJJKsuPXA7g5Bks2
SECOND SEND QUEUE DOCS: Th3pHayGzqA1y1i3UTSf
  

Есть ли причина, по которой startAtDocument ведет себя по-другому при некоторых условиях?