fix: 图片保存命名、质量、权限问题

This commit is contained in:
guozhigq
2024-03-17 14:29:39 +08:00
parent e9dc6f7fdb
commit e04a7e5702

View File

@ -1,40 +1,94 @@
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:permission_handler/permission_handler.dart'; import 'package:permission_handler/permission_handler.dart';
import 'package:saver_gallery/saver_gallery.dart'; import 'package:saver_gallery/saver_gallery.dart';
class DownloadUtils { class DownloadUtils {
// 获取存储权限 // 获取存储权限
static requestStoragePer() async { static Future<bool> requestStoragePer() async {
Map<Permission, PermissionStatus> statuses = await [ await Permission.storage.request();
Permission.storage, PermissionStatus status = await Permission.storage.status;
Permission.photos, if (status == PermissionStatus.denied ||
].request(); status == PermissionStatus.permanentlyDenied) {
statuses[Permission.storage].toString(); SmartDialog.show(
useSystem: true,
animationType: SmartAnimationType.centerFade_otherSlide,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('提示'),
content: const Text('存储权限未授权'),
actions: [
TextButton(
onPressed: () async {
openAppSettings();
},
child: const Text('去授权'),
)
],
);
},
);
return false;
} else {
return true;
}
}
// 获取相册权限
static Future<bool> requestPhotoPer() async {
await Permission.photos.request();
PermissionStatus status = await Permission.photos.status;
if (status == PermissionStatus.denied ||
status == PermissionStatus.permanentlyDenied) {
SmartDialog.show(
useSystem: true,
animationType: SmartAnimationType.centerFade_otherSlide,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('提示'),
content: const Text('相册权限未授权'),
actions: [
TextButton(
onPressed: () async {
openAppSettings();
},
child: const Text('去授权'),
)
],
);
},
);
return false;
} else {
return true;
}
} }
static Future<bool> downloadImg(String imgUrl, static Future<bool> downloadImg(String imgUrl,
{String imgType = 'cover'}) async { {String imgType = 'cover'}) async {
try { try {
await requestStoragePer(); if (!await requestPhotoPer()) {
return false;
}
SmartDialog.showLoading(msg: '保存中'); SmartDialog.showLoading(msg: '保存中');
var response = await Dio() var response = await Dio()
.get(imgUrl, options: Options(responseType: ResponseType.bytes)); .get(imgUrl, options: Options(responseType: ResponseType.bytes));
final String imgSuffix = imgUrl.split('.').last;
String picName = String picName =
"plpl_${imgType}_${DateTime.now().toString().split('-').join()}"; "plpl_${imgType}_${DateTime.now().toString().replaceAll(RegExp(r'[- :]'), '').split('.').first}";
final SaveResult result = await SaverGallery.saveImage( final SaveResult result = await SaverGallery.saveImage(
Uint8List.fromList(response.data), Uint8List.fromList(response.data),
quality: 60, name: '$picName.$imgSuffix',
name: picName,
// 保存到 PiliPala文件夹 // 保存到 PiliPala文件夹
androidRelativePath: "Pictures/PiliPala", androidRelativePath: "Pictures/PiliPala",
androidExistNotSave: false, androidExistNotSave: false,
); );
SmartDialog.dismiss(); SmartDialog.dismiss();
if (result.isSuccess) { if (result.isSuccess) {
await SmartDialog.showToast('$picName」已保存 '); await SmartDialog.showToast('${'$picName.$imgSuffix'}」已保存 ');
} }
return true; return true;
} catch (err) { } catch (err) {