首页 > 解决方案 > 如何在颤动中获取列表视图的滚动索引号?

问题描述

我在颤振应用程序中使用下面的列表视图构建器代码,我需要在滚动时获取列表中项目的索引。就像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',);
              },
            );

我怎么能得到那个?

标签: flutterindexingflutter-listview

解决方案


没有这么简单的方法可以做到这一点,但您可以VisibilityDetectorvisibility_detector包中使用:

您可以通过将每个列表项用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;

注意:这是基于滚动方向的,即最后一个可见项的索引等于滚动后最后一个可见项的索引;如果向前滚动,它是屏幕底部的项目的索引,但如果是反向滚动,它是屏幕顶部的项目的索引。不过,这个逻辑可以很容易地改变(例如,使用队列来存储所有可见项目)。


推荐阅读