12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- 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<void> closeWindow() async {
- await windowManager.close();
- }
-
- Future<void> hideWindow() async {
- await windowManager.hide();
- isVisible.value = false;
- }
-
- Future<void> showWindow() async {
- await windowManager.show();
- isVisible.value = true;
- }
- @override
- void dispose() {
- windowManager.removeListener(this);
- if (Platform.isMacOS) {
- HardwareKeyboard.instance.removeHandler(_handleKeyEvent);
- }
- super.dispose();
- }
- }
|