【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];
  }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM