如何清除CachedNetworkImage抖动中的缓存

Nav*_*mar 1 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),
    );
Run Code Online (Sandbox Code Playgroud)

我试过了

annotatedImg.cacheManager.emptyCache();
Run Code Online (Sandbox Code Playgroud)

但显示无法调用emptyCache为null。

nul*_*ull 15

我同意 MichaelM,不要使用 CachedNetworkImage。如果你显示这样的图像:

Image.network(
      _headImageUrl,
      fit: BoxFit.fitHeight,
    )
Run Code Online (Sandbox Code Playgroud)

您可以使用这些代码来清理图像缓存:

PaintingBinding.instance.imageCache.clear();
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢您的回答。我为删除的图像苦苦挣扎了三个月,但它们仍然出现在屏幕上。我非常沮丧,因为这对我来说没有任何意义。在我看到你的答案后,我在删除图像后添加了**PaintingBinding.instance.imageCache.clear()**,它终于起作用了。再次,非常感谢你,这对我真的很有帮助。 (4认同)

Abd*_*tem 13

由于 CachedNetworkImage版本 2.3,所有这些解决方案都不起作用,因为它将图像缓存在 2 个不同的地方(DefaultCacheManager 和 NetworkImageProvider)

所以唯一的解决方案是使用evictFromCache内置方法CachedNetworkImage

像这样:

Future _deleteImageFromCache() async {
    String url = "your url";
    await CachedNetworkImage.evictFromCache(url);
  }
Run Code Online (Sandbox Code Playgroud)

evictFromCache是一个静态方法,因此它不需要CachedNetworkImage在您的 Widget 树中有 ,您可以从任何地方直接使用它。


小智 11

import 'package:flutter_cache_manager/flutter_cache_manager.dart'; await DefaultCacheManager().removeFile('YOUR_URL');

不要从第一个答案中使用 emptyCache(),它会清除您的所有缓存

  • 如果应用程序未重新启动,它不会清除缓存。也有办法解决吗? (2认同)

Nav*_*mar 5

一天后,我找到了解决方案,通过调用emptyCache()方法使用DefaultCacheManger对象。清除缓存数据。

DefaultCacheManger manager = new DefaultCacheManager;
manager.emtyCache(); //clears all data in cache.
Run Code Online (Sandbox Code Playgroud)