如何才能实现无限列表视图的项目延迟加载?当用户滚动到列表视图的末尾时,我希望通过网络加载更多项目.

推荐答案

你可以听ScrollController.

ScrollController有一些有用的信息,比如滚动集和ScrollPosition的列表.

在您的例子中,有趣的部分在controller.position,也就是当前可见的ScrollPosition.它表示可滚动对象的一段.

ScrollPosition包含有关它在可滚动对象中的位置的信息.例如extentBeforeextentAfter.或者是它的大小,extentInside号.

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

下面是一个使用我所说内容的基本示例.

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

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

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

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

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

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

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

Flutter相关问答推荐

如何从外部控制有状态窗口小部件本身?

FCM通知显示两次通知(&A)

CMakeLists.txt处的CMake错误:3(项目)找不到指定的Visual Studio实例

在setState之后,Ffltter ListView.Builder未更新

你能go 掉Flutter 小部件测试中的样板吗?

升级到Ffltter 3.16后,应用程序栏、背景 colored颜色 、按钮大小和间距都会发生变化

如何确定Flutter 中的文本 colored颜色 ?

运行调试flutter应用程序时出错:B/BL超出范围(最大+/-128MB)到'';

Flutter url_launcher 插件抛出java.lang.IllegalArgumentException:接收器未注册:io.flutter.plugins.urllauncher.WebViewActivity

Android Studio - Electric Eel 2022.1.1 更新 destruct 了 dart 文件图标

SfCircularChart 周围的额外间距

Flutter 错误:正文可能正常完成,导致返回null

如何修复int类型不是String类型的子类型

Flutter:制作自定义小部件的最佳做法是什么?

从物理设备 Flutter 中移除 USB 后启动画面不可见?

如何使用列Flutter 中文本占用的空间来控制svg宽度

函数中的变量在 Dart 中应该有什么关键字?

为什么这个参数类型不能分配给参数类型?

Flutter ListView builder 未使用新数据更新

Flutter GetX:Get.put 在 Widget 中的什么位置?