【问题标题】:Flutter ListView optimizationFlutter ListView 优化
【发布时间】:2018-08-10 18:28:47
【问题描述】:

Flutter 框架中显示带有滚动偏移的大/不定式列表可能会非常慢(取决于偏移大小)。

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

但通常不可能提前知道 itemExtend,即使所有列表项的大小都相同,因为高度可能取决于字体大小,而字体大小取决于用户手机的可访问性设置。

有没有办法向 Flutter ListView 表明所有列表 物品的尺寸相同,但不知道具体尺寸是多少?

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

【问题讨论】:

    标签: android ios flutter


    【解决方案1】:

    我不相信有一种方法可以先自动计算小部件的大小,但是您可以随心所欲地进行手动计算。您可以使用DefaultTextStyle.of(context) 来获取字体大小封闭上下文,并使用LayoutBuilder 来获取列表的最大宽度(如果这很重要)。然后,您可以使用这些信息来设置itemExtent

    但是,如果您使用 CustomScrollView 和 SliverPrototypeExtentList,则可以得到您想要的。您只需提供您的原型和一个 SliverChildDelegate(可能是 SliverChildBuilderDelegate),它应该会解决剩下的问题。

    最后......我有点好奇您是否会分享您实际实例化列表的代码部分(以及其中显示的内容)。以我的经验,当你处于发布模式时,你可以在 ListView 上扔很多东西,但它仍然很流畅,所以你正在做的其他事情可能会导致速度变慢.在调试模式下它当然是非常不同的。

    【讨论】:

    • 我认为即使是简单的 DetailTile 显示在 ListView 中,在大型列表的发布模式下性能也会非常糟糕。考虑表示从 2000 年开始的日历的 ListView。如果未指定 itemExtent 以提供流畅的用户体验,Flutter 必须在 20 毫秒内计算约 6400 个小部件
    • 添加了关于 SliverPrototypeExtentList 的信息 - 我想这就是你想要的。
    • SliverPrototypeExtentList 解决了我的问题。谢谢。
    • 我们可以看看解决方案的工作示例吗? ?
    猜你喜欢
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 2011-07-30
    • 1970-01-01
    相关资源
    最近更新 更多