downloadImage method
下载图片资源到相册
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;
}
}