| 
									
										
										
										
											2022-05-29 17:19:50 +08:00
										 |  |  | import 'dart:convert'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-18 17:25:47 +08:00
										 |  |  | import 'package:desktop_multi_window/desktop_multi_window.dart'; | 
					
						
							| 
									
										
										
										
											2020-11-06 18:04:04 +08:00
										 |  |  | import 'package:flutter/material.dart'; | 
					
						
							| 
									
										
										
										
											2022-08-11 16:03:04 +08:00
										 |  |  | import 'package:flutter_hbb/desktop/pages/desktop_tab_page.dart'; | 
					
						
							| 
									
										
										
										
											2022-08-15 12:35:10 +08:00
										 |  |  | import 'package:flutter_hbb/desktop/pages/server_page.dart'; | 
					
						
							| 
									
										
										
										
											2022-06-17 22:57:41 +08:00
										 |  |  | import 'package:flutter_hbb/desktop/screen/desktop_file_transfer_screen.dart'; | 
					
						
							| 
									
										
										
										
											2022-08-26 11:35:28 +08:00
										 |  |  | import 'package:flutter_hbb/desktop/screen/desktop_port_forward_screen.dart'; | 
					
						
							| 
									
										
										
										
											2022-05-29 17:19:50 +08:00
										 |  |  | import 'package:flutter_hbb/desktop/screen/desktop_remote_screen.dart'; | 
					
						
							|  |  |  | import 'package:flutter_hbb/utils/multi_window_manager.dart'; | 
					
						
							| 
									
										
										
										
											2022-07-29 16:47:24 +08:00
										 |  |  | import 'package:get/get.dart'; | 
					
						
							| 
									
										
										
										
											2020-11-15 20:04:05 +08:00
										 |  |  | import 'package:provider/provider.dart'; | 
					
						
							| 
									
										
										
										
											2022-09-16 12:14:03 +08:00
										 |  |  | import 'package:shared_preferences/shared_preferences.dart'; | 
					
						
							| 
									
										
										
										
											2022-08-09 13:39:30 +08:00
										 |  |  | import 'package:window_manager/window_manager.dart'; | 
					
						
							| 
									
										
										
										
											2022-07-27 14:29:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-27 09:48:35 +08:00
										 |  |  | // import 'package:window_manager/window_manager.dart';
 | 
					
						
							| 
									
										
										
										
											2022-05-25 00:28:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-07 22:54:34 +08:00
										 |  |  | import 'common.dart'; | 
					
						
							| 
									
										
										
										
											2022-08-03 22:03:31 +08:00
										 |  |  | import 'consts.dart'; | 
					
						
							| 
									
										
										
										
											2022-05-24 23:33:00 +08:00
										 |  |  | import 'mobile/pages/home_page.dart'; | 
					
						
							|  |  |  | import 'mobile/pages/server_page.dart'; | 
					
						
							|  |  |  | import 'mobile/pages/settings_page.dart'; | 
					
						
							| 
									
										
										
										
											2022-08-09 13:50:26 +08:00
										 |  |  | import 'models/platform_model.dart'; | 
					
						
							| 
									
										
										
										
											2022-02-02 17:25:56 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-29 17:19:50 +08:00
										 |  |  | int? windowId; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-16 17:14:32 +08:00
										 |  |  | Future<void> main(List<String> args) async { | 
					
						
							| 
									
										
										
										
											2020-11-29 14:00:59 +08:00
										 |  |  |   WidgetsFlutterBinding.ensureInitialized(); | 
					
						
							| 
									
										
										
										
											2022-09-16 17:14:32 +08:00
										 |  |  |   debugPrint("launch args: $args"); | 
					
						
							| 
									
										
										
										
											2022-05-29 17:19:50 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   if (!isDesktop) { | 
					
						
							| 
									
										
										
										
											2022-08-23 14:12:30 +08:00
										 |  |  |     runMobileApp(); | 
					
						
							| 
									
										
										
										
											2022-05-29 17:19:50 +08:00
										 |  |  |     return; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2022-05-31 12:09:47 +08:00
										 |  |  |   // main window
 | 
					
						
							| 
									
										
										
										
											2022-05-29 17:19:50 +08:00
										 |  |  |   if (args.isNotEmpty && args.first == 'multi_window') { | 
					
						
							|  |  |  |     windowId = int.parse(args[1]); | 
					
						
							| 
									
										
										
										
											2022-08-18 17:25:47 +08:00
										 |  |  |     WindowController.fromWindowId(windowId!).showTitleBar(false); | 
					
						
							| 
									
										
										
										
											2022-05-29 17:19:50 +08:00
										 |  |  |     final argument = args[2].isEmpty | 
					
						
							| 
									
										
										
										
											2022-09-16 17:14:32 +08:00
										 |  |  |         ? <String, dynamic>{} | 
					
						
							| 
									
										
										
										
											2022-05-29 17:19:50 +08:00
										 |  |  |         : jsonDecode(args[2]) as Map<String, dynamic>; | 
					
						
							|  |  |  |     int type = argument['type'] ?? -1; | 
					
						
							| 
									
										
										
										
											2022-08-09 16:37:11 +08:00
										 |  |  |     argument['windowId'] = windowId; | 
					
						
							| 
									
										
										
										
											2022-05-29 17:19:50 +08:00
										 |  |  |     WindowType wType = type.windowType; | 
					
						
							| 
									
										
										
										
											2022-09-16 12:14:03 +08:00
										 |  |  |     restoreWindowPosition(wType, windowId: windowId); | 
					
						
							| 
									
										
										
										
											2022-05-29 17:19:50 +08:00
										 |  |  |     switch (wType) { | 
					
						
							|  |  |  |       case WindowType.RemoteDesktop: | 
					
						
							| 
									
										
										
										
											2022-09-05 16:01:53 +08:00
										 |  |  |         desktopType = DesktopType.remote; | 
					
						
							| 
									
										
										
										
											2022-08-03 22:03:31 +08:00
										 |  |  |         runRemoteScreen(argument); | 
					
						
							| 
									
										
										
										
											2022-05-29 17:19:50 +08:00
										 |  |  |         break; | 
					
						
							| 
									
										
										
										
											2022-06-17 22:57:41 +08:00
										 |  |  |       case WindowType.FileTransfer: | 
					
						
							| 
									
										
										
										
											2022-09-05 16:01:53 +08:00
										 |  |  |         desktopType = DesktopType.fileTransfer; | 
					
						
							| 
									
										
										
										
											2022-08-03 22:03:31 +08:00
										 |  |  |         runFileTransferScreen(argument); | 
					
						
							| 
									
										
										
										
											2022-06-17 22:57:41 +08:00
										 |  |  |         break; | 
					
						
							| 
									
										
										
										
											2022-08-26 11:35:28 +08:00
										 |  |  |       case WindowType.PortForward: | 
					
						
							| 
									
										
										
										
											2022-09-08 17:22:24 +08:00
										 |  |  |         desktopType = DesktopType.portForward; | 
					
						
							| 
									
										
										
										
											2022-08-26 11:35:28 +08:00
										 |  |  |         runPortForwardScreen(argument); | 
					
						
							|  |  |  |         break; | 
					
						
							| 
									
										
										
										
											2022-05-29 17:19:50 +08:00
										 |  |  |       default: | 
					
						
							|  |  |  |         break; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2022-08-11 18:59:26 +08:00
										 |  |  |   } else if (args.isNotEmpty && args.first == '--cm') { | 
					
						
							| 
									
										
										
										
											2022-09-16 17:14:32 +08:00
										 |  |  |     debugPrint("--cm started"); | 
					
						
							| 
									
										
										
										
											2022-09-05 16:01:53 +08:00
										 |  |  |     desktopType = DesktopType.cm; | 
					
						
							| 
									
										
										
										
											2022-08-11 18:59:26 +08:00
										 |  |  |     await windowManager.ensureInitialized(); | 
					
						
							|  |  |  |     runConnectionManagerScreen(); | 
					
						
							| 
									
										
										
										
											2022-05-29 17:19:50 +08:00
										 |  |  |   } else { | 
					
						
							| 
									
										
										
										
											2022-09-05 16:01:53 +08:00
										 |  |  |     desktopType = DesktopType.main; | 
					
						
							| 
									
										
										
										
											2022-08-09 13:39:30 +08:00
										 |  |  |     await windowManager.ensureInitialized(); | 
					
						
							|  |  |  |     windowManager.setPreventClose(true); | 
					
						
							| 
									
										
										
										
											2022-08-03 22:03:31 +08:00
										 |  |  |     runMainApp(true); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Future<void> initEnv(String appType) async { | 
					
						
							| 
									
										
										
										
											2022-09-16 12:14:03 +08:00
										 |  |  |   // global shared preference
 | 
					
						
							|  |  |  |   await Get.putAsync(() => SharedPreferences.getInstance()); | 
					
						
							| 
									
										
										
										
											2022-08-03 22:03:31 +08:00
										 |  |  |   await platformFFI.init(appType); | 
					
						
							|  |  |  |   // global FFI, use this **ONLY** for global configuration
 | 
					
						
							|  |  |  |   // for convenience, use global FFI on mobile platform
 | 
					
						
							|  |  |  |   // focus on multi-ffi on desktop first
 | 
					
						
							|  |  |  |   await initGlobalFFI(); | 
					
						
							|  |  |  |   // await Firebase.initializeApp();
 | 
					
						
							|  |  |  |   refreshCurrentUser(); | 
					
						
							| 
									
										
										
										
											2022-09-08 08:52:56 +08:00
										 |  |  |   _registerEventHandler(); | 
					
						
							| 
									
										
										
										
											2022-08-03 22:03:31 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void runMainApp(bool startService) async { | 
					
						
							| 
									
										
										
										
											2022-08-30 20:48:03 +08:00
										 |  |  |   await initEnv(kAppTypeMain); | 
					
						
							| 
									
										
										
										
											2022-08-30 16:50:25 +08:00
										 |  |  |   // trigger connection status updater
 | 
					
						
							|  |  |  |   await bind.mainCheckConnectStatus(); | 
					
						
							| 
									
										
										
										
											2022-08-03 22:03:31 +08:00
										 |  |  |   if (startService) { | 
					
						
							| 
									
										
										
										
											2022-06-27 09:48:35 +08:00
										 |  |  |     // await windowManager.ensureInitialized();
 | 
					
						
							| 
									
										
										
										
											2022-06-02 16:45:04 +08:00
										 |  |  |     // disable tray
 | 
					
						
							|  |  |  |     // initTray();
 | 
					
						
							| 
									
										
										
										
											2022-06-13 21:07:26 +08:00
										 |  |  |     gFFI.serverModel.startService(); | 
					
						
							| 
									
										
										
										
											2022-05-25 00:28:59 +08:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2022-08-03 22:03:31 +08:00
										 |  |  |   runApp(App()); | 
					
						
							| 
									
										
										
										
											2022-08-30 20:48:03 +08:00
										 |  |  |   // set window option
 | 
					
						
							| 
									
										
										
										
											2022-09-16 12:14:03 +08:00
										 |  |  |   WindowOptions windowOptions = getHiddenTitleBarWindowOptions(); | 
					
						
							| 
									
										
										
										
											2022-08-30 20:48:03 +08:00
										 |  |  |   windowManager.waitUntilReadyToShow(windowOptions, () async { | 
					
						
							| 
									
										
										
										
											2022-09-16 12:14:03 +08:00
										 |  |  |     restoreWindowPosition(WindowType.Main); | 
					
						
							| 
									
										
										
										
											2022-08-30 16:50:25 +08:00
										 |  |  |     await windowManager.show(); | 
					
						
							|  |  |  |     await windowManager.focus(); | 
					
						
							| 
									
										
										
										
											2022-08-30 20:48:03 +08:00
										 |  |  |   }); | 
					
						
							| 
									
										
										
										
											2022-08-03 22:03:31 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-23 14:12:30 +08:00
										 |  |  | void runMobileApp() async { | 
					
						
							|  |  |  |   await initEnv(kAppTypeMain); | 
					
						
							|  |  |  |   if (isAndroid) androidChannelInit(); | 
					
						
							|  |  |  |   runApp(App()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-03 22:03:31 +08:00
										 |  |  | void runRemoteScreen(Map<String, dynamic> argument) async { | 
					
						
							|  |  |  |   await initEnv(kAppTypeDesktopRemote); | 
					
						
							|  |  |  |   runApp(GetMaterialApp( | 
					
						
							| 
									
										
										
										
											2022-08-11 16:03:04 +08:00
										 |  |  |     navigatorKey: globalKey, | 
					
						
							|  |  |  |     debugShowCheckedModeBanner: false, | 
					
						
							|  |  |  |     title: 'RustDesk - Remote Desktop', | 
					
						
							| 
									
										
										
										
											2022-09-07 18:57:49 +08:00
										 |  |  |     theme: MyTheme.lightTheme, | 
					
						
							|  |  |  |     darkTheme: MyTheme.darkTheme, | 
					
						
							|  |  |  |     themeMode: MyTheme.initialThemeMode(), | 
					
						
							| 
									
										
										
										
											2022-08-03 22:03:31 +08:00
										 |  |  |     home: DesktopRemoteScreen( | 
					
						
							|  |  |  |       params: argument, | 
					
						
							|  |  |  |     ), | 
					
						
							| 
									
										
										
										
											2022-09-16 17:14:32 +08:00
										 |  |  |     navigatorObservers: const [ | 
					
						
							| 
									
										
										
										
											2022-08-11 16:03:04 +08:00
										 |  |  |       // FirebaseAnalyticsObserver(analytics: analytics),
 | 
					
						
							|  |  |  |     ], | 
					
						
							| 
									
										
										
										
											2022-08-23 19:47:56 +08:00
										 |  |  |     builder: _keepScaleBuilder(), | 
					
						
							| 
									
										
										
										
											2022-08-03 22:03:31 +08:00
										 |  |  |   )); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void runFileTransferScreen(Map<String, dynamic> argument) async { | 
					
						
							|  |  |  |   await initEnv(kAppTypeDesktopFileTransfer); | 
					
						
							| 
									
										
										
										
											2022-08-23 19:47:56 +08:00
										 |  |  |   runApp( | 
					
						
							|  |  |  |     GetMaterialApp( | 
					
						
							| 
									
										
										
										
											2022-08-11 16:03:04 +08:00
										 |  |  |       navigatorKey: globalKey, | 
					
						
							|  |  |  |       debugShowCheckedModeBanner: false, | 
					
						
							|  |  |  |       title: 'RustDesk - File Transfer', | 
					
						
							| 
									
										
										
										
											2022-09-07 18:57:49 +08:00
										 |  |  |       theme: MyTheme.lightTheme, | 
					
						
							|  |  |  |       darkTheme: MyTheme.darkTheme, | 
					
						
							|  |  |  |       themeMode: MyTheme.initialThemeMode(), | 
					
						
							| 
									
										
										
										
											2022-08-11 16:03:04 +08:00
										 |  |  |       home: DesktopFileTransferScreen(params: argument), | 
					
						
							| 
									
										
										
										
											2022-09-16 17:14:32 +08:00
										 |  |  |       navigatorObservers: const [ | 
					
						
							| 
									
										
										
										
											2022-08-11 16:03:04 +08:00
										 |  |  |         // FirebaseAnalyticsObserver(analytics: analytics),
 | 
					
						
							| 
									
										
										
										
											2022-08-23 19:47:56 +08:00
										 |  |  |       ], | 
					
						
							|  |  |  |       builder: _keepScaleBuilder(), | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |   ); | 
					
						
							| 
									
										
										
										
											2020-11-06 18:04:04 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-26 11:35:28 +08:00
										 |  |  | void runPortForwardScreen(Map<String, dynamic> argument) async { | 
					
						
							|  |  |  |   await initEnv(kAppTypeDesktopPortForward); | 
					
						
							|  |  |  |   runApp( | 
					
						
							|  |  |  |     GetMaterialApp( | 
					
						
							|  |  |  |       navigatorKey: globalKey, | 
					
						
							|  |  |  |       debugShowCheckedModeBanner: false, | 
					
						
							|  |  |  |       title: 'RustDesk - Port Forward', | 
					
						
							| 
									
										
										
										
											2022-09-07 18:57:49 +08:00
										 |  |  |       theme: MyTheme.lightTheme, | 
					
						
							|  |  |  |       darkTheme: MyTheme.darkTheme, | 
					
						
							|  |  |  |       themeMode: MyTheme.initialThemeMode(), | 
					
						
							| 
									
										
										
										
											2022-08-26 11:35:28 +08:00
										 |  |  |       home: DesktopPortForwardScreen(params: argument), | 
					
						
							| 
									
										
										
										
											2022-09-16 17:14:32 +08:00
										 |  |  |       navigatorObservers: const [ | 
					
						
							| 
									
										
										
										
											2022-08-26 11:35:28 +08:00
										 |  |  |         // FirebaseAnalyticsObserver(analytics: analytics),
 | 
					
						
							|  |  |  |       ], | 
					
						
							|  |  |  |       builder: _keepScaleBuilder(), | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |   ); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-11 18:59:26 +08:00
										 |  |  | void runConnectionManagerScreen() async { | 
					
						
							| 
									
										
										
										
											2022-08-18 09:51:19 +08:00
										 |  |  |   // initialize window
 | 
					
						
							| 
									
										
										
										
											2022-09-16 12:14:03 +08:00
										 |  |  |   WindowOptions windowOptions = | 
					
						
							|  |  |  |       getHiddenTitleBarWindowOptions(size: const Size(300, 400)); | 
					
						
							| 
									
										
										
										
											2022-09-16 16:19:15 +08:00
										 |  |  |   await initEnv(kAppTypeMain); | 
					
						
							| 
									
										
										
										
											2022-08-18 11:07:53 +08:00
										 |  |  |   runApp(GetMaterialApp( | 
					
						
							|  |  |  |       debugShowCheckedModeBanner: false, | 
					
						
							| 
									
										
										
										
											2022-09-07 18:57:49 +08:00
										 |  |  |       theme: MyTheme.lightTheme, | 
					
						
							|  |  |  |       darkTheme: MyTheme.darkTheme, | 
					
						
							|  |  |  |       themeMode: MyTheme.initialThemeMode(), | 
					
						
							| 
									
										
										
										
											2022-09-16 17:14:32 +08:00
										 |  |  |       home: const DesktopServerPage(), | 
					
						
							| 
									
										
										
										
											2022-08-23 19:47:56 +08:00
										 |  |  |       builder: _keepScaleBuilder())); | 
					
						
							| 
									
										
										
										
											2022-09-16 16:19:15 +08:00
										 |  |  |   windowManager.waitUntilReadyToShow(windowOptions, () async { | 
					
						
							|  |  |  |       await windowManager.setAlignment(Alignment.topRight); | 
					
						
							|  |  |  |       await windowManager.show(); | 
					
						
							|  |  |  |       await windowManager.focus(); | 
					
						
							|  |  |  |       await windowManager.setAlignment(Alignment.topRight); // ensure
 | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2022-08-18 11:07:53 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-16 12:14:03 +08:00
										 |  |  | WindowOptions getHiddenTitleBarWindowOptions({Size? size}) { | 
					
						
							| 
									
										
										
										
											2022-08-18 11:07:53 +08:00
										 |  |  |   return WindowOptions( | 
					
						
							|  |  |  |     size: size, | 
					
						
							|  |  |  |     center: true, | 
					
						
							|  |  |  |     backgroundColor: Colors.transparent, | 
					
						
							|  |  |  |     skipTaskbar: false, | 
					
						
							|  |  |  |     titleBarStyle: TitleBarStyle.hidden, | 
					
						
							|  |  |  |   ); | 
					
						
							| 
									
										
										
										
											2022-08-11 18:59:26 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-06 22:34:01 +08:00
										 |  |  | class App extends StatefulWidget { | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   State<App> createState() => _AppState(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class _AppState extends State<App> { | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   void initState() { | 
					
						
							|  |  |  |     super.initState(); | 
					
						
							|  |  |  |     WidgetsBinding.instance.window.onPlatformBrightnessChanged = () { | 
					
						
							|  |  |  |       WidgetsBinding.instance.handlePlatformBrightnessChanged(); | 
					
						
							|  |  |  |       var system = | 
					
						
							|  |  |  |           WidgetsBinding.instance.platformDispatcher.platformBrightness; | 
					
						
							|  |  |  |       var current = isDarkTheme() ? Brightness.dark : Brightness.light; | 
					
						
							|  |  |  |       if (current != system) { | 
					
						
							|  |  |  |         MyTheme.changeTo(system == Brightness.dark); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-06 18:04:04 +08:00
										 |  |  |   @override | 
					
						
							|  |  |  |   Widget build(BuildContext context) { | 
					
						
							| 
									
										
										
										
											2022-05-23 16:24:56 +08:00
										 |  |  |     // final analytics = FirebaseAnalytics.instance;
 | 
					
						
							| 
									
										
										
										
											2022-03-24 17:58:33 +08:00
										 |  |  |     return MultiProvider( | 
					
						
							| 
									
										
										
										
											2022-03-25 16:34:27 +08:00
										 |  |  |       providers: [ | 
					
						
							| 
									
										
										
										
											2022-06-17 22:57:41 +08:00
										 |  |  |         // global configuration
 | 
					
						
							|  |  |  |         // use session related FFI when in remote control or file transfer page
 | 
					
						
							| 
									
										
										
										
											2022-06-13 21:07:26 +08:00
										 |  |  |         ChangeNotifierProvider.value(value: gFFI.ffiModel), | 
					
						
							|  |  |  |         ChangeNotifierProvider.value(value: gFFI.imageModel), | 
					
						
							|  |  |  |         ChangeNotifierProvider.value(value: gFFI.cursorModel), | 
					
						
							|  |  |  |         ChangeNotifierProvider.value(value: gFFI.canvasModel), | 
					
						
							| 
									
										
										
										
											2022-07-27 14:29:47 +08:00
										 |  |  |         ChangeNotifierProvider.value(value: gFFI.abModel), | 
					
						
							|  |  |  |         ChangeNotifierProvider.value(value: gFFI.userModel), | 
					
						
							| 
									
										
										
										
											2022-03-25 16:34:27 +08:00
										 |  |  |       ], | 
					
						
							| 
									
										
										
										
											2022-06-13 21:07:26 +08:00
										 |  |  |       child: GetMaterialApp( | 
					
						
							| 
									
										
										
										
											2022-08-23 19:47:56 +08:00
										 |  |  |         navigatorKey: globalKey, | 
					
						
							|  |  |  |         debugShowCheckedModeBanner: false, | 
					
						
							|  |  |  |         title: 'RustDesk', | 
					
						
							| 
									
										
										
										
											2022-09-07 18:57:49 +08:00
										 |  |  |         theme: MyTheme.lightTheme, | 
					
						
							|  |  |  |         darkTheme: MyTheme.darkTheme, | 
					
						
							|  |  |  |         themeMode: MyTheme.initialThemeMode(mainPage: true), | 
					
						
							| 
									
										
										
										
											2022-08-23 19:47:56 +08:00
										 |  |  |         home: isDesktop | 
					
						
							| 
									
										
										
										
											2022-08-29 18:48:12 +08:00
										 |  |  |             ? const DesktopTabPage() | 
					
						
							| 
									
										
										
										
											2022-08-23 19:47:56 +08:00
										 |  |  |             : !isAndroid | 
					
						
							|  |  |  |                 ? WebHomePage() | 
					
						
							|  |  |  |                 : HomePage(), | 
					
						
							| 
									
										
										
										
											2022-09-16 17:14:32 +08:00
										 |  |  |         navigatorObservers: const [ | 
					
						
							| 
									
										
										
										
											2022-08-23 19:47:56 +08:00
										 |  |  |           // FirebaseAnalyticsObserver(analytics: analytics),
 | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |         builder: isAndroid | 
					
						
							| 
									
										
										
										
											2022-08-28 22:28:19 +08:00
										 |  |  |             ? (context, child) => AccessibilityListener( | 
					
						
							|  |  |  |                   child: MediaQuery( | 
					
						
							|  |  |  |                     data: MediaQuery.of(context).copyWith( | 
					
						
							|  |  |  |                       textScaleFactor: 1.0, | 
					
						
							|  |  |  |                     ), | 
					
						
							|  |  |  |                     child: child ?? Container(), | 
					
						
							|  |  |  |                   ), | 
					
						
							| 
									
										
										
										
											2022-08-23 19:47:56 +08:00
										 |  |  |                 ) | 
					
						
							|  |  |  |             : _keepScaleBuilder(), | 
					
						
							|  |  |  |       ), | 
					
						
							| 
									
										
										
										
											2022-01-23 13:59:57 +08:00
										 |  |  |     ); | 
					
						
							| 
									
										
										
										
											2020-11-06 18:04:04 +08:00
										 |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2022-08-23 19:47:56 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | _keepScaleBuilder() { | 
					
						
							|  |  |  |   return (BuildContext context, Widget? child) { | 
					
						
							|  |  |  |     return MediaQuery( | 
					
						
							|  |  |  |       data: MediaQuery.of(context).copyWith( | 
					
						
							|  |  |  |         textScaleFactor: 1.0, | 
					
						
							|  |  |  |       ), | 
					
						
							|  |  |  |       child: child ?? Container(), | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2022-09-08 08:52:56 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | _registerEventHandler() { | 
					
						
							| 
									
										
										
										
											2022-09-15 16:09:07 +08:00
										 |  |  |   if (isDesktop && desktopType != DesktopType.main) { | 
					
						
							| 
									
										
										
										
											2022-09-11 19:52:38 -07:00
										 |  |  |     platformFFI.registerEventHandler('theme', 'theme', (evt) async { | 
					
						
							| 
									
										
										
										
											2022-09-08 08:52:56 +08:00
										 |  |  |       String? dark = evt['dark']; | 
					
						
							|  |  |  |       if (dark != null) { | 
					
						
							|  |  |  |         MyTheme.changeTo(dark == 'true'); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2022-09-11 19:52:38 -07:00
										 |  |  |     platformFFI.registerEventHandler('language', 'language', (_) async { | 
					
						
							| 
									
										
										
										
											2022-09-08 08:52:56 +08:00
										 |  |  |       Get.forceAppUpdate(); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } |