我正在将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,
),
我找不到任何有关如何实现它的好的文档。
谢谢!
答案 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