首页 > 解决方案 > 光标中的 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 中的时间戳类型。为相同创建索引。

标签: firebasefluttergoogle-cloud-firestore

解决方案


既然active_time是DateTime,lastKey也应该是DateTime。

从文档开始startAfter

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

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


推荐阅读