windows.dart 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import 'dart:ui';
  2. import 'package:appflowy/core/helpers/helpers.dart';
  3. import 'package:appflowy/startup/startup.dart';
  4. import 'package:appflowy/startup/tasks/app_window_size_manager.dart';
  5. import 'package:flutter/foundation.dart';
  6. import 'package:flutter/material.dart';
  7. import 'package:window_manager/window_manager.dart';
  8. class InitAppWindowTask extends LaunchTask with WindowListener {
  9. const InitAppWindowTask({
  10. this.minimumSize = const Size(800, 600),
  11. this.title = 'AppFlowy',
  12. });
  13. final Size minimumSize;
  14. final String title;
  15. @override
  16. Future<void> initialize(LaunchContext context) async {
  17. // Don't initialize on mobile or web.
  18. if (!defaultTargetPlatform.isDesktop || context.env.isIntegrationTest) {
  19. return;
  20. }
  21. await windowManager.ensureInitialized();
  22. windowManager.addListener(this);
  23. final windowSize = await WindowSizeManager().getSize();
  24. final windowOptions = WindowOptions(
  25. size: windowSize,
  26. minimumSize: const Size(
  27. WindowSizeManager.minWindowWidth,
  28. WindowSizeManager.minWindowHeight,
  29. ),
  30. title: title,
  31. );
  32. windowManager.waitUntilReadyToShow(windowOptions, () async {
  33. await windowManager.show();
  34. await windowManager.focus();
  35. final position = await WindowSizeManager().getPosition();
  36. if (position != null) {
  37. await windowManager.setPosition(position);
  38. }
  39. });
  40. }
  41. @override
  42. Future<void> onWindowResize() async {
  43. super.onWindowResize();
  44. final currentWindowSize = await windowManager.getSize();
  45. WindowSizeManager().setSize(currentWindowSize);
  46. }
  47. @override
  48. void onWindowMaximize() async {
  49. super.onWindowMaximize();
  50. final currentWindowSize = await windowManager.getSize();
  51. WindowSizeManager().setSize(currentWindowSize);
  52. }
  53. @override
  54. void onWindowMoved() async {
  55. super.onWindowMoved();
  56. final position = await windowManager.getPosition();
  57. WindowSizeManager().setPosition(position);
  58. }
  59. }