我正在将ListView.builder
与两个Card
和Text
小部件一起使用。当点击按钮时,我将打开一个包含上述列表的页面,并滚动到该列表中的特定小部件。我是通过将自定义ScrollController
附加到ListView.builder
来实现的。
ListView.builder(
itemCount: count,
controller: ScrollController(initialScrollOffset: height),
itemBuilder: (context, index) {
return isHeader(index) ? Text(...) : Card(...);
}
)
height
基于小部件的数量及其固定高度。它可以正常工作,但是性能很差,按下按钮打开页面时会导致〜1秒钟的延迟。如果我不使用initialScrollOffset
,效果会很好。性能下降的原因是,直到达到initialScrollOffset
之前,所有以前的项目也都会生成。
是否可以在不构建所有先前项目的情况下在特定位置初始化列表?如果不是,是否有很好的解决方法来流畅地实现此行为?
答案 0 :(得分:1)
ListView
具有一个名为itemExtent
的属性,用于指定应显着提高性能的属性。它基本上期望列表中行的高度。
例如代码
ListView.builder(
itemCount: count,
controller: ScrollController(initialScrollOffset: height),
itemBuilder: (context, index) {
return Card(...);
},
itemExtend: 30.0 // Height of the row
)
有关更多信息,请检查docs。