import 'dart:convert'; import 'dart:io'; import 'dart:typed_data'; 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:path_provider/path_provider.dart'; import 'package:share_plus/share_plus.dart'; import 'package:webview_flutter/webview_flutter.dart'; 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; late final Worker _summaryNumberListener; @override void onInit() { super.onInit(); String html = ''' MindMap
'''; webViewController = WebViewController() ..setJavaScriptMode(JavaScriptMode.unrestricted) ..setNavigationDelegate( NavigationDelegate( onPageFinished: (String url) { isWebViewReady = true; }, ), ) ..addJavaScriptChannel( 'ImageChannel', onMessageReceived: _messageReceived, ) ..setBackgroundColor(Colors.transparent) ..loadHtmlString(html); _summaryNumberListener = ever(_meetingDetailsController.summaryNumberModifications, (value) { webViewController.runJavaScript( 'updateMarkmap(`${_meetingDetailsController.meetingDetails.value.summary}`)'); }); } @override void onClose() { _summaryNumberListener.dispose(); super.onClose(); } void _messageReceived(message) async { 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: '分享思维导图', files: [XFile(file.path)], )); if (result.status == ShareResultStatus.success) { EasyLoading.showToast('分享完成!'); } } }