You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter如何使用cached_network_image清理两周未访问的旧缓存图片

针对 flutter_cached_network_image 两周未访问缓存自动清理的实现方案

flutter_cached_network_image 本身依赖 flutter_cache_manager 实现底层缓存管理,你可以通过以下两种方案满足需求:

方案1:自定义 CacheManager 配置自动过期规则(最推荐)

直接自定义缓存管理器,将缓存对象的最大有效期设置为14天,框架会自动清理超过两周未被访问的缓存文件,无需手动写清理逻辑:

  1. 首先自定义全局单例的缓存管理器
import 'package:flutter_cache_manager/flutter_cache_manager.dart';

class MyImageCacheManager extends CacheManager {
  static const cacheKey = 'my_app_image_cache';
  static final MyImageCacheManager _instance = MyImageCacheManager._init();

  factory MyImageCacheManager() => _instance;

  MyImageCacheManager._init() : super(
    Config(
      cacheKey,
      // 核心配置:缓存文件14天未访问就会被标记为过期,自动清理
      maxAgeCacheObject: const Duration(days: 14),
      // 可选附加配置:最多缓存2000个文件,超出容量时自动清理最久未使用的缓存
      maxNrOfCacheObjects: 2000,
    ),
  );
}
  1. 在所有使用 CachedNetworkImage 的位置指定你自定义的缓存管理器即可
CachedNetworkImage(
  imageUrl: "你的图片资源地址",
  cacheManager: MyImageCacheManager(),
  // 其余参数和原有配置保持一致即可
)

方案2:手动触发缓存清理(适合提供用户主动清理入口的场景)

如果你的应用需要给用户提供「一键清理缓存」的功能,可以直接调用缓存管理器的清理方法:

// 清理自定义缓存中所有超过14天未访问的过期文件
await MyImageCacheManager().removeOldFiles();

// 如果你用的是默认缓存管理器,就调用默认实例的方法
await DefaultCacheManager().removeOldFiles();

如果需要自定义清理规则,也可以遍历所有缓存文件手动筛选删除:

final allCachedFiles = await MyImageCacheManager().getFileFromCache();
final currentTime = DateTime.now();
for (var fileInfo in allCachedFiles) {
  if (currentTime.difference(fileInfo.validTill) > const Duration(days: 14)) {
    await MyImageCacheManager().removeFile(fileInfo.url);
  }
}

注意事项

  • 自定义缓存管理器必须用单例模式,不要重复实例化,否则会出现缓存不生效、清理规则不统一的问题
  • 过期缓存的清理不是实时触发的,框架会在每次读写缓存时自动校验过期文件,你也可以在应用启动时主动调用一次 removeOldFiles() 触发全量校验清理

内容的提问来源于stack exchange,提问作者Sohaib Aslam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:36:10