ic交易网站建设推广公众号
整体思路
- 通过
path_provider
插件获取getTemporaryDirectory
路径 - 循环计算文件的大小(递归)
- 递归方式删除目录
- 计算大小
- 渲染
1.计算App应用缓存
import 'dart:io';
import 'package:path_provider/path_provider.dart';// 加载缓存Future<String> loadCache() async {Directory tempDir = await getTemporaryDirectory();double value = await _getTotalSizeOfFilesInDir(tempDir);/*tempDir.list(followLinks: false,recursive: true).listen((file){//打印每个缓存文件的路径print(file.path);});*/print('临时目录大小: ' + value.toString());return _renderSize(value);}// 循环计算文件的大小(递归)Future<double> _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<FileSystemEntity> children = file.listSync();double total = 0;if (children != null)for (final FileSystemEntity child in children)total += await _getTotalSizeOfFilesInDir(child);return total;}return 0;}// 递归方式删除目录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();}// 计算大小_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);if (size == '0.00'){return '0M';}// print('size:${size == 0}\n ==SIZE${size}');return size + unitArr[index];}
2.清除App缓存
/// 清理缓存
///
void _clearCache() async {Directory tempDir = await getTemporaryDirectory();//删除缓存目录await _delDir(tempDir);await loadCache();Toast.show('清除缓存成功');
}
3.渲染文字(使用)
String _cacheSizeStr = '0';@overridevoid initState() {// TODO: implement initStatesuper.initState();getCount();}void getCount() async{_cacheSizeStr = await loadCache();print('===cacheSize大小:${_cacheSizeStr}');setState(() {});}
补充
1.清理和获取图片缓存
/// 清理内存://clear all of image in memoryvoid clearMemoryImageCache() {PaintingBinding.instance.imageCache.clear();}// get ImageCachevoid getMemoryImageCache() {PaintingBinding.instance.imageCache;}
注意:
Future<String> 要想获取其中的内容,前面必须+await 才可以,否则会报错
作者:StevenHu_Sir
链接:https://www.jianshu.com/p/5809bdb38062
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。