Ошибка FireStore в курсоре - положение курсора находится за пределами диапазона - PullRequest
0 голосов
/ 28 января 2019

У меня есть метод для возврата некоторых данных из FireStore, который используется для разбивки на страницы в моем приложении Flutter.

  static Future<QuerySnapshot> getAllItems({int count: 12, dynamic lastKey}) {

    if (lastKey != null) {
      return Firestore.instance
          .collection('uploads')
          .where('active', isEqualTo: true)
          .where('purge', isEqualTo: false)
          .startAfter([lastKey])
          .orderBy("active_time", descending: true)
          .where('active_time', isLessThanOrEqualTo: DateTime.now())
          .limit(count)
          .getDocuments();
    } else {
      return Firestore.instance
          .collection('uploads')
          .where('active', isEqualTo: true)
          .where('purge', isEqualTo: false)
          .orderBy("active_time", descending: true)
          .where('active_time', isLessThanOrEqualTo: DateTime.now())
          .limit(count)
          .getDocuments();
    }
  }

Когда значение lastKey не передается, все работает нормально.Но когда я передаю строковое значение lastKey, я получаю следующую ошибку:

cursor position is outside the range of the original query

Поле active_time является типом TimeStamp в FireStore.Индекс создан для того же.

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

Позвольте мне задокументировать проблему, с которой я столкнулся.

Проблема была связана с различием типа данных.База данных Firebase и тип моей переменной dart были разными .. т.е. .. DateTime и Timestamp.После исправления этого код начал работать.

0 голосов
/ 29 января 2019

Поскольку active_time - это DateTime, lastKey также должно быть DateTime.

Из документов на startAfter

Принимает список значений, создает ивозвращает новый запрос, который начинается после предоставленных полей относительно порядка запроса.

https://pub.dartlang.org/documentation/cloud_firestore/latest/cloud_firestore/Query/startAfter.html

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