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

如何使用Flutter_Cache_Manager读取MB单位的缓存大小

Flutter 读取 flutter_cache_manager 缓存大小(MB单位)实现方案

flutter_cache_manager 没有直接返回MB单位缓存大小的封装接口,可通过遍历缓存文件统计总字节数,再做单位换算实现,具体步骤如下:

  • 依赖准备:确保项目已正常集成 flutter_cache_manager,统计逻辑仅依赖 Dart 自带的IO能力,无需引入额外第三方包。
  • 实现统计方法(适配插件3.x及以上主流版本)
    首先导入所需依赖:
    import 'dart:io';
    import 'package:flutter_cache_manager/flutter_cache_manager.dart';
    
    编写缓存大小计算逻辑,直接返回MB单位的数值:
    /// 获取缓存总大小,返回值单位为MB
    Future<double> calculateCacheSizeInMB() async {
      // 如果你自定义了CacheManager实例,替换成你自己的实例即可
      final cacheManager = DefaultCacheManager();
      int totalBytes = 0;
    
      // 遍历所有有效缓存文件累加字节数
      await for (final file in cacheManager.getFilesInCache()) {
        if (file.file.existsSync()) {
          totalBytes += await file.file.length();
        }
      }
    
      // 字节转MB:1MB = 1024 * 1024 字节
      return totalBytes / (1024 * 1024);
    }
    
  • 调用与展示示例
    不要在build方法中直接调用该异步方法,可在页面初始化、用户手动触发刷新等场景调用,展示时可按需保留小数位数:
    // 页面状态类中调用示例
    double _cacheSize = 0;
    
    @override
    void initState() {
      super.initState();
      _refreshCacheSize();
    }
    
    Future<void> _refreshCacheSize() async {
      final size = await calculateCacheSizeInMB();
      setState(() {
        _cacheSize = size;
      });
    }
    
    // 组件中展示示例
    // Text('当前缓存:${_cacheSize.toStringAsFixed(2)} MB')
    
  • 旧版本兼容方案
    如果你使用的是2.x及更早的插件版本,没有getFilesInCache方法,可以通过遍历临时目录统计大小,注意该方式会统计临时目录下的所有文件,不止是插件生成的缓存:
    import 'package:path_provider/path_provider.dart';
    
    Future<double> getOldVersionCacheSize() async {
      final tempDir = await getTemporaryDirectory();
      int totalBytes = 0;
      if (tempDir.existsSync()) {
        tempDir.listSync(recursive: true).forEach((entity) {
          if (entity is File) totalBytes += entity.lengthSync();
        });
      }
      return totalBytes / (1024 * 1024);
    }
    
  • 注意事项
    • 自定义了缓存规则、缓存目录的场景,直接替换统计逻辑中使用的CacheManager实例即可,核心计算逻辑无需修改
    • 统计逻辑会自动过滤已失效、已标记删除的缓存残片,结果和实际占用空间一致
    • 清理缓存后可重新调用该方法刷新展示的数值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:01:09