我可以使用“ startAfter”和“ limit”进行分页,但是有错误。
例如,在Firestore DB中,我有7条记录:
{"title": "item1", "create_datetime": "2018-11-11 11:11:11"}
{"title": "item2", "create_datetime": "2018-11-11 11:11:11"}
{"title": "item3", "create_datetime": "2018-11-11 11:11:11"}
{"title": "item4", "create_datetime": "2018-11-11 11:11:11"}
{"title": "item5", "create_datetime": "2018-11-11 11:11:11"}
{"title": "item6", "create_datetime": "2018-11-11 11:11:11"}
{"title": "item7", "create_datetime": "2018-12-22 22:22:22"}
当页面大小为5时,因为我使用过,所以第一页就可以了:
.orderBy('create_datetime').limit(5)
它给我项目1-5。
加载第二页时,我使用了:
.orderBy('create_datetime').startAfter(['2018-11-11 11:11:11']).limit(5)
问题在于第二页结果仅包含item7,而item6则消失了。 “ startAt”也有同样的问题。
我真的希望它具有“偏移”功能。有人有解决方案吗?
答案 0 :(得分:1)
您的查询将始终返回“ item7”,因为您始终在2018-11-11 11:11:11
之后开始,因此它将忽略所有其他项目并转到最后的2018-11-11 11:11:11
,然后从那里跳过。您需要获取返回的最后一项并保留对其的引用,然后在startAfter上使用文档引用开始于after。通常,flutter的startAfter需要一个列表来保留对其的引用。
答案 1 :(得分:0)
当前抖动不支持startAfter(lastDocFetched)
或startAt(anyDoc)
。
这是必需的,因为您说过它以字符串匹配值开头,而不是在特定文档上。