找出 ListView 中的哪些项目是可见的

Find out which items in a ListView are visible

我如何找出 ListView 中当前 visibleinvisible 的项目?
例如,我在 ListView 中有 100 个项目,当我滚动到屏幕或列表的顶部时,我想检测哪些项目在视口中出现或消失。

插图:

没有简单的方法可以做到这一点。 Here 是同一个问题,但是没有答案。

有一个活跃的GitHub issue关于这个。

该问题有多种解决方案。这个Gist features one that requires the rect_getter package.
或者,您可以查看 this proposal.

TL;DR

如果您正在寻找一种简单的方法来找到它,这还没有实现。但是,有一些解决方案,比如我上面提到的以及来自其他软件包的解决方案,例如 VisibilityDetector from flutter_widgets.

有一个 package 用于此目的。

A VisibilityDetector widget wraps an existing Flutter widget and fires a callback when the widget's visibility changes.

用法:

VisibilityDetector(
    key: Key('my-widget-key'),
    onVisibilityChanged: (visibilityInfo) {
      var visiblePercentage = visibilityInfo.visibleFraction * 100;
      debugPrint(
          'Widget ${visibilityInfo.key} is ${visiblePercentage}% visible');
    },
    child: someOtherWidget,
  )

您也可以使用inview_notifier_list。它基本上是一个普通的 ListView,它定义了一个可见区域,并且 children 当它们位于该区域时会收到通知。