【发布时间】:2021-08-24 22:45:15
【问题描述】:
我想知道如何在 Flutter 中使用 CustomScrollView 实现无限滚动。
在初始化时,我可以调用加载项目,它可以工作。但是,我想再次启动对提供程序的调用以再次重新加载,但我可以重新启动,因为我没有在 onScroll 函数中调用提供程序的上下文。
目前,我有这个:
class _FeedScreenState extends State<FeedScreen> {
final _scrollController = ScrollController();
double _prevScrollPos = 0.0;
_onScroll() {
double maxScroll = _scrollController.position.maxScrollExtent;
double currentScrollPos = _scrollController.position.pixels;
double delta = 200.0;
if (maxScroll - currentScrollPos <= delta && _prevScrollPos - currentScrollPos < 0) {
print('load... I would like to call my provider to load the others posts with addPost()');
//Provider.of<GlobalFeeds>(context, listen: false).addPost();
// to fix the unlimited call on onScroll function
_scrollController.jumpTo(_scrollController.position.pixels);
}
_prevScrollPos = currentScrollPos;
}
_addPost(context) {
Provider.of<GlobalFeeds>(context, listen: false).addPost();
}
@override
void initState() {
_scrollController.addListener(_onScroll);
Timer.run(() {
_addPost(context);
});
super.initState();
}
@override
void dispose() {
_scrollController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
final globalFeeds = Provider.of<GlobalFeeds>(context);
final posts = globalFeeds.posts;
return Scaffold(
body: CustomScrollView(
controller: _scrollController,
slivers: [
SliverAppBar(
...
),
SliverList(
delegate: SliverChildBuilderDelegate((context, index) {
final Post post = posts[index];
return PostContainer(post: post);
},
childCount: posts.length,
),
),
],
)
);
}
}
为了初始化我的列表,我调用 initState() :
Timer.run(() {
_addPost(context);
});
我不知道这是否是一个好习惯。你知道我该如何实现这个功能,在 onScroll 函数中有一个上下文或者有一个更好的解决方案吗?
【问题讨论】:
标签: flutter