diff --git a/lib/common/widgets/image/image_save.dart b/lib/common/widgets/image/image_save.dart index a63256138..bfec997f5 100644 --- a/lib/common/widgets/image/image_save.dart +++ b/lib/common/widgets/image/image_save.dart @@ -117,10 +117,7 @@ void imageSaveDialog({ iconBtn( tooltip: '保存封面图', onPressed: () async { - bool saveStatus = await ImageUtils.downloadImg( - context, - [cover], - ); + bool saveStatus = await ImageUtils.downloadImg([cover]); if (saveStatus) { SmartDialog.dismiss(); } diff --git a/lib/common/widgets/interactiveviewer_gallery/interactiveviewer_gallery.dart b/lib/common/widgets/interactiveviewer_gallery/interactiveviewer_gallery.dart index 9715c77e1..66518bd87 100644 --- a/lib/common/widgets/interactiveviewer_gallery/interactiveviewer_gallery.dart +++ b/lib/common/widgets/interactiveviewer_gallery/interactiveviewer_gallery.dart @@ -437,10 +437,7 @@ class _InteractiveviewerGalleryState extends State ListTile( onTap: () { Get.back(); - ImageUtils.downloadImg( - this.context, - [item.url], - ); + ImageUtils.downloadImg([item.url]); }, dense: true, title: const Text('保存图片', style: TextStyle(fontSize: 14)), @@ -459,7 +456,6 @@ class _InteractiveviewerGalleryState extends State onTap: () { Get.back(); ImageUtils.downloadImg( - this.context, widget.sources.map((item) => item.url).toList(), ); }, @@ -471,7 +467,6 @@ class _InteractiveviewerGalleryState extends State onTap: () { Get.back(); ImageUtils.downloadLivePhoto( - context: this.context, url: item.url, liveUrl: item.liveUrl!, width: item.width!, @@ -503,7 +498,7 @@ class _InteractiveviewerGalleryState extends State ), PopupMenuItem( height: 42, - onTap: () => ImageUtils.downloadImg(context, [item.url]), + onTap: () => ImageUtils.downloadImg([item.url]), child: const Text('保存图片', style: TextStyle(fontSize: 14)), ), PopupMenuItem( @@ -515,7 +510,6 @@ class _InteractiveviewerGalleryState extends State PopupMenuItem( height: 42, onTap: () => ImageUtils.downloadLivePhoto( - context: context, url: item.url, liveUrl: item.liveUrl!, width: item.width!, diff --git a/lib/pages/save_panel/view.dart b/lib/pages/save_panel/view.dart index 5a9b7a9f6..874ef5f44 100644 --- a/lib/pages/save_panel/view.dart +++ b/lib/pages/save_panel/view.dart @@ -291,7 +291,7 @@ class _SavePanelState extends State { Future _onSaveOrSharePic([bool isShare = false]) async { if (!isShare && PlatformUtils.isMobile) { - if (mounted && !await ImageUtils.checkPermissionDependOnSdkInt(context)) { + if (mounted && !await ImageUtils.checkPermissionDependOnSdkInt()) { return; } } diff --git a/lib/pages/video/view.dart b/lib/pages/video/view.dart index d74c260dc..278d5bede 100644 --- a/lib/pages/video/view.dart +++ b/lib/pages/video/view.dart @@ -1312,10 +1312,8 @@ class _VideoDetailPageVState extends State ), if (videoDetailController.cover.value.isNotEmpty) PopupMenuItem( - onTap: () => ImageUtils.downloadImg( - context, - [videoDetailController.cover.value], - ), + onTap: () => + ImageUtils.downloadImg([videoDetailController.cover.value]), child: const Text('保存封面'), ), if (!videoDetailController.isFileSource && videoDetailController.isUgc) diff --git a/lib/pages/video/widgets/header_control.dart b/lib/pages/video/widgets/header_control.dart index cde688159..885004781 100644 --- a/lib/pages/video/widgets/header_control.dart +++ b/lib/pages/video/widgets/header_control.dart @@ -407,10 +407,9 @@ class HeaderControlState extends State dense: true, onTap: () { Get.back(); - ImageUtils.downloadImg( - context, - [widget.videoDetailCtr.cover.value], - ); + ImageUtils.downloadImg([ + widget.videoDetailCtr.cover.value, + ]); }, leading: const Icon(Icons.image_outlined, size: 20), title: const Text('保存封面', style: titleStyle), diff --git a/lib/utils/image_utils.dart b/lib/utils/image_utils.dart index 330d6dc12..c11b20940 100644 --- a/lib/utils/image_utils.dart +++ b/lib/utils/image_utils.dart @@ -50,22 +50,24 @@ abstract final class ImageUtils { } // 获取存储权限 - static Future requestStoragePer(BuildContext context) async { - await Permission.storage.request(); - PermissionStatus status = await Permission.storage.status; + static Future requestPer() async { + final status = Platform.isAndroid + ? await Permission.storage.request() + : await Permission.photos.request(); if (status == PermissionStatus.denied || status == PermissionStatus.permanentlyDenied) { - if (!context.mounted) return false; - showDialog( - context: context, + SmartDialog.show( builder: (context) { - return const AlertDialog( - title: Text('提示'), - content: Text('存储权限未授权'), + return AlertDialog( + title: const Text('提示'), + content: const Text('存储权限未授权'), actions: [ TextButton( - onPressed: openAppSettings, - child: Text('去授权'), + onPressed: () { + SmartDialog.dismiss(); + openAppSettings(); + }, + child: const Text('去授权'), ), ], ); @@ -77,42 +79,25 @@ abstract final class ImageUtils { } } - // 获取相册权限 - static Future requestPhotoPer() async { - await Permission.photos.request(); - PermissionStatus status = await Permission.photos.status; - if (status == PermissionStatus.denied || - status == PermissionStatus.permanentlyDenied) { - return false; - } else { - return true; - } - } - - static Future checkPermissionDependOnSdkInt( - BuildContext context, - ) async { + static Future checkPermissionDependOnSdkInt() async { if (Platform.isAndroid) { - if (await Utils.sdkInt <= 32) { - if (!context.mounted) return false; - return requestStoragePer(context); + if (await Utils.sdkInt < 29) { + return requestPer(); } else { - return requestPhotoPer(); + return true; } } - return requestStoragePer(context); + return requestPer(); } static Future downloadLivePhoto({ - required BuildContext context, required String url, required String liveUrl, required int width, required int height, }) async { try { - if (PlatformUtils.isMobile && - !await checkPermissionDependOnSdkInt(context)) { + if (PlatformUtils.isMobile && !await checkPermissionDependOnSdkInt()) { return false; } if (!silentDownImg) SmartDialog.showLoading(msg: '正在下载'); @@ -167,12 +152,10 @@ abstract final class ImageUtils { } static Future downloadImg( - BuildContext context, List imgList, [ CacheManager? manager, ]) async { - if (PlatformUtils.isMobile && - !await checkPermissionDependOnSdkInt(context)) { + if (PlatformUtils.isMobile && !await checkPermissionDependOnSdkInt()) { return false; } CancelToken? cancelToken;