downloadImage method

Future<void> downloadImage({
  1. bool? isAsset,
  2. bool? checkPermission,
  3. String? imageName,
  4. int quality = 80,
})

下载图片资源到相册 isAsset - 是否为资产文件 checkPermission - 是否需要检测相册权限 imageName - 保存到相册的文件名字 quality - 保存质量

最好捕获一下异常,如果没有抛出异常则表示下载成功.

错误码401 - 没有获取访问相册的权限 错误码201 - 保存失败,重试

Implementation

Future<void> downloadImage({bool? isAsset, bool? checkPermission, String? imageName, int quality = 80}) async {
  try {
    // 访问相册权限检测
    if (checkPermission == true) {
      PermissionStatus storageStatus = await Permission.storage.status;
      if (storageStatus != PermissionStatus.granted) {
        storageStatus = await Permission.storage.request();
        if (storageStatus != PermissionStatus.granted) {
          // 请先授权访问相册的权限
          throw '401';
        }
      }
    }
    // 保存的图片数据
    dynamic imageBytes;
    if (isAsset == true) {
      // 保存资产图片
      final bytes = await rootBundle.load(this);
      imageBytes = bytes.buffer.asUint8List();
    } else {
      // 保存网络图片
      final image = CachedNetworkImage(imageUrl: this);
      final manager = image.cacheManager ?? DefaultCacheManager();
      final headers = image.httpHeaders ?? {};
      final file = await manager.getSingleFile(
        image.imageUrl,
        headers: headers,
      );
      imageBytes = await file.readAsBytes();
    }
    // 保存图片
    final result = await ImageGallerySaver.saveImage(imageBytes, name: imageName, quality: quality);
    if (result == null || result == '') throw '201'; // 保存失败,请重试

  } catch (e) {
    rethrow;
  }
}