flutter 中的 Firebase 分页

标签 firebase flutter dart google-cloud-firestore

我正在为我正在开发的应用程序使用 Firebase firestore。基本上,我有一个可能包含数千个文档Collection('Chat'),我需要一种方法来实现firebase分页来限制文档数量文档是从后端检索的。

我使用streamBuilder并将下面的查询作为流传递:

stream: widget.messageDocRef
      .collection('Chat').orderBy('timestamp', descending: true)
      .limit(80)
      .snapshots();

我有一个ListView和一个scrollController,代码:

ListView(
        physics: const AlwaysScrollableScrollPhysics(),
        reverse: true,
        controller: _scrollController,
        padding: EdgeInsets.symmetric(vertical: 20.0, horizontal: 10.0),
        children: messagesBubble,
      ),

我找不到任何关于如何在 flutter 中实现它的好的文档。

谢谢!

最佳答案

使用 ScrollController,然后在 initState 中执行以下操作:

@override
  void initState() {
    this.getdbData();
    super.initState();
    _scrollController.addListener(() {
      if (_scrollController.position.pixels ==
          _scrollController.position.maxScrollExtent) {
        getdbData();
      }
    });
  }

因此,首先添加一个监听器,该监听器将注册一个闭包,以便在对象更改时调用。然后检查position.pixel是否等于position.maxScrollExtent,如果满足则调用该方法。

另外不要忘记处置 Controller :

@override
  void dispose() {
    _scrollController.dispose();
    super.dispose();
  }

https://api.flutter.dev/flutter/widgets/ScrollPosition-class.html

https://api.flutter.dev/flutter/widgets/ScrollController-class.html

getdbData() 是从数据库检索数据的方法,您将将该数据分配给属性 stream

关于flutter 中的 Firebase 分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59692601/

相关文章:

flutter - 在底部导航栏顶部添加分隔线?

ios - Google Firebase - 某些手机上的电话身份验证结果错误

Firebase Auth - 更新用户的电子邮件后,Firebase Auth 注销用户

javascript - Firestore数据结构: Storing An Order in Firestore

ios - dispatch 组通知安置?

dart - 为什么在 flutter 错误中缺少源信息

flutter - 如何使用dart读取复杂的嵌套json文件

spring-boot - 带有 Spring-boot 后端的 Flutter websocket

performance - Dart:静态与动态资源利用率

flutter - Flutter软件包URI在软件包的测试中不存在