光标发生FireStore错误-光标位置超出范围

时间:2019-01-28 18:46:55

标签: firebase flutter google-cloud-firestore

我有一种方法可以从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是FireStore中的时间戳记类型。为相同的索引创建。

2 个答案:

答案 0 :(得分:0)

由于active_time是DateTime,所以lastKey也应该是DateTime。

来自startAfter上的文档

  

获取值列表,创建并返回一个新的查询,该查询开始   在相对于查询顺序提供的字段之后。

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

答案 1 :(得分:0)

让我记录一下我遇到的问题。

该问题是由于数据类型的不同所致。 Firebase数据库和我的dart变量类型是不同的。即DateTime和Timestamp。解决此问题后,代码开始起作用。