Flutter删除缓存

Flutter 清除缓存

  • 在flutter中如果使用了临时目录,会产生一定的缓存,如何清除cache文件夹下的缓存呢,下面提供一种思路供参考。在项目上的实际效果如下所示:
    在这里插入图片描述

清除缓存需要的工作

  1. 获取临时目录
  2. 循环获取临时目录下所有的文件大小,计算出总缓存大小
  3. 循环删除临时目录下的文件

总体思路

想要获取到应用缓存,我们必须使用flutter官方提供的path_provider获取缓存文件夹,然后通过循环的方法获取缓存文件的大小并且删除。首先,我们先简单介绍一下path_provider中获取文件夹的方法。

getExternalStorageDirectory();  // 在iOS上,抛出异常,Android上是sd卡的根目录
getTemporaryDirectory();  //临时目录的返回值
getApplicationDocumentsDirectory();  //文档目录的地址

简单的了解path_provider后接下来就是获取临时目录了,整体思路如下所示:

Future<Null> loadCache() async {
   Directory tempDir = await getTemporaryDirectory();
     double value = await _getTotalSizeOfFilesInDir(tempDir);
     print('临时目录大小: ' + value.toString());
        //清除缓存
        delDir(tempDir)
  }

循环计算文件大小

传入根目录,用递归的方法计算出文件的大小

Future _getTotalSizeOfFilesInDir(final FileSystemEntity file) async {
  if (file is File) {
    int length = await file.length();
    return double.parse(length.toString());
  }
  if (file is Directory) {
    final List children = file.listSync();
    double total = 0;
    if (children != null)
      for (final FileSystemEntity child in children)
        total += await _getTotalSizeOfFilesInDir(child);
    return total;
  }
  return 0;
}

格式化缓存大小

用循环获取的文件大小为bit,现在要对此进行转化更人性化。

_renderSize(double value) {
   if (null == value) {
     return 0;
   }
   List<String> unitArr = List()
     ..add('B')
     ..add('K')
     ..add('M')
     ..add('G');
   int index = 0;
   while (value > 1024) {
     index++;
     value = value / 1024;
   }
   String size = value.toStringAsFixed(2);
   return size + unitArr[index];
 }

清除缓存

传入根目录,通过递归的方式,删除所有的文件。

//递归方式删除目录
Future<Null> delDir(FileSystemEntity file) async {
   if (file is Directory) {
           final List<FileSystemEntity> children = file.listSync();
           for (final FileSystemEntity child in children) {
             await delDir(child);
           }
         }
     await file.delete();
 }
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值