Flutter 手机缓存内容的获取和删除

在开发过程中,我们经常会遇到 图片缓存的功能,这个缓存可不是临时缓存 ,而是下载到手机中,永久缓存。如下图:

Flutter 手机缓存内容的获取和删除_第1张图片

我们可以获取到缓存内容的大小并展示,当然 也要给用户提供 一个清楚缓存的方法,当用户手机内容不够是用户还是可以清楚缓存的。

那我们要如何实现呢?

首先我们要使用一个Flutter 耳熟能详的插件

  #文件路径
  path_provider: ^2.0.9

下面就是我们封装的一个缓存类,使用方式都在下面的这个类中

// ignore_for_file: curly_braces_in_flow_control_structures, unnecessary_null_comparison, prefer_inlined_adds

import 'dart:io';
import 'package:path_provider/path_provider.dart';

/// 缓存管理类

class CacheUtil {

  /// 获取缓存
  static Future loadApplicationCache() async {
    /// 获取文件夹
    Directory directory = await getApplicationDocumentsDirectory();
    /// 获取缓存大小
    double value = await getTotalSizeOfFilesInDir(directory);
    return value;
  }

  /// 循环计算文件的大小(递归)
  static Future 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 children = file.listSync();
      double total = 0;
      if (children != null)
        for (final FileSystemEntity child in children)
          total += await getTotalSizeOfFilesInDir(child);
      return total;
    }
    return 0;
  }

  /// 缓存大小格式转换
  static String formatSize(double value) {
    if (null == value) {
      return '0';
    }
    List unitArr = []
      ..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];
  }

  /*
  *
  * 删除缓存
  * 参数:Directory directory = await getApplicationDocumentsDirectory();
  * */
  static Future delDir(FileSystemEntity file) async {
    if (file is Directory && file.existsSync()) {
      print(file.path);
      final List children =
          file.listSync(recursive: true, followLinks: true);
      for (final FileSystemEntity child in children) {
        await delDir(child);
      }
    }
    try {
      if (file.existsSync()) {
        await file.delete(recursive: true);
      }
    } catch (err) {
      print(err);
    }
  }

}

上面注释 都写的 很清楚,这里就不做过多介绍,下面就是使用了,其实使用也非常简单

获取缓存大小

// 获取缓存的大小
void getAppCache() {
   CacheUtil.loadApplicationCache().then((value) {
      // 获取到缓存大小
      String cacheSting = CacheUtil.formatSize(value);
   });
}

清楚所有缓存

// 获取缓存
Directory directory = await getApplicationDocumentsDirectory();
//清楚缓存并重新获取缓存大小
CacheUtil.delDir(directory).then((value) => getAppCache());

到此就完成了 缓存的获取和删除

你可能感兴趣的:(Flutter,缓存)