window.dart 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import 'package:get/get.dart';
  2. import 'package:naiyouwl/app/controller/controllers.dart';
  3. import 'package:window_manager/window_manager.dart';
  4. import 'package:flutter/services.dart';
  5. import 'dart:io' show Platform;
  6. class WindowController extends GetxController with WindowListener {
  7. /// focus blur minimize maximize unmaximize restore resized close move moved...
  8. var event = ''.obs;
  9. var isVisible = false.obs;
  10. void initWindow() async {
  11. windowManager.addListener(this);
  12. isVisible.value = await windowManager.isVisible();
  13. if (Platform.isMacOS) {
  14. // 监听 Command+Q 快捷键
  15. HardwareKeyboard.instance.addHandler(_handleKeyEvent);
  16. }
  17. }
  18. bool _handleKeyEvent(KeyEvent event) {
  19. if (event is KeyDownEvent &&
  20. event.logicalKey == LogicalKeyboardKey.keyQ &&
  21. (HardwareKeyboard.instance.isMetaPressed)) { // 使用 HardwareKeyboard.instance.isMetaPressed
  22. closeWindow();
  23. return true;
  24. }
  25. return false;
  26. }
  27. @override
  28. void onWindowClose() async {
  29. await windowManager.hide();
  30. }
  31. @override
  32. void onWindowEvent(String eventName) async {
  33. if (controllers.tray.show.value) return;
  34. event.value = eventName;
  35. if (['focus', 'restore'].contains(eventName)) {
  36. isVisible.value = true;
  37. } else if (['close', 'minimize'].contains(eventName)) {
  38. isVisible.value = false;
  39. }
  40. }
  41. Future<void> closeWindow() async {
  42. await windowManager.close();
  43. }
  44. Future<void> hideWindow() async {
  45. await windowManager.hide();
  46. isVisible.value = false;
  47. }
  48. Future<void> showWindow() async {
  49. await windowManager.show();
  50. isVisible.value = true;
  51. }
  52. @override
  53. void dispose() {
  54. windowManager.removeListener(this);
  55. if (Platform.isMacOS) {
  56. HardwareKeyboard.instance.removeHandler(_handleKeyEvent);
  57. }
  58. super.dispose();
  59. }
  60. }