首页 > 解决方案 > Flutter & Firestore - 关于“startAfter”分页的问题

问题描述

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

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

标签: firebasefluttergoogle-cloud-firestore

解决方案


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

查看Firebase 查询游标


推荐阅读