Browse Source

优化思维导图显示

newdev_shunjiawei
tanlongsheng 1 year ago
parent
commit
3a8da2ac85
  1. 116
      lib/modules/meeting/views/mind_map_tab.dart

116
lib/modules/meeting/views/mind_map_tab.dart

@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:webview_flutter/webview_flutter.dart';
@ -27,14 +28,11 @@ class _MindMapTabState extends State<MindMapTab>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MindMap</title>
<script>
window.markmap = {
autoLoader: {
toolbar: true,
},
};
</script>
<script src="https://cdn.jsdelivr.net/npm/markmap-autoloader@latest"></script>
<script src="https://cdn.jsdelivr.net/npm/markmap-lib"></script>
<script src="https://cdn.jsdelivr.net/npm/d3@7"></script>
<script src="https://cdn.jsdelivr.net/npm/markmap-view"></script>
<script src="https://cdn.jsdelivr.net/npm/markmap-toolbar"></script>
<script src="https://cdn.jsdelivr.net/npm/save-svg-as-png@1.4.17/lib/saveSvgAsPng.min.js"></script>
<style>
html,
body {
@ -45,51 +43,97 @@ class _MindMapTabState extends State<MindMapTab>
overflow: hidden;
}
.markmap {
.mind-map {
width: 100%;
height: 100%;
position: relative;
overflow: hidden;
}
.markmap>svg {
.mind-map #markmap {
width: 100%;
height: 100%;
}
.markmap>.mm-toolbar {
top: 20px !important;
bottom: initial !important;
.mind-map .mm-toolbar {
height: 30px;
background: #fff;
border: 1px solid #d0d5dd;
border-radius: 8px;
display: flex;
justify-content: space-around;
align-items: center;
position: absolute;
top: 20px;
right: 20px;
}
.markmap>.mm-toolbar>.mm-toolbar-brand {
display: none;
.mind-map .mm-toolbar-item {
width: 24px;
height: 24px;
border-radius: 6px;
cursor: pointer;
color: #101828;
display: flex;
justify-content: center;
align-items: center;
}
.markmap>.mm-toolbar>.mm-toolbar-item:nth-child(2) {
margin-left: 0;
.mind-map .mm-toolbar-item.active {
background-color: #d4d4d8;
}
</style>
</head>
<body>
<div class="markmap">
<script type="text/template">
---
markmap:
maxWidth: 300
colorFreezeLevel: 2
initialExpandLevel: 3
---
${_meetingDetailsController.meetingDetails.value.summary}
</script>
</div>
<div class="mind-map">
<svg id="markmap"></svg>
<div id="toolbar"></div>
</div>
<script>
const { Transformer, Markmap, Toolbar } = window.markmap;
const transformer = new Transformer();
const { root } = transformer.transform(`${_meetingDetailsController.meetingDetails.value.summary}`);
let mm = Markmap.create('#markmap', {
maxWidth: 300,
initialExpandLevel: 3,
}, root);
const toolbar = Toolbar.create(mm);
toolbar.showBrand = false
toolbar.render();
const el = toolbar.el;
const toolbarElement = document.getElementById('toolbar');
toolbarElement.append(el);
async function captureImage() {
const markmapElement = document.getElementById('markmap');
markmapElement.style.height = `${1.sw}px`;
await mm.fit();
const options = {
scale: 2,
backgroundColor: '#FFFFFF',
encoderOptions: 1,
};
const uri = await svgAsPngUri(markmapElement, options);
markmapElement.style.height = '100%';
await mm.fit();
if (window.ImageChannel) {
window.ImageChannel.postMessage(uri);
}
}
</script>
</body>
</html>
''';
_controller = WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
..addJavaScriptChannel(
'ImageChannel',
onMessageReceived: (message) {
print('-------${message.message}------');
},
)
..setBackgroundColor(Colors.transparent)
..loadHtmlString(html);
}
@ -100,8 +144,20 @@ ${_meetingDetailsController.meetingDetails.value.summary}
@override
Widget build(BuildContext context) {
super.build(context);
return WebViewWidget(
controller: _controller,
return Column(
children: [
InkWell(
child: Text('保存111111'),
onTap: () async {
await _controller.runJavaScript('captureImage()');
},
),
Expanded(
child: WebViewWidget(
controller: _controller,
),
),
],
);
}
}

Loading…
Cancel
Save