我有一种方法可以从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中的时间戳记类型。为相同的索引创建。
答案 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。解决此问题后,代码开始起作用。