首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无限滚动,支持CustomScrollView颤动

无限滚动,支持CustomScrollView颤动
EN

Stack Overflow用户
提问于 2021-06-08 04:53:17
回答 1查看 47关注 0票数 0

我想知道如何在Flutter中使用CustomScrollView实现无限滚动。

在init上,我有一个加载项目的调用,它可以工作。但是,我想再次启动对provider的调用以重新加载,但我可以重新启动,因为我没有在onScroll函数中调用provider的上下文。

目前,我有以下内容:

代码语言:javascript
复制
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():

代码语言:javascript
复制
Timer.run(() {
    _addPost(context);
});

我不知道这是不是一个好的做法。你知道我如何实现这个功能吗,在onScroll函数中有一个上下文,或者有一个更好的解决方案?

EN

回答 1

Stack Overflow用户

发布于 2021-06-08 10:48:27

尝试使用

代码语言:javascript
复制
  itemBuilder: (index, context) {
    if(items.length < index) {
      return items[index-1];
    }
    else {
      return FutureBuilder(/*...*/); // your loading widget which
    }                          // becomes the new item once loaded
  }

还可以去掉childCount

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67878570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档