【问题标题】:ListView itemBuilder method triggered on scroll滚动时触发的 ListView itemBuilder 方法
【发布时间】: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 构建完成后触发方法?

【问题讨论】:

  • 我相信这个答案应该澄清一切:stackoverflow.com/a/56272858/12964903
  • 是的,这是完全正常的行为。 ListView 根据需要构建它的子视图。如果您的孩子在列表区域之外,则不会构建该孩子。此外,当一个孩子出现在屏幕上并离开列表区域时,它会非常有效地为下一个即将到来的孩子回收该视图。

标签: flutter dart widget flutter-layout


【解决方案1】:

ListView.separated在滚动时重新触发了它的itemBuilder,因为它只加载屏幕上显示的项目,不像ListView在初始化时加载所有项目,因为这个ListView不是一个好长列表的选项。

当我们有一个长列表和复杂的小部件要呈现为ListView.separated 的项目时,这会显着提高性能。这是问题中提到的预期行为。

【讨论】:

    猜你喜欢
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多