如何在颤动中获取列表视图滚动的索引号?

4 indexing flutter flutter-listview

我在 flutter 应用程序中为列表视图构建器使用以下代码我需要在滚动时获取列表中项目的索引。就像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',);
              },
            );
Run Code Online (Sandbox Code Playgroud)

我怎么能得到那个?

Mob*_*ina 6

没有这么简单的方法可以做到这一点,但您可以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',)
  );
},
Run Code Online (Sandbox Code Playgroud)

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

int _currentItem = 0;
Run Code Online (Sandbox Code Playgroud)

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