【发布时间】:2019-06-18 04:36:03
【问题描述】:
我正在构建一个包含图片和视频的帖子的时间线。
滚动列表时,图像和帖子本身会不断重新渲染。这会导致应用程序运行缓慢,因为必须重新计算尺寸 + 加载图像(在第二次加载时从本地缓存中加载)。
如何防止整个帖子小部件被重建?
这就是说明的问题。请注意滚动后的加载图标+淡入动画。
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 小部件有状态并添加AutomaticKeepAliveClientMixin 和wantKeepAlive => true,但并没有改变任何事情,并且总体假设Flutter 使用key 属性来防止重新渲染项目。
更新:我还尝试将帖子小部件缓存在本地 List<Widget> _postsWidgets 变量中,也不会改变任何事情。
【问题讨论】:
-
有什么更新吗?我也想知道同样的事情