滚动时触发的 ListView itemBuilder 方法
Posted
技术标签:
【中文标题】滚动时触发的 ListView itemBuilder 方法【英文标题】:ListView itemBuilder method triggered on scroll 【发布时间】:2021-08-07 04:09:07 【问题描述】:我正在使用带有以下 itemBuilder 的 ListView.separated:
itemBuilder: (context, index)
return _buildRow(dataList[index]);
我注意到这个 _buildRow() 方法是在我滚动时触发的。它似乎只触发滚动时屏幕外的行。
我不使用 _buildRow() 中的 setState() 方法。 另外,我验证了超级方法 build(BuildContext context) 没有被触发。它实际上只是 itemBuilder 之一。
我不确定这是否是正常行为。有没有办法避免在滚动时重新触发 itemBuilder 方法?如果这不可能,有没有办法在 ListView 构建完成后触发方法?
【问题讨论】:
我相信这个答案应该澄清一切:***.com/a/56272858/12964903 是的,这是完全正常的行为。 ListView 根据需要构建它的子视图。如果您的孩子在列表区域之外,则不会构建该孩子。此外,当一个孩子出现在屏幕上并离开列表区域时,它会非常有效地为下一个即将到来的孩子回收该视图。 【参考方案1】:ListView.separated
在滚动时重新触发了它的itemBuilder
,因为它只加载屏幕上显示的项目,不像ListView在初始化时加载所有项目,因为这个ListView
不是一个好长列表的选项。
当我们有一个长列表和复杂的小部件要呈现为ListView.separated
的项目时,这会显着提高性能。这是问题中提到的预期行为。
【讨论】:
以上是关于滚动时触发的 ListView itemBuilder 方法的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ListView 的项目构建器之前添加初始小部件,或者如何在 ListView.itemBuilder 之上注入小部件?