眾所周知,Android和IOS都有需要獲取應(yīng)用緩存和清除應(yīng)用緩存的功能撼嗓,當(dāng)然Flutter也能做到柬采,接下來我們一起來看看該怎么做。
獲取應(yīng)用緩存:
首先我們需要導(dǎo)入path_provider且警,需要用到里面的一個(gè)方法獲取Android和IOS的緩存文件夾粉捻,然后通過遞歸的方式獲取該緩存文件夾下所有文件大小的總和,然后就能得到緩存大小了:
///加載緩存
Future<Null> loadCache() async {
try {
Directory tempDir = await getTemporaryDirectory();
double value = await _getTotalSizeOfFilesInDir(tempDir);
/*tempDir.list(followLinks: false,recursive: true).listen((file){
//打印每個(gè)緩存文件的路徑
print(file.path);
});*/
print('臨時(shí)目錄大小: ' + value.toString());
setState(() {
_cacheSizeStr = _renderSize(value);
});
} catch (err) {
print(err);
}
}
/// 遞歸方式 計(jì)算文件的大小
Future<double> _getTotalSizeOfFilesInDir(final FileSystemEntity file) async {
try {
if (file is File) {
int length = await file.length();
return double.parse(length.toString());
}
if (file is Directory) {
final List<FileSystemEntity> children = file.listSync();
double total = 0;
if (children != null)
for (final FileSystemEntity child in children)
total += await _getTotalSizeOfFilesInDir(child);
return total;
}
return 0;
} catch (e) {
print(e);
return 0;
}
}
清理緩存:
清理緩存斑芜,同樣是通過path_provider得到緩存目錄肩刃,然后通過遞歸的方式,刪除里面所有的文件
void _clearCache() async {
//此處展示加載loading
try {
Directory tempDir = await getTemporaryDirectory();
//刪除緩存目錄
await delDir(tempDir);
await loadCache();
ToastUtils.show(msg: '清除緩存成功');
} catch (e) {
print(e);
ToastUtils.show(msg: '清除緩存失敗');
} finally {
//此處隱藏加載loading
}
}
///遞歸方式刪除目錄
Future<Null> delDir(FileSystemEntity file) async {
try {
if (file is Directory) {
final List<FileSystemEntity> children = file.listSync();
for (final FileSystemEntity child in children) {
await delDir(child);
}
}
await file.delete();
} catch (e) {
print(e);
}
}
需要格式化緩存文件大小參考一下代碼:
///格式化文件大小
_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];
}