[英]how to clear cache in CachedNetworkImage 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為空..
首先將包 (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.
我同意 MichaelM,不要使用 CachedNetworkImage。如果你顯示這樣的圖像:
Image.network(
_headImageUrl,
fit: BoxFit.fitHeight,
)
您可以使用這些代碼來清理圖像緩存:
PaintingBinding.instance.imageCache.clear();
由於 CachedNetworkImage版本 2.3 ,所有這些解決方案都不起作用,因為它在 2 個不同的地方緩存了圖像(DefaultCacheManager 和 NetworkImageProvider)
所以,唯一的解決辦法是使用evictFromCache
內置的方法從CachedNetworkImage
像這樣:
Future _deleteImageFromCache() async {
String url = "your url";
await CachedNetworkImage.evictFromCache(url);
}
evictFromCache
是一個靜態方法,因此它不需要在您的 Widget 樹中有CachedNetworkImage
,您可以直接從任何地方使用它。
import 'package:flutter_cache_manager/flutter_cache_manager.dart'; await DefaultCacheManager().removeFile('YOUR_URL');
不要從第一個答案中使用 emptyCache(),它會清除您的所有緩存
CachedNetworkImage 將圖像存儲在臨時(緩存)文件夾中,您可以使用path_provider
的getTemporaryDirectory()
方法訪問它。 在那里您會找到libCachedImageData
(您可能需要檢查名稱)。 在那里你可以刪除文件夾。
要在您的應用程序中執行此操作,您應該使用 Directory 類,例如:
final Directory tempDir = await getTemporaryDirectory();
final Directory libCacheDir = new Directory("${tempDir.path}/libCachedImageData");
await libCacheDir.delete(recursive: true);
如果您不想將下載的圖像存儲在緩存中,則不要使用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'),
)
在您的 CachedNetworkImage 中,添加 CacheManager 配置:
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(() {});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.