window_controller.dart 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import 'package:flutter/foundation.dart';
  2. import 'package:flutter/services.dart';
  3. import 'window_listener.dart';
  4. const kEventOnWindowShow = 'onWindowShow';
  5. const kEventOnWindowHide = 'onWindowHide';
  6. class WindowController {
  7. final _channel = const MethodChannel("app.nomo/app");
  8. final ObserverList<WindowListener> _listeners =
  9. ObserverList<WindowListener>();
  10. WindowController() {
  11. _channel.setMethodCallHandler(_methodCallHandler);
  12. }
  13. Future<void> _methodCallHandler(MethodCall call) async {
  14. for (final WindowListener listener in _listeners) {
  15. switch (call.method) {
  16. case kEventOnWindowShow:
  17. listener.onWindowShow();
  18. break;
  19. case kEventOnWindowHide:
  20. listener.onWindowHide();
  21. break;
  22. }
  23. }
  24. }
  25. // 激活窗口
  26. Future<void> activeWindow() {
  27. return _channel.invokeMethod('activeWindow');
  28. }
  29. // 隐藏窗口
  30. Future<void> hideWindow() async {
  31. return _channel.invokeMethod('hideWindow');
  32. }
  33. // 切换窗口
  34. Future<void> toggleWindow() {
  35. return _channel.invokeMethod('toggleWindow');
  36. }
  37. // 退出程序
  38. Future<void> quitApplication() {
  39. return _channel.invokeMethod('destroyWindow');
  40. }
  41. bool get hasListeners {
  42. return _listeners.isNotEmpty;
  43. }
  44. void addListener(WindowListener listener) {
  45. _listeners.add(listener);
  46. }
  47. void removeListener(WindowListener listener) {
  48. _listeners.remove(listener);
  49. }
  50. }