如何在flutter中获取滚动的ListView索引号?

问题描述

我在flutter应用程序中为listview构建器使用以下代码,我需要在滚动时获取列表中项目的索引。使用onPageChanged:(){}时就像PageView.Builder的功能

return ListView.builder(
              itemCount: posts.length,itemBuilder: (context,index) {
                final item = posts[index];
                return Post(index: index,title: 'Test',imageUrl: 'https://www.google.com',);
              },);

我该怎么办?

解决方法

没有这么简单的方法,但是您可以使用visibility_detector包中的VisibilityDetector

通过用VisibilityDetector包装每个列表项,可以获得在屏幕上完全可见的最后一个列表项的索引。

itemBuilder: (context,index) {
  return VisibilityDetector(
    key: Key(index.toString()),onVisibilityChanged: (VisibilityInfo info) {
      if (info.visibleFraction == 1)
        setState(() {
          _currentItem = index;
          print(_currentItem);
        });
    },child: Post(index: index,title: 'Test',imageUrl: 'https://www.google.com',)
  );
},

_currentItem是处于主窗口小部件状态的变量,用于存储最后一个可见项目的索引:

int _currentItem = 0;

注意:这是基于滚动方向的,即最后一个可见项目的索引等于在滚动后可见的最后一个项目的索引;如果滚动方向是正向,则为项目在屏幕底部的索引;如果滚动方向为反向,则为项目在屏幕顶部的索引。不过,可以轻松更改此逻辑(例如,使用队列存储可见的全部项目)。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...