我不想将图像存储在缓存中。我使用CachedNetworkImage加载图像。 我想知道是否可以删除或不将图像存储在毕加索之类的缓存中。
我的代码:
var annotatedImg = CachedNetworkImage(
fit: BoxFit.fill,
imageUrl: Constants.IMAGE_BASE_URL + widget._fileId + Constants.CONTOUR_IMG_SUFFIX,
placeholder: (context, url) => progressBar,
errorWidget: (context, url, error) => new Icon(Icons.error),
);
我尝试过
annotatedImg.cacheManager.emptyCache();
但显示无法调用emptyCache为null。
答案 0 :(得分:6)
?
不要在第一个答案中使用emptyCache(),它会清除所有缓存
答案 1 :(得分:2)
自CachedNetworkImage 版本2.3 起,所有这些解决方案将不起作用,因为它在2个不同的位置(DefaultCacheManager和NetworkImageProvider)中缓存了图像
因此,唯一的解决方案是使用evictFromCache
中的CachedNetworkImage
内置方法
像这样:
Future _deleteImageFromCache() async {
String url = "your url";
await CachedNetworkImage.evictFromCache(url);
}
evictFromCache
是一个静态方法,因此它不需要在小部件树中包含CachedNetworkImage
,您可以在任何地方直接使用它。
答案 2 :(得分:1)
如果您不想将下载的图像存储在缓存中,请不要使用FadeInImage(
// here `bytes` is a Uint8List containing the bytes for the in-memory image
placeholder: // This should be an image, so you can't use progressbar,
image: NetworkImage('https://backend.example.com/image.png'),
)
。而是将FadeInImage
小部件与NetworkImage一起使用:
Date
答案 3 :(得分:1)
我同意MichaelM,请不要使用CachedNetworkImage。如果显示这样的图像:
Image.network(
_headImageUrl,
fit: BoxFit.fitHeight,
)
您可以使用这些代码来清理图像缓存:
PaintingBinding.instance.imageCache.clear();
答案 4 :(得分:0)
一天后,我找到了解决方法,通过调用emptyCache()方法使用DefaultCacheManger对象。清除缓存数据。
DefaultCacheManger manager = new DefaultCacheManager;
manager.emtyCache(); //clears all data in cache.
答案 5 :(得分:0)
CachedNetworkImage将图像存储在临时(缓存)文件夹中,您可以使用path_provider
的{{1}}方法对其进行访问。您会在这里找到getTemporaryDirectory()
(可能需要检查名称)。您可以在其中删除文件夹。
要在您的应用中执行此操作,应使用Directory类,例如:
libCachedImageData