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

Posted

技术标签:

【中文标题】找出 ListView 中的哪些项目是可见的【英文标题】:Find out which items in a ListView are visible 【发布时间】:2019-11-22 12:04:06 【问题描述】:

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

插图:

【问题讨论】:

你为什么想知道?如果您要创建一个包含 100 个项目的列表,您应该使用 ListView.builder 女巫您可以传递一个 itemBuilder,这将在您的 listView 中构建一行的“小部件”。所以颤振会设法让你的女巫线是可见的并渲染它,并从记忆中清除那些不可见的...... 是的,我知道颤振可以做到这一点。我想使用这个功能来使用另一个听众来使用它 【参考方案1】:

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

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

该问题有多种解决方案。这个Gist 具有一个需要rect_getter package 的功能。 或者,您可以查看this proposal。

TL;DR

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

【讨论】:

现在有一个简单的方法可以做到这一点,检查这个答案:***.com/a/57252652/11246031 @LukasSchneider 感谢您的提及! 谢谢你们,卢卡斯的回答似乎也是一个很好的解决方案!【参考方案2】:

为此目的有一个package。

VisibilityDetector 小部件包装现有的 Flutter 小部件,并在小部件的可见性发生变化时触发回调。

用法:

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

【讨论】:

【参考方案3】:

您也可以使用inview_notifier_list。它基本上是一个普通的 ListView,它定义了一个可见区域,并且它的孩子在该区域内时会收到通知。

【讨论】:

那里的例子甚至不起作用......我正在使用flutter v2.8

以上是关于找出 ListView 中的哪些项目是可见的的主要内容,如果未能解决你的问题,请参考以下文章

使用 Listview 中的复选框获取所选项目

如何找出recyclerview中的可见项目?

根据可见属性更改 ListView 的高度

ListView项目文本是不可见的

WPF ListView 控件已填充但不可见

在 WPF ListView C# 中获取第一个可见项