From 2fab52d3622218b9b5c45bdcb5c0608ae62fb9bd Mon Sep 17 00:00:00 2001 From: speakeloudest Date: Sun, 25 Jan 2026 00:10:08 -0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Dmacos=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/hi_anti_lost_controller.dart | 44 ++++++++++++------- macos/Podfile.lock | 21 ++++++++- 2 files changed, 47 insertions(+), 18 deletions(-) diff --git a/lib/app/modules/hi_anti_lost/controllers/hi_anti_lost_controller.dart b/lib/app/modules/hi_anti_lost/controllers/hi_anti_lost_controller.dart index f1c46f2..622286c 100644 --- a/lib/app/modules/hi_anti_lost/controllers/hi_anti_lost_controller.dart +++ b/lib/app/modules/hi_anti_lost/controllers/hi_anti_lost_controller.dart @@ -1,6 +1,7 @@ import 'dart:io'; import 'dart:typed_data'; import 'dart:ui' as ui; +import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; @@ -15,35 +16,44 @@ class HIAntiLostController extends GetxController { Future saveImage() async { // KRCommonUtil.kr_showLoading(message: "正在保存..."); try { - // Check permission - final hasAccess = await Gal.hasAccess(); - if (!hasAccess) { - await Gal.requestAccess(); - } - // Load image from assets final ByteData data = await rootBundle.load('assets/images/lost-share-image.png'); final Uint8List pngBytes = data.buffer.asUint8List(); - await Gal.putImageBytes(pngBytes); + if (Platform.isMacOS || Platform.isWindows || Platform.isLinux) { + // Desktop: Use FilePicker to save file + String? outputFile = await FilePicker.platform.saveFile( + dialogTitle: '保存图片', + fileName: 'Hi快联系方式', + type: FileType.custom, + allowedExtensions: ['png'], + ); - String message = "已保存至系统相册"; - if (Platform.isMacOS) { - message = "已保存至系统【照片】应用"; - } else if (Platform.isWindows) { - message = "已保存至系统【图片】文件夹"; + if (outputFile != null) { + final file = File(outputFile); + await file.writeAsBytes(pngBytes); + KRCommonUtil.kr_showToast("已保存至: $outputFile"); + } + } else { + // Mobile: Use Gal to save to gallery + // Check permission + final hasAccess = await Gal.hasAccess(); + if (!hasAccess) { + await Gal.requestAccess(); + } + + await Gal.putImageBytes(pngBytes); + HIDialog.show( + message: "已保存至系统相册", + ); } - - HIDialog.show( - message: message, - ); } catch (e) { debugPrint("Save image error: $e"); if (e is GalException) { KRCommonUtil.kr_showToast("保存失败: No Permission"); } else { - KRCommonUtil.kr_showToast("保存失败"); + KRCommonUtil.kr_showToast("保存失败: $e"); } } finally { //KRCommonUtil.kr_hideLoading(); diff --git a/macos/Podfile.lock b/macos/Podfile.lock index 5690f39..0c90208 100644 --- a/macos/Podfile.lock +++ b/macos/Podfile.lock @@ -4,9 +4,13 @@ PODS: - ReachabilitySwift - device_info_plus (0.0.1): - FlutterMacOS + - file_picker (0.0.1): + - FlutterMacOS - flutter_inappwebview_macos (0.0.1): - FlutterMacOS - OrderedSet (~> 6.0.3) + - flutter_secure_storage_macos (6.1.3): + - FlutterMacOS - flutter_udid (0.0.1): - FlutterMacOS - SAMKeychain @@ -33,13 +37,18 @@ PODS: - FlutterMacOS - url_launcher_macos (0.0.1): - FlutterMacOS + - webview_flutter_wkwebview (0.0.1): + - Flutter + - FlutterMacOS - window_manager (0.2.0): - FlutterMacOS DEPENDENCIES: - connectivity_plus (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus/macos`) - device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`) + - file_picker (from `Flutter/ephemeral/.symlinks/plugins/file_picker/macos`) - flutter_inappwebview_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_inappwebview_macos/macos`) + - flutter_secure_storage_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos`) - flutter_udid (from `Flutter/ephemeral/.symlinks/plugins/flutter_udid/macos`) - FlutterMacOS (from `Flutter/ephemeral`) - gal (from `Flutter/ephemeral/.symlinks/plugins/gal/darwin`) @@ -50,6 +59,7 @@ DEPENDENCIES: - share_plus (from `Flutter/ephemeral/.symlinks/plugins/share_plus/macos`) - tray_manager (from `Flutter/ephemeral/.symlinks/plugins/tray_manager/macos`) - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`) + - webview_flutter_wkwebview (from `Flutter/ephemeral/.symlinks/plugins/webview_flutter_wkwebview/darwin`) - window_manager (from `Flutter/ephemeral/.symlinks/plugins/window_manager/macos`) SPEC REPOS: @@ -63,8 +73,12 @@ EXTERNAL SOURCES: :path: Flutter/ephemeral/.symlinks/plugins/connectivity_plus/macos device_info_plus: :path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos + file_picker: + :path: Flutter/ephemeral/.symlinks/plugins/file_picker/macos flutter_inappwebview_macos: :path: Flutter/ephemeral/.symlinks/plugins/flutter_inappwebview_macos/macos + flutter_secure_storage_macos: + :path: Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos flutter_udid: :path: Flutter/ephemeral/.symlinks/plugins/flutter_udid/macos FlutterMacOS: @@ -85,15 +99,19 @@ EXTERNAL SOURCES: :path: Flutter/ephemeral/.symlinks/plugins/tray_manager/macos url_launcher_macos: :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos + webview_flutter_wkwebview: + :path: Flutter/ephemeral/.symlinks/plugins/webview_flutter_wkwebview/darwin window_manager: :path: Flutter/ephemeral/.symlinks/plugins/window_manager/macos SPEC CHECKSUMS: connectivity_plus: 18d3c32514c886e046de60e9c13895109866c747 device_info_plus: 1b14eed9bf95428983aed283a8d51cce3d8c4215 + file_picker: e716a70a9fe5fd9e09ebc922d7541464289443af flutter_inappwebview_macos: bdf207b8f4ebd58e86ae06cd96b147de99a67c9b + flutter_secure_storage_macos: c2754d3483d20bb207bb9e5a14f1b8e771abcdb9 flutter_udid: 2e7b3da4b5fdfba86a396b97898f5fe8f4ec1a52 - FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 + FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1 gal: 6a522c75909f1244732d4596d11d6a2f86ff37a5 in_app_purchase_storekit: a1ce04056e23eecc666b086040239da7619cd783 OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94 @@ -105,6 +123,7 @@ SPEC CHECKSUMS: share_plus: 76dd39142738f7a68dd57b05093b5e8193f220f7 tray_manager: 9064e219c56d75c476e46b9a21182087930baf90 url_launcher_macos: c82c93949963e55b228a30115bd219499a6fe404 + webview_flutter_wkwebview: 29eb20d43355b48fe7d07113835b9128f84e3af4 window_manager: 3a1844359a6295ab1e47659b1a777e36773cd6e8 PODFILE CHECKSUM: 3100e00928a3ab9aaf1f0d7f435c5ff0d92c057c