獲取應用緩存:
首先我們需要導入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]; }