#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 ведет себя по-другому при некоторых условиях?