我目前正在编写一个习惯跟踪应用程序。为了显示所有习惯,我曾经使用List.map()方法来做到这一点:
Column(
children: [todayList.map((habit) => HabitCard(habit: habit))],
...,
])
我使用了这个,因为我可以完全构建多个列表,而不会出现任何 UI 异常。
但很快我就注意到一个大问题:构建方法每秒被调用大约 10 次,而只有 3 个习惯。从性能角度来看,这当然是不可接受的。
当我尝试使用 ListView.builder() 时,习惯只执行构建方法,而实际上发生了一些变化,例如更新、编辑等。
我的 2 个问题:
考虑到当今的设备更加先进,您认为这种性能差异很重要吗?
取决于项目的复杂程度,假设有100个项目,每个项目都在播放视频,如果使用
Column
来显示那么内存使用量很大,因为每个项目都会同时渲染。
如何使用 ListView.builder 实现与 List.map() 相同的效果?
您可以延迟显示项目,
Column
始终显示三个项目,当滚动到结束时,添加新项目并删除最旧的项目,但请使用ListView.builder()
,更容易。