| 
									
										
										
										
											2023-02-11 01:16:38 -05:00
										 |  |  | import 'dart:ui'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-26 16:27:17 +08:00
										 |  |  | import 'package:appflowy/core/helpers/helpers.dart'; | 
					
						
							| 
									
										
										
										
											2023-05-17 11:03:33 +08:00
										 |  |  | import 'package:appflowy/startup/startup.dart'; | 
					
						
							| 
									
										
										
										
											2023-05-30 11:06:23 +08:00
										 |  |  | import 'package:appflowy/startup/tasks/app_window_size_manager.dart'; | 
					
						
							| 
									
										
										
										
											2023-02-11 01:16:38 -05:00
										 |  |  | import 'package:flutter/foundation.dart'; | 
					
						
							| 
									
										
										
										
											2023-05-30 11:06:23 +08:00
										 |  |  | import 'package:flutter/material.dart'; | 
					
						
							| 
									
										
										
										
											2023-02-11 01:16:38 -05:00
										 |  |  | import 'package:window_manager/window_manager.dart'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-30 11:06:23 +08:00
										 |  |  | class InitAppWindowTask extends LaunchTask with WindowListener { | 
					
						
							| 
									
										
										
										
											2023-05-17 11:03:33 +08:00
										 |  |  |   const InitAppWindowTask({ | 
					
						
							|  |  |  |     this.title = 'AppFlowy', | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2023-02-11 01:16:38 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-17 11:03:33 +08:00
										 |  |  |   final String title; | 
					
						
							| 
									
										
										
										
											2023-02-11 01:16:38 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-17 11:03:33 +08:00
										 |  |  |   @override | 
					
						
							|  |  |  |   Future<void> initialize(LaunchContext context) async { | 
					
						
							| 
									
										
										
										
											2023-02-11 01:16:38 -05:00
										 |  |  |     // Don't initialize on mobile or web.
 | 
					
						
							| 
									
										
										
										
											2023-07-09 10:03:22 +07:00
										 |  |  |     if (!defaultTargetPlatform.isDesktop || context.env.isIntegrationTest) { | 
					
						
							| 
									
										
										
										
											2023-05-17 11:03:33 +08:00
										 |  |  |       return; | 
					
						
							| 
									
										
										
										
											2023-02-11 01:16:38 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     await windowManager.ensureInitialized(); | 
					
						
							| 
									
										
										
										
											2023-05-30 11:06:23 +08:00
										 |  |  |     windowManager.addListener(this); | 
					
						
							| 
									
										
										
										
											2023-02-11 01:16:38 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-09 10:03:22 +07:00
										 |  |  |     final windowSize = await WindowSizeManager().getSize(); | 
					
						
							| 
									
										
										
										
											2023-05-30 11:06:23 +08:00
										 |  |  |     final windowOptions = WindowOptions( | 
					
						
							|  |  |  |       size: windowSize, | 
					
						
							|  |  |  |       minimumSize: const Size( | 
					
						
							|  |  |  |         WindowSizeManager.minWindowWidth, | 
					
						
							|  |  |  |         WindowSizeManager.minWindowHeight, | 
					
						
							|  |  |  |       ), | 
					
						
							| 
									
										
										
										
											2024-04-10 11:36:22 +08:00
										 |  |  |       maximumSize: const Size( | 
					
						
							|  |  |  |         WindowSizeManager.maxWindowWidth, | 
					
						
							|  |  |  |         WindowSizeManager.maxWindowHeight, | 
					
						
							|  |  |  |       ), | 
					
						
							| 
									
										
										
										
											2023-05-17 11:03:33 +08:00
										 |  |  |       title: title, | 
					
						
							| 
									
										
										
										
											2023-02-11 01:16:38 -05:00
										 |  |  |     ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-29 10:26:45 +08:00
										 |  |  |     await windowManager.waitUntilReadyToShow(windowOptions, () async { | 
					
						
							| 
									
										
										
										
											2023-02-11 01:16:38 -05:00
										 |  |  |       await windowManager.show(); | 
					
						
							|  |  |  |       await windowManager.focus(); | 
					
						
							| 
									
										
										
										
											2023-07-18 05:45:06 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |       final position = await WindowSizeManager().getPosition(); | 
					
						
							|  |  |  |       if (position != null) { | 
					
						
							|  |  |  |         await windowManager.setPosition(position); | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2023-02-11 01:16:38 -05:00
										 |  |  |     }); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2023-05-30 11:06:23 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   Future<void> onWindowResize() async { | 
					
						
							| 
									
										
										
										
											2023-07-18 05:45:06 +03:00
										 |  |  |     super.onWindowResize(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-30 11:06:23 +08:00
										 |  |  |     final currentWindowSize = await windowManager.getSize(); | 
					
						
							| 
									
										
										
										
											2024-01-29 10:26:45 +08:00
										 |  |  |     return WindowSizeManager().setSize(currentWindowSize); | 
					
						
							| 
									
										
										
										
											2023-07-18 05:45:06 +03:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   void onWindowMaximize() async { | 
					
						
							|  |  |  |     super.onWindowMaximize(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     final currentWindowSize = await windowManager.getSize(); | 
					
						
							| 
									
										
										
										
											2024-01-29 10:26:45 +08:00
										 |  |  |     return WindowSizeManager().setSize(currentWindowSize); | 
					
						
							| 
									
										
										
										
											2023-07-18 05:45:06 +03:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   void onWindowMoved() async { | 
					
						
							|  |  |  |     super.onWindowMoved(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     final position = await windowManager.getPosition(); | 
					
						
							| 
									
										
										
										
											2024-01-29 10:26:45 +08:00
										 |  |  |     return WindowSizeManager().setPosition(position); | 
					
						
							| 
									
										
										
										
											2023-05-30 11:06:23 +08:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2023-10-24 23:13:51 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   Future<void> dispose() async {} | 
					
						
							| 
									
										
										
										
											2023-02-11 01:16:38 -05:00
										 |  |  | } |