flutter - 用户向下滚动屏幕后如何清除图像缓存,如果向上滚动则重新加载?
问题描述
用户向下滚动屏幕后如何清除图像缓存,如果向上滚动则重新加载?
我有一个懒惰的列表视图,而用户向下滚动带有图像的新闻卡是从网络加载的。当许多图像加载到 500 左右时,应用程序开始“慢”,我想这是因为缓存中有很多图像,我的图像只有 100 像素。
解决方案
重要说明,只是在图像缓存中包含更多图像不太可能导致性能下降,尤其是当您使用ListView.builder()
. 检查您没有在调试模式下运行,这会严重损害性能,并确保在尝试优化性能之前进行配置。
话虽如此,如果您知道 Flutter 的图像缓存中图像的密钥,则可以通过调用来删除图像
imageCache!.evict(key);
不同类型的ImageProvider
密钥不同,但鉴于您是从网络获取图像,我假设您正在使用NetworkImage
(或在引擎盖下Image.network
使用)。NetworkImage
然后,您可以创建一个包装 Widget 的 Widget Image
,并在它被处理后将其从缓存中逐出。也许是这样的:
class DisposingNetworkImage extends StatefulWidget {
final NetworkImage image;
// boilerplate
}
class DisposingNetworkImageState extends State<DisposingNetworkImage> {
@override
void dispose() {
imageCache!.evict(widget.image);
super.dispose();
}
@override
Widget build(BuildContext) => Image(
image: widget.image,
);
}
然后您可以在其他小部件中使用它,例如:
DisposingNetworkImage(image: NetworkImage('https://example.com/my-image'))
推荐阅读
- javascript - 无法读取未定义 ReacJS 的属性“编号”
- python - seaborn 热图彩色图
- image - 无法使用 Expo Client iOS 加载离线图像 React Native
- java - 如何在 Java 中找到方法的源代码?
- c# - 如何获取扩展类的静态成员
- java - 以线程安全的方式在 Spring Boot 中存储和更改全局应用程序属性的最佳方法是什么
- algorithm - 查找最低内存操作顺序的算法
- android - Kotlin 如何使用 mpandroidchart 更改条形图的颜色
- multithreading - 什么会导致使用 RestTemplate 在 Spring Boot Restapi 中过时的连接
- node.js - 'ERR_INVALID_CALLBACK'