gpt4 book ai didi

dart - 如何防止小部件在 ListView 滚动时重新呈现

转载 作者:IT王子 更新时间:2023-10-29 06:58:49 25 4
gpt4 key购买 nike

我正在用带有图片和视频的帖子构建时间轴。

滚动列表时,图像和帖子本身会不断重新呈现。这会导致应用程序运行缓慢,因为必须重新计算尺寸 + 加载图像(第二次加载时从本地缓存)。

如何防止重建整个帖子小部件?

这是说明的问题。请注意滚动后的加载图标+淡入动画。

Demo of the problem here (GIF)

这是 ListView 的代码.

  ListView.builder(
physics: const AlwaysScrollableScrollPhysics(),
cacheExtent: 30,
addAutomaticKeepAlives: true,
padding: const EdgeInsets.all(0),
itemCount: _posts.length,
itemBuilder: (context, index) {
var post = _posts[index];
return OBPost(
post,
onPostDeleted: _onPostDeleted,
key: Key(
post.id.toString(),
),
);
})

我试过制作 OBPost小部件有状态并添加 AutomaticKeepAliveClientMixinwantKeepAlive => true但不会改变任何事情,总体上假设 Flutter 使用了 key防止项目重新呈现的属性。

更新:我还尝试在本地缓存帖子小部件 List<Widget> _postsWidgets变量,也不会改变任何东西。

最佳答案

您的列表看起来可以无限滚动,所以我不建议您缓存 OBPost 小部件。你如何处理图像缓存?您将它们保存到本地文件系统吗?如果是,那么我建议您也有图像小部件的内存缓存。

为 ListView 使用构建器背后的整个想法是不创建大量的列表项小部件,而是出于内存和性能原因保持合理的最小值。

关于dart - 如何防止小部件在 ListView 滚动时重新呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54346697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com