我正在使用Flutter(cloud_firestore),并尝试从标题为'xxx'
的文档后的Firestore中获取数据,但是它返回0个结果。
return Firestore.instance.collection('products')
.orderBy('title')
.startAfter([{'title': 'xxx'}
]);
我在做什么错?如何正确实现抖动分页?
答案 0 :(得分:4)
您应该传递一个值,而不是一个映射:
return Firestore.instance.collection('products')
.orderBy('title')
.startAfter(['xxx']);
关于此的文档不是特别清楚。
答案 1 :(得分:0)
这对我有用。我的orderBy基于{名字,姓氏和电子邮件}。因此,startAfter也应该匹配这些字段值。我将文档保存在一个变量中,然后用这些字段的值制成一个列表,并用作startAfter参数。
static final Query queryBase = userCollectionRef
.orderBy(FieldNames.FIRST_NAME)
.orderBy(FieldNames.LAST_NAME)
.orderBy(FieldNames.EMAIL);
DocumentSnapshot _lastUser;
Future<List<DocumentSnapshot>> getAllUserDocuments({
bool next,
int limit = 10,
}) async {
List<DocumentSnapshot> _userDocSnaps = [];
try {
if (!next) _lastUser = null;
Query _query = queryBase;
if (_lastUser != null)
_query = _query.startAfter([
_lastUser.data[FieldNames.FIRST_NAME],
_lastUser.data[FieldNames.LAST_NAME],
_lastUser.data[FieldNames.EMAIL],
]);
var _userDocsSnap = await _query.limit(limit).getDocuments();
if (_userDocsSnap != null && _userDocsSnap.documents != null) {
_userDocSnaps = _userDocsSnap.documents;
if (_userDocSnaps != null && _userDocSnaps.length >= 1)
_lastUser = _userDocSnaps[_userDocSnaps.length - 1];
}
} catch (err) {
String errMessage = 'Exception in method _getAllUserDocuments';
PrintHelper.handlePrint(errMessage, err);
}
return _userDocSnaps;
}