CachedNetworkImage Flutter中如何清除缓存

dxpyg8gm  于 2023-05-08  发布在  Flutter
关注(0)|答案(8)|浏览(1016)

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

dtcbnfnu

dtcbnfnu1#

自CachedNetworkImage版本2.3起,所有这些解决方案都无法工作,因为它在2个不同的地方缓存图像(DefaultCacheManager和NetworkImageProvider)
因此,唯一的解决方案是使用CachedNetworkImage中的evictFromCache内置方法
就像这样:

Future _deleteImageFromCache() async {
    String url = "your url";
    await CachedNetworkImage.evictFromCache(url);
  }

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

tgabmvqs

tgabmvqs2#

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

Image.network(
      _headImageUrl,
      fit: BoxFit.fitHeight,
    )

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

PaintingBinding.instance.imageCache.clear();
qlckcl4x

qlckcl4x3#

首先将软件包(flutter_cache_manager)添加到pubspec.yaml文件中,如下所示:
依赖关系:flutter:sdk:flutter***flutter_cache_manager:^1.1.3***
一天后,我找到了解决办法。通过调用emptyCache()方法使用DefaultCacheManager对象,这将清除该高速缓存数据。

DefaultCacheManager manager = new DefaultCacheManager();
manager.emptyCache(); //clears all data in cache.
sh7euo9m

sh7euo9m4#

import 'package:flutter_cache_manager/flutter_cache_manager.dart'; await DefaultCacheManager().removeFile('YOUR_URL');
不要在第一个答案中使用emptyCache(),它会清除所有缓存

8i9zcol2

8i9zcol25#

CachedNetworkImage将图像存储在临时(缓存)文件夹中,您可以使用path_providergetTemporaryDirectory()方法访问它。在那里你会发现libCachedImageData(你可能需要检查名称)。您可以在此处删除文件夹。
要在你的应用中做到这一点,你应该使用Directory类,比如:

final Directory tempDir = await getTemporaryDirectory();
final Directory libCacheDir = new Directory("${tempDir.path}/libCachedImageData");
await libCacheDir.delete(recursive: true);
p5fdfcr1

p5fdfcr16#

如果您不想将下载的映像存储在缓存中,则不要使用CachedNetworkImage。相反,使用带有NetworkImage的FadeInImage小部件:

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'),
)
cwtwac6a

cwtwac6a7#

在CachedNetworkImage中,添加CacheManager Config:

CachedNetworkImage(CacheManager(Config(
              featureStoreKey,
              stalePeriod: const Duration(seconds: 15),
              maxNrOfCacheObjects: 1,
              repo: JsonCacheInfoRepository(databaseName: featureStoreKey),
              fileService: HttpFileService(),
            ),
        ),
  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),
);

然后要清除它,添加这个void语句:

void _clearCache() {
try {
  JsonCacheInfoRepository(databaseName: featureMain1Store).deleteDataFile();
} catch (e, s) {
  print(s);
}
imageCache!.clear();
imageCache!.clearLiveImages();
setState(() {});
}
dfddblmv

dfddblmv8#

1-用于CachedNetworkImage库

`CachedNetworkImage(
    imageUrl: "https://www.fluttercampus.com/img/logo_small.webp",
    placeholder: (context, url) => CircularProgressIndicator(),
    errorWidget: (context, url, error) => Icon(Icons.error),
    cacheManager: CacheManager(
        Config(
          "fluttercampus",
          stalePeriod: const Duration(days: 7),
          //one week cache period
        )
    ),
)`

你可以用其中一个
await DefaultCacheManager().removeFile("fluttercampus");
await DefaultCacheManager().removeFile('YOUR_URL');
await CachedNetworkImage.evictFromCache('YOUR_URL');
不要使用此选项,因为它会删除CacheManager中的所有数据
await DefaultCacheManager().emptyCache();
2-如果要从www.example.com中删除Image.network使用此

Image.network(
      _headImageUrl,
      fit: BoxFit.fitHeight,
    )

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

PaintingBinding.instance.imageCache.clear();

相关问题