ListView.builder上的initialScrollOffset的性能问题

时间:2019-07-18 07:48:20

标签: performance flutter flutter-layout

我正在将ListView.builder与两个CardText小部件一起使用。当点击按钮时,我将打开一个包含上述列表的页面,并滚动到该列表中的特定小部件。我是通过将自定义ScrollController附加到ListView.builder来实现的。

ListView.builder(
    itemCount: count,
    controller: ScrollController(initialScrollOffset: height),
    itemBuilder: (context, index) {
        return isHeader(index) ? Text(...) : Card(...); 
    }
)

height基于小部件的数量及其固定高度。它可以正常工作,但是性能很差,按下按钮打开页面时会导致〜1秒钟的延迟。如果我不使用initialScrollOffset,效果会很好。性能下降的原因是,直到达到initialScrollOffset之前,所有以前的项目也都会生成。

是否可以在不构建所有先前项目的情况下在特定位置初始化列表?如果不是,是否有很好的解决方法来流畅地实现此行为?

1 个答案:

答案 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