一尘不染

Flutter ListView优化

flutter

Flutter 框架中显示具有滚动偏移量的大/不定式列表可能会令人无法接受地缓慢(取决于偏移量大小)。

当所有项目都具有相同大小时,可以通过指定 itemExtend 来解决此问题。

但是,即使所有列表项的大小相同,通常也不可能事先知道 itemExtend ,因为高度可能取决于字体大小,而字体大小取决于用户电话的可访问性设置。

有什么方法可以向 Flutter ListView 指示所有列表项具有相同的大小,而又不知道确切的大小是多少?

如果没有,有什么办法可以先计算列表项小部件的大小(然后使用它来设置 itemExtend )?


阅读 1015

收藏
2020-08-13

共1个答案

一尘不染

我不相信有一种方法可以首先自动计算窗口小部件的大小,但是您可以根据需要进行任意手动计算。
您可以使用DefaultTextStyle.of(context)来获取封闭上下文的字体大小,并在需要时使用LayoutBuilder来获取列表的最大宽度。然后,您可以使用这些信息来设置itemExtent

但是,如果使用CustomScrollView和SliverPrototypeExtentList,则可以得到所需的结果。您只需提供您的原型以及SliverChildDelegate(可能是SliverChildBuilderDelegate),其余的就应该弄清楚。

最后…我有点好奇您是否要共享代码中实际实例化列表的部分(以及其中显示的内容)。以我的经验, 当您处于发布模式时,
您可以在ListView上扔很多东西,并且仍然保持顺畅,因此您可能正在执行其他操作,从而导致速度变慢。在调试模式下,这当然是非常不同的。

2020-08-13