cacheFile method

Future<File?> cacheFile(
  1. String id, {
  2. ImageSize size = ImageSize.md,
  3. void receiveCallback(
    1. int,
    2. int
    )?,
})

Implementation

Future<File?> cacheFile(
  String id, {
  ImageSize size = ImageSize.md,
  void Function(int, int)? receiveCallback,
}) async {
  if (kIsWeb) {
    throw Exception("not support cache file in web");
  }
  FileInfo? info = await cacheFileInfo(id);
  if (info == null) {
    return null;
  }
  Directory dir = await getApplicationCacheDirectory();
  var pathfile = "${dir.path}/${_id(id, size)}";
  final file = File(pathfile);
  if (await file.exists() && await file.length() > 0) {
    _cachedFiles[_id(id, size)] = pathfile;
    return file;
  }
  var tmpFile = "$pathfile.tmp";
  try {
    await fileManager.download(
      info.accessUrl!,
      tmpFile,
      receiveCallback: receiveCallback,
      imageSize: size,
    );
    var r = File(tmpFile).renameSync(pathfile);
    _cachedFiles[_id(id, size)] = r.path;
    return r;
  } catch (e) {
    await uncacheFileInfo(id);
    if (kDebugMode) {
      print(e);
    }
    return null;
  }
}