diff --git a/lib/modules/meeting/controllers/mind_map_controller.dart b/lib/modules/meeting/controllers/mind_map_controller.dart
index 09b91b613..4a155382a 100644
--- a/lib/modules/meeting/controllers/mind_map_controller.dart
+++ b/lib/modules/meeting/controllers/mind_map_controller.dart
@@ -41,6 +41,15 @@ class MindMapController extends GetxController {
@@ -108,7 +126,9 @@ class MindMapController extends GetxController {
initialExpandLevel: 3,
}, root);
const toolbar = Toolbar.create(mm);
- toolbar.showBrand = false
+ toolbar.showBrand = false;
+ // 只保留放大、缩小、适配窗口、递归展开;移除自带的 dark 按钮
+ toolbar.setItems(['zoomIn', 'zoomOut', 'fit', 'recurse']);
toolbar.render();
const el = toolbar.el;
const toolbarElement = document.getElementById('toolbar');
@@ -120,13 +140,40 @@ class MindMapController extends GetxController {
await mm.fit();
}
+ // 动态切换主题颜色
+ window.updateTheme = function(isDark) {
+ const r = document.documentElement;
+ if (isDark) {
+ // 确保 markmap 内部暗色样式与 App 暗色主题一致
+ r.classList.add('markmap-dark');
+ r.style.setProperty('--bg-color', '#121212');
+ r.style.setProperty('--text-color', '#FFFFFF');
+ r.style.setProperty('--toolbar-bg', '#2D2D2D');
+ r.style.setProperty('--toolbar-border', '#404040');
+ r.style.setProperty('--toolbar-text', '#FFFFFF');
+ r.style.setProperty('--toolbar-active', '#404040');
+ } else {
+ // 还原为浅色主题
+ r.classList.remove('markmap-dark');
+ r.style.setProperty('--bg-color', '#FFFFFF');
+ r.style.setProperty('--text-color', '#000000');
+ r.style.setProperty('--toolbar-bg', '#FFFFFF');
+ r.style.setProperty('--toolbar-border', '#d0d5dd');
+ r.style.setProperty('--toolbar-text', '#101828');
+ r.style.setProperty('--toolbar-active', '#d4d4d8');
+ }
+ // 保存当前主题用于截图
+ window._isDarkTheme = isDark;
+ }
+
window.captureImage = async function() {
const markmapElement = document.getElementById('markmap');
markmapElement.style.height = `${_width}px`;
await mm.fit();
+ const bgColor = window._isDarkTheme ? '#121212' : '#FFFFFF';
const options = {
scale: 2,
- backgroundColor: '#FFFFFF',
+ backgroundColor: bgColor,
encoderOptions: 1,
};
const uri = await svgAsPngUri(markmapElement, options);
@@ -147,6 +194,8 @@ class MindMapController extends GetxController {
NavigationDelegate(
onPageFinished: (String url) {
isWebViewReady = true;
+ // 页面加载完成后立即应用当前主题
+ _applyCurrentTheme();
},
),
)
@@ -163,6 +212,18 @@ class MindMapController extends GetxController {
});
}
+ /// 应用当前主题到 WebView
+ void _applyCurrentTheme() {
+ if (!isWebViewReady) return;
+ final isDark = Get.isDarkMode;
+ webViewController.runJavaScript('updateTheme($isDark)');
+ }
+
+ /// 供外部调用的主题更新方法
+ void updateTheme() {
+ _applyCurrentTheme();
+ }
+
@override
void onClose() {
_summaryNumberListener.dispose();
diff --git a/lib/modules/meeting/views/tabs/mind_map_tab.dart b/lib/modules/meeting/views/tabs/mind_map_tab.dart
index c4e92fc08..8811dd7ea 100644
--- a/lib/modules/meeting/views/tabs/mind_map_tab.dart
+++ b/lib/modules/meeting/views/tabs/mind_map_tab.dart
@@ -15,9 +15,23 @@ class _MindMapTabState extends State
with AutomaticKeepAliveClientMixin {
final _controller = Get.find();
+ // 缓存上一次的主题模式,用于检测变化
+ Brightness? _lastBrightness;
+
@override
bool get wantKeepAlive => true;
+ @override
+ void didChangeDependencies() {
+ super.didChangeDependencies();
+ final currentBrightness = Theme.of(context).brightness;
+ // 仅在主题实际变化时通知控制器更新 WebView
+ if (_lastBrightness != null && _lastBrightness != currentBrightness) {
+ _controller.updateTheme();
+ }
+ _lastBrightness = currentBrightness;
+ }
+
@override
Widget build(BuildContext context) {
super.build(context);