Flutter&Firestore-有关“ startAfter”分页的问题

时间:2018-11-27 02:38:09

标签: firebase flutter google-cloud-firestore

我可以使用“ 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”也有同样的问题。

我真的希望它具有“偏移”功能。有人有解决方案吗?

2 个答案:

答案 0 :(得分:1)

您的查询将始终返回“ item7”,因为您始终在2018-11-11 11:11:11之后开始,因此它将忽略所有其他项目并转到最后的2018-11-11 11:11:11,然后从那里跳过。您需要获取返回的最后一项并保留对其的引用,然后在startAfter上使用文档引用开始于after。通常,flutter的startAfter需要一个列表来保留对其的引用。

Firebase query cursors

答案 1 :(得分:0)

当前抖动不支持startAfter(lastDocFetched)startAt(anyDoc)。 这是必需的,因为您说过它以字符串匹配值开头,而不是在特定文档上。