扑火扑火

时间:2020-01-11 07:47:36

标签: firebase flutter dart google-cloud-firestore

我正在将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,
      ),

我找不到任何有关如何实现它的好的文档。

谢谢!

1 个答案:

答案 0 :(得分:2)

使用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