import 'package:get/get.dart'; import 'package:naiyouwl/app/controller/controllers.dart'; import 'package:window_manager/window_manager.dart'; import 'package:flutter/services.dart'; import 'dart:io' show Platform; class WindowController extends GetxController with WindowListener { /// focus blur minimize maximize unmaximize restore resized close move moved... var event = ''.obs; var isVisible = false.obs; void initWindow() async { windowManager.addListener(this); isVisible.value = await windowManager.isVisible(); if (Platform.isMacOS) { // 监听 Command+Q 快捷键 HardwareKeyboard.instance.addHandler(_handleKeyEvent); } } bool _handleKeyEvent(KeyEvent event) { if (event is KeyDownEvent && event.logicalKey == LogicalKeyboardKey.keyQ && (HardwareKeyboard.instance.isMetaPressed)) { // 使用 HardwareKeyboard.instance.isMetaPressed closeWindow(); return true; } return false; } @override void onWindowClose() async { await windowManager.hide(); } @override void onWindowEvent(String eventName) async { if (controllers.tray.show.value) return; event.value = eventName; if (['focus', 'restore'].contains(eventName)) { isVisible.value = true; } else if (['close', 'minimize'].contains(eventName)) { isVisible.value = false; } } Future closeWindow() async { await windowManager.close(); } Future hideWindow() async { await windowManager.hide(); isVisible.value = false; } Future showWindow() async { await windowManager.show(); isVisible.value = true; } @override void dispose() { windowManager.removeListener(this); if (Platform.isMacOS) { HardwareKeyboard.instance.removeHandler(_handleKeyEvent); } super.dispose(); } }