From 91c00451360a733964c0f2602ba74958983535a8 Mon Sep 17 00:00:00 2001 From: tanlongsheng <252620078@qq.com> Date: Tue, 24 Jun 2025 19:56:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AF=BC=E5=87=BA=E6=80=9D?= =?UTF-8?q?=E7=BB=B4=E5=AF=BC=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/mind_map_controller.dart | 19 +++++++++++++++---- .../meeting/views/share_bottom_sheet.dart | 18 ++++++++++++++++-- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/lib/modules/meeting/controllers/mind_map_controller.dart b/lib/modules/meeting/controllers/mind_map_controller.dart index 83a6656c9..93a9d9770 100644 --- a/lib/modules/meeting/controllers/mind_map_controller.dart +++ b/lib/modules/meeting/controllers/mind_map_controller.dart @@ -15,6 +15,8 @@ import 'meeting_details_controller.dart'; class MindMapController extends GetxController { late final WebViewController webViewController; final _meetingDetailsController = Get.find(); + final double _width = 1.sw - 25.w; + bool isWebViewReady = false; @override void onInit() { @@ -37,6 +39,8 @@ class MindMapController extends GetxController { body { width: 100%; height: 100%; + min-width: ${_width}px; + min-height: ${_width}px; margin: 0; padding: 0; overflow: hidden; @@ -63,8 +67,8 @@ class MindMapController extends GetxController { justify-content: space-around; align-items: center; position: absolute; - top: 20px; - right: 20px; + top: 10px; + right: 2px; } .mind-map .mm-toolbar-item { @@ -104,9 +108,9 @@ class MindMapController extends GetxController { const toolbarElement = document.getElementById('toolbar'); toolbarElement.append(el); - async function captureImage() { + window.captureImage = async function() { const markmapElement = document.getElementById('markmap'); - markmapElement.style.height = `${1.sw}px`; + markmapElement.style.height = `${_width}px`; await mm.fit(); const options = { scale: 2, @@ -127,6 +131,13 @@ class MindMapController extends GetxController { '''; webViewController = WebViewController() ..setJavaScriptMode(JavaScriptMode.unrestricted) + ..setNavigationDelegate( + NavigationDelegate( + onPageFinished: (String url) { + isWebViewReady = true; + }, + ), + ) ..addJavaScriptChannel( 'ImageChannel', onMessageReceived: _messageReceived, diff --git a/lib/modules/meeting/views/share_bottom_sheet.dart b/lib/modules/meeting/views/share_bottom_sheet.dart index 938d2e6c7..31db5bc54 100644 --- a/lib/modules/meeting/views/share_bottom_sheet.dart +++ b/lib/modules/meeting/views/share_bottom_sheet.dart @@ -9,6 +9,7 @@ import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; import 'package:path_provider/path_provider.dart'; import 'package:share_plus/share_plus.dart'; +import 'package:webview_flutter/webview_flutter.dart'; import '../controllers/meeting_details_controller.dart'; import '../controllers/mind_map_controller.dart'; @@ -150,8 +151,21 @@ class _ShareBottomSheetState extends State { onTap: () { Get.back(); final mindMapController = Get.find(); - mindMapController.webViewController - .runJavaScript('captureImage()'); + if (mindMapController.isWebViewReady) { + mindMapController.webViewController + .runJavaScript('captureImage()'); + } else { + mindMapController.webViewController + .setNavigationDelegate( + NavigationDelegate( + onPageFinished: (String url) { + mindMapController.isWebViewReady = true; + mindMapController.webViewController + .runJavaScript('captureImage()'); + }, + ), + ); + } }, ), ]),