Performance ListView.builder上initialScrollOffset的性能问题
我正在使用Performance ListView.builder上initialScrollOffset的性能问题,performance,flutter,flutter-layout,Performance,Flutter,Flutter Layout,我正在使用ListView.builder和一些Card和Text小部件。当点击一个按钮时,我正在打开一个包含上述列表的页面,并滚动到此列表中的特定小部件。我通过将自定义的ScrollController附加到ListView.builder来实现这一点 ListView.builder( itemCount: count, controller: ScrollController(initialScrollOffset: height), itemBuilder: (c
ListView.builder
和一些Card
和Text
小部件。当点击一个按钮时,我正在打开一个包含上述列表的页面,并滚动到此列表中的特定小部件。我通过将自定义的ScrollController
附加到ListView.builder
来实现这一点
ListView.builder(
itemCount: count,
controller: ScrollController(initialScrollOffset: height),
itemBuilder: (context, index) {
return isHeader(index) ? Text(...) : Card(...);
}
)
高度
基于小部件的数量及其固定高度。它正在工作,但性能很差,按下按钮打开页面时会导致约1秒的延迟。如果我不使用initialScrollOffset
性能很好。性能下降的原因是,在达到initialScrollOffset
之前,所有先前的项都会被构建
是否可以在不构建之前的所有项目的情况下在特定位置初始化列表?如果没有,是否有一个很好的解决方法来以流畅的方式实现此行为?
ListView
有一个名为itemExtent
的属性,指定应该显著提高性能的属性。它基本上期望列表中的行的高度
例如代码
ListView.builder(
itemCount: count,
controller: ScrollController(initialScrollOffset: height),
itemBuilder: (context, index) {
return Card(...);
},
itemExtend: 30.0 // Height of the row
)
欲了解更多信息,请查看。我可以知道
项目计数吗?@10101010大约60你知道卡的高度(每行的高度)吗?@10101010是的,我应该提到我在列表中有两种类型的小部件(卡和文本元素),因此有两种不同的元素高度。。我觉得这不相关。我尝试使用itemExtent
,确实有了性能改进,但遗憾的是,它不适合我的用例。我想知道卡(或列表中的行)中是怎么让60个列表变慢的。解决方法可能是什么都不显示(或加载程序)首先显示列表,然后显示列表。每个卡都包含两个AutoSizeText小部件(),这使其速度变慢。如何检测完成的构建并滚动以从显示加载程序切换到列表?我开始使用ScrollContainers的animateTo
而不是initialScrollOffset
,它从初始构建中获取工作负载,并将其分布在一个时间范围内。至少这种滞后已经消失了。