Flutter 清除缓存
- 在flutter中如果使用了临时目录,会产生一定的缓存,如何清除cache文件夹下的缓存呢,下面提供一种思路供参考。在项目上的实际效果如下所示:
清除缓存需要的工作
- 获取临时目录
- 循环获取临时目录下所有的文件大小,计算出总缓存大小
- 循环删除临时目录下的文件
总体思路
想要获取到应用缓存,我们必须使用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();
}