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();}

Flutter删除缓存相关推荐

  1. TP3.2的删除缓存与引入第三方库的问题(二)

    基本每天都会遇到新的问题,不记录下来是在是有点亏.以下内容也是在做项目的时候碰到,然后百度搜索答案,记到记事本上的,在此分享给大家. 一.关于删除TP框架的缓存问题 TP的缓存不仅仅局限于runtim ...

  2. Flutter:删除所有已保存的shared_preferences首选项

    dart - Flutter:删除所有已保存的shared_preferences首选项 想在用户点击注销时删除所有保存的shared_preferences首选项.有什么方法可以一次性完成而不删除一 ...

  3. 为什么是先更新数据库再删除缓存,而不是更新缓存?

    一开始看很多人说更新数据库后删除缓存,然后有人说是更新缓存时需要遍历list或者hash查找导致慢,我!@#&((&(&^%&%&m&*&()& ...

  4. 为什么你的缓存更新策略是先更新数据库后删除缓存,讲讲其他的情况有什么问题?...

    2019独角兽企业重金招聘Python工程师标准>>> 问题:怎么保持缓存与数据库一致? 要解答这个问题,我们首先来看不一致的几种情况.我将不一致分为三种情况 数据库有数据,缓存没有 ...

  5. 更新操作先删除缓存后更新DB,还是先更新DB后删除缓存问题???

    以前自己在学校学习redis的时候还真没想到这么多,上班后看公司的项目代码,发现都是先更新DB,然后删除缓存,而且更新DB后不会立马将DB数据放入缓存,然而我以前不管是查询还是update都是操作完D ...

  6. ubuntu 释放缓存_如何通过删除缓存的程序包文件在Ubuntu Linux上释放大量磁盘空间...

    ubuntu 释放缓存 If you're anything like me, you probably have Ubuntu running on your older computers, an ...

  7. 为什么是删除缓存,而不是更新缓存?

    原因很简单,很多时候,在复杂点的缓存场景,缓存不单单是数据库中直接取出来的值. 比如可能更新了某个表的一个字段,然后其对应的缓存,是需要查询另外两个表的数据并进行运算,才能计算出缓存最新的值的. 另外 ...

  8. docker 删除缓存

    docker 删除缓存 前言 清除命令 前言 docker在长时间使用之后会存在很多cache 占用大量磁盘空间 清除命令 docker system prune --volumes WARNING! ...

  9. java redis 批量删除_在Spring中使用Redis Lua脚本批量删除缓存

    背景 之前分享了一篇利用lua脚本批量删除redis的key的文章.现在项目中我打算使用spring的缓存,而Spring缓存以前我是用ehcache来做实现的.没发现什么问题..这次我换成redis ...

最新文章

  1. Visual Studio 2013 Update 2 and with Update 2
  2. Android中RatingBar的自定义效果
  3. 安卓html可以删除吗,如何删除android中的html标签
  4. 102. 二叉树的层序遍历 golang
  5. android客户端与服务器端的搭建,android客户端与服务器端的搭建.ppt
  6. 献给盲目追谁IT的管理者的话,转载:活着就是王道---- -一年
  7. 暴躁的一天从Ubuntu搜狗拼音开始
  8. 获取窗口 history数量_带你走进JavaScript世界系列——history 对象
  9. Dem与遥感影像制作三维效果简单教程
  10. [Acwing] 健康的荷斯坦奶牛 -二进制枚举
  11. 读书有益——》从你的全世界路过
  12. 常用增强学习实验环境 I (MuJoCo, OpenAI Gym, rllab, DeepMind Lab, TORCS, PySC2)
  13. 微信在线答题小程序的应用场景有哪些
  14. 使用安全令牌保护 RTMP 流
  15. 【Git】SSL certificate problem: unable to get local issuer certificate错误的解决办法
  16. hpy计算机维护系统,HPY计算机维护系统2013(W8PE+03PE+DOS,ISO量产版)
  17. 全景丨0基础学习VR全景制作,平台篇第17章:热点功能-视频
  18. 解决React-Native reload hot reloading 后代码不更新问题
  19. MOVSB、MOVSW和MOVSD指令
  20. 如何做好企业IT运维工作?云计算运维的工作内容有哪些?

热门文章

  1. 【数字化十大预测】德勤发布《2019科技、传媒和电信行业预测》
  2. CAD教程:CAD软件中怎么画多跑楼梯?
  3. day02-输入和输出
  4. JUC高级-0625
  5. 【行研报告】2021互联网行业挑战与机遇白皮书—附下载
  6. C/C++游戏项目详细教程:《贪吃蛇》
  7. 审计计算机小能手评选方案,浅析如何做好计算机审计
  8. 网络编程:网络超时检测(select poll setsockopt alarm)
  9. 亲临方德体验日 – 主流国产操作系统的成色到底如何?
  10. 前端找工作真的那么难吗?