颤动中的Firebase分页

Posted

技术标签:

【中文标题】颤动中的Firebase分页【英文标题】:Firebase pagination in flutter 【发布时间】:2020-04-28 17:57:53 【问题描述】:

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

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

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 中实现它的好文档。

谢谢!

【问题讨论】:

【参考方案1】:

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

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

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

别忘了处理控制器:

@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

【讨论】:

我知道该怎么做,我不知道如何使用 Firebase pagination ,在他们的文档中,他们谈到 对查询进行分页,他们有多个查询!! . 他们所做的只是多个查询.. 他们没有做任何分页firebase.google.com/docs/firestore/query-data/….. 您可以在方法getDbData 中进行多个查询在第一个查询中使用await 并分配对变量的查询然后在下一个查询中使用该变量..

以上是关于颤动中的Firebase分页的主要内容,如果未能解决你的问题,请参考以下文章

使用streambuilder颤动firestore分页

使用refreshToken颤动firebase自动刷新用户会话

如何在颤动中将数据从复选框存储到 Firebase

如何将图像从颤动的资产上传到firebase存储?

颤动的firebase身份验证提供者未通知

使颤动通知(通过firebase)弹出到前台(并且不仅仅是状态栏中的图标)