【问题标题】:Flutter & Firestore - problem about "startAfter" paginationFlutter & Firestore - 关于“startAfter”分页的问题
【发布时间】:2018-11-27 02:38:09
【问题描述】:

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

我真的希望它有“偏移”功能。有人有解决办法吗?

【问题讨论】:

    标签: firebase flutter google-cloud-firestore


    【解决方案1】:

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

    Firebase query cursors

    【讨论】:

    • Flutter 包尚不支持传递文档引用。
    【解决方案2】:

    目前 Flutter 不支持 startAfter(lastDocFetched)startAt(anyDoc)。 正如您所说,这是必需的,它从字符串匹配值开始,而不是在特定文档处。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 2019-01-13
      • 2020-01-15
      • 1970-01-01
      • 2011-03-13
      • 2020-05-28
      • 2011-07-07
      相关资源
      最近更新 更多