Flutter 计算App应用缓存及清除应用缓存
2023-09-27 14:28:53 时间
整体思路
- 通过
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';
@override
void initState() {
// TODO: implement initState
super.initState();
getCount();
}
void getCount() async{
_cacheSizeStr = await loadCache();
print('===cacheSize大小:${_cacheSizeStr}');
setState(() {
});
}
补充
1.清理和获取图片缓存
/// 清理内存:
//clear all of image in memory
void clearMemoryImageCache() {
PaintingBinding.instance.imageCache.clear();
}
// get ImageCache
void getMemoryImageCache() {
PaintingBinding.instance.imageCache;
}
注意:
Future<String> 要想获取其中的内容,前面必须+await 才可以,否则会报错
作者:StevenHu_Sir
链接:https://www.jianshu.com/p/5809bdb38062
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章
- 精品Uniapp的餐厅餐馆饮订餐点餐管理系统实现的App
- Flutter 集成uni-app
- Flutter 点击两次退出app
- 10天用Flutter撸了个高仿携程App,分享PDF高清版
- 10天用Flutter撸了个高仿携程App,含小米、腾讯、阿里
- 10天用Flutter撸了个高仿携程App,真香!
- 10天用Flutter撸了个高仿携程App,最全Android知识总结
- 极客日报第124期:脉脉因“App 整改下架”事件致歉;阿里云全年营收超 600 亿;腾讯防大量群消息骚扰专利获授权
- Android app 第三方微信支付接入详解
- Android App增量升级
- 如何根据ua判断ios、android、ipad?如何判断app版本
- 第73课: 基于Spark 2.0.1项目 例如注册之后前10天访问我们的移动App最多的前五个人;注册之后前10天内购买商品总额排名前5为的人
- 使用jqMobi开发app基础:弹出内容的设计
- 【第一趴】初探uni-app(uni-app发行者、uni-app推出背景、为什么选择uni-app)
- 微信如何通过Html网页调用本地安卓app 或者ios app?
- 自已开发完美的触摸屏网页版仿app弹窗型滚动列表选择器/日期选择器
- 如何把应用程序app编译进android系统
- uni app 记录案例分享(1) 项目创建
- 微信小程序开发之如何哪获取微信小程序的APP ID
- Flutter获取包名、APP名称、版本号、build构建版本号
- 为你的 Flutter APP 添加交互性