如何清除CachedNetworkImage抖动中的缓存

时间:2019-07-16 14:12:27

标签: android caching flutter

我不想将图像存储在缓存中。我使用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。

6 个答案:

答案 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