加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flutter ListView延迟加载

发布时间:2020-12-14 14:58:34 所属栏目:百科 来源:网络整理
导读:如何实现无限列表视图的延迟加载项?当用户滚动到listview的末尾时,我想通过网络加载更多项目. 解决方法 你可以听一个 ScrollController . ScrollController有一些有用的信息,例如scrolloffset和 ScrollPosition 的列表. 在你的情况下,有趣的部分是在control
如何实现无限列表视图的延迟加载项?当用户滚动到listview的末尾时,我想通过网络加载更多项目.

解决方法

你可以听一个 ScrollController.

ScrollController有一些有用的信息,例如scrolloffset和ScrollPosition的列表.

在你的情况下,有趣的部分是在controller.position中,这是当前可见的ScrollPosition.它代表可滚动的一部分.

ScrollPosition包含有关它在可滚动内部的位置的信息.如extentBefore和extentAfter.或者它的大小,有extentInside.

考虑到这一点,您可以基于extentAfter触发服务器调用,该调用表示可用的剩余卷轴空间.

这是使用我所说的基本示例.

class MyHome extends StatefulWidget {
  @override
  _MyHomeState createState() => new _MyHomeState();
}

class _MyHomeState extends State<MyHome> {
  ScrollController controller;
  List<String> items = new List.generate(100,(index) => 'Hello $index');

  @override
  void initState() {
    super.initState();
    controller = new ScrollController()..addListener(_scrollListener);
  }

  @override
  void dispose() {
    controller.removeListener(_scrollListener);
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: new Scrollbar(
        child: new ListView.builder(
          controller: controller,itemBuilder: (context,index) {
            return new Text(items[index]);
          },itemCount: items.length,),);
  }

  void _scrollListener() {
    print(controller.position.extentAfter);
    if (controller.position.extentAfter < 500) {
      setState(() {
        items.addAll(new List.generate(42,(index) => 'Inserted $index'));
      });
    }
  }
}

您可以清楚地看到,当到达滚动的末尾时,由于加载了更多项目,滚动条会消耗掉.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读