zoukankan      html  css  js  c++  java
  • 【Flutter】如何获取应用缓存,及清除缓存

    获取应用缓存:

    首先我们需要导入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];
      }
  • 相关阅读:
    (转)剖析Delphi中的构造和析构
    求排列组合
    用链表写的猴子选大王
    查找文件
    在Delphi程序中应用IE浏览器控件
    汉字转UNICODE?
    webbrowser去掉边框
    自己写的猴子选大王
    数据库IDE查询实例
    Compiz Check测试Linux桌面3D兼容性
  • 原文地址:https://www.cnblogs.com/sangwl/p/11434988.html
Copyright © 2011-2022 走看看