获取应用缓存:
首先我们需要导入path_provider,需要用到里面的一个方法获取Android和IOS的缓存文件夹,然后通过递归的方式获取该缓存文件夹下所有文件大小的总和,然后就能得到缓存大小了:
///加载缓存 Future<Null> loadCache() async { try { Directory tempDir = await getTemporaryDirectory(); double value = await _getTotalSizeOfFilesInDir(tempDir); /*tempDir.list(followLinks: false,recursive: true).listen((file){ //打印每个缓存文件的路径 print(file.path); });*/ print('临时目录大小: ' + value.toString()); setState(() { _cacheSizeStr = _renderSize(value); }); } catch (err) { print(err); } } /// 递归方式 计算文件的大小 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]; }