diff --git a/lib/modules/meeting/controllers/mind_map_controller.dart b/lib/modules/meeting/controllers/mind_map_controller.dart index 997ec75bb..09b91b613 100644 --- a/lib/modules/meeting/controllers/mind_map_controller.dart +++ b/lib/modules/meeting/controllers/mind_map_controller.dart @@ -6,6 +6,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:image_gallery_saver_plus/image_gallery_saver_plus.dart'; import 'package:path_provider/path_provider.dart'; import 'package:share_plus/share_plus.dart'; import 'package:webview_flutter/webview_flutter.dart'; @@ -19,6 +20,8 @@ class MindMapController extends GetxController { final double _width = 1.sw - 25.w; bool isWebViewReady = false; + int imageType = 1; + late final Worker _summaryNumberListener; @override @@ -170,18 +173,29 @@ class MindMapController extends GetxController { final String dataUrl = message.message; final String base64Str = dataUrl.split(',').last; final Uint8List bytes = base64.decode(base64Str); - final String fileName = - '${_meetingDetailsController.meetingData.value.title}_mindmap.png'; - final tempDir = await getTemporaryDirectory(); - final File file = File('${tempDir.path}/$fileName'); - await file.writeAsBytes(bytes); - final result = await SharePlus.instance.share(ShareParams( - text: 'shareMindMap'.tr, //对应中文:分享思维导图 - - files: [XFile(file.path)], - )); - if (result.status == ShareResultStatus.success) { - EasyLoading.showToast('shareSuccess'.tr); //对应中文:分享成功 + if (imageType == 1) { + // 保存图片 + final result = await ImageGallerySaverPlus.saveImage( + bytes, + quality: 100, + ); + if (result['isSuccess']) { + EasyLoading.showToast('保存成功'); + } + } else { + // 分享图片 + final String fileName = + '${_meetingDetailsController.meetingData.value.title}_mindmap.png'; + final tempDir = await getTemporaryDirectory(); + final File file = File('${tempDir.path}/$fileName'); + await file.writeAsBytes(bytes); + final result = await SharePlus.instance.share(ShareParams( + text: 'shareMindMap'.tr, //对应中文:分享思维导图 + files: [XFile(file.path)], + )); + if (result.status == ShareResultStatus.success) { + EasyLoading.showToast('shareSuccess'.tr); //对应中文:分享成功 + } } } } diff --git a/lib/modules/meeting/views/bottomSheet/share_bottom_sheet.dart b/lib/modules/meeting/views/bottomSheet/share_bottom_sheet.dart index 7705997f9..1f7d48615 100644 --- a/lib/modules/meeting/views/bottomSheet/share_bottom_sheet.dart +++ b/lib/modules/meeting/views/bottomSheet/share_bottom_sheet.dart @@ -209,6 +209,33 @@ class _ShareBottomSheetState extends State { ); } : null), + _shareItem( + Icons.save_alt, + '保存思维导图', + onTap: _controller.meetingDetails.value.tasktype >= 3 + ? () { + Get.back(); + final mindMapController = + Get.find(); + mindMapController.imageType = 1; + if (mindMapController.isWebViewReady) { + mindMapController.webViewController + .runJavaScript('captureImage()'); + } else { + mindMapController.webViewController + .setNavigationDelegate( + NavigationDelegate( + onPageFinished: (String url) { + mindMapController.isWebViewReady = true; + mindMapController.webViewController + .runJavaScript('captureImage()'); + }, + ), + ); + } + } + : null, + ), _shareItem( Icons.lan, 'shareMindMap'.tr, // 对应中文:分享思维导图 @@ -218,6 +245,7 @@ class _ShareBottomSheetState extends State { Get.back(); final mindMapController = Get.find(); + mindMapController.imageType = 2; if (mindMapController.isWebViewReady) { mindMapController.webViewController .runJavaScript('captureImage()');