我正在为我正在开发的应用程序使用 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/