| 
									
										
										
										
											2021-06-19 23:41:19 +08:00
										 |  |  | import 'package:app_flowy/startup/startup.dart'; | 
					
						
							| 
									
										
										
										
											2022-03-01 10:31:39 -05:00
										 |  |  | import 'package:app_flowy/user/application/user_settings_service.dart'; | 
					
						
							| 
									
										
										
										
											2022-01-28 18:34:21 +08:00
										 |  |  | import 'package:app_flowy/workspace/application/appearance.dart'; | 
					
						
							| 
									
										
										
										
											2021-12-07 22:58:50 +05:30
										 |  |  | import 'package:easy_localization/easy_localization.dart'; | 
					
						
							| 
									
										
										
										
											2021-07-13 08:47:26 +08:00
										 |  |  | import 'package:flowy_infra/theme.dart'; | 
					
						
							| 
									
										
										
										
											2021-07-29 22:22:35 +08:00
										 |  |  | import 'package:flowy_infra_ui/flowy_infra_ui.dart'; | 
					
						
							| 
									
										
										
										
											2021-06-19 23:41:19 +08:00
										 |  |  | import 'package:flutter/material.dart'; | 
					
						
							|  |  |  | import 'package:provider/provider.dart'; | 
					
						
							|  |  |  | import 'package:window_size/window_size.dart'; | 
					
						
							| 
									
										
										
										
											2021-10-30 14:44:43 +08:00
										 |  |  | import 'package:bloc/bloc.dart'; | 
					
						
							| 
									
										
										
										
											2022-02-19 13:52:52 +08:00
										 |  |  | import 'package:flowy_sdk/log.dart'; | 
					
						
							| 
									
										
										
										
											2021-06-19 23:41:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-20 16:10:50 +08:00
										 |  |  | class InitAppWidgetTask extends LaunchTask { | 
					
						
							| 
									
										
										
										
											2021-06-19 23:41:19 +08:00
										 |  |  |   @override | 
					
						
							|  |  |  |   LaunchTaskType get type => LaunchTaskType.appLauncher; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							| 
									
										
										
										
											2022-01-28 18:34:21 +08:00
										 |  |  |   Future<void> initialize(LaunchContext context) async { | 
					
						
							| 
									
										
										
										
											2021-09-12 22:19:59 +08:00
										 |  |  |     final widget = context.getIt<EntryPoint>().create(); | 
					
						
							| 
									
										
										
										
											2022-03-01 10:31:39 -05:00
										 |  |  |     final setting = await UserSettingsService().getAppearanceSettings(); | 
					
						
							| 
									
										
										
										
											2022-01-28 18:34:21 +08:00
										 |  |  |     final settingModel = AppearanceSettingModel(setting); | 
					
						
							|  |  |  |     final app = ApplicationWidget( | 
					
						
							|  |  |  |       child: widget, | 
					
						
							|  |  |  |       settingModel: settingModel, | 
					
						
							|  |  |  |     ); | 
					
						
							| 
									
										
										
										
											2022-01-04 22:44:03 +08:00
										 |  |  |     BlocOverrides.runZoned( | 
					
						
							|  |  |  |       () { | 
					
						
							|  |  |  |         runApp( | 
					
						
							|  |  |  |           EasyLocalization( | 
					
						
							| 
									
										
										
										
											2022-02-05 11:23:10 +08:00
										 |  |  |             supportedLocales: const [ | 
					
						
							| 
									
										
										
										
											2022-02-05 13:13:48 -05:00
										 |  |  |               // In alphabetical order
 | 
					
						
							| 
									
										
										
										
											2022-02-27 16:08:11 +01:00
										 |  |  |               Locale('ca', 'ES'), | 
					
						
							| 
									
										
										
										
											2022-01-30 12:24:52 +01:00
										 |  |  |               Locale('de', 'DE'), | 
					
						
							| 
									
										
										
										
											2022-02-05 11:23:10 +08:00
										 |  |  |               Locale('en'), | 
					
						
							| 
									
										
										
										
											2022-02-05 16:35:25 -04:00
										 |  |  |               Locale('es', 'VE'), | 
					
						
							| 
									
										
										
										
											2022-02-25 02:48:47 +01:00
										 |  |  |               Locale('fr', 'FR'), | 
					
						
							| 
									
										
										
										
											2022-02-05 11:23:10 +08:00
										 |  |  |               Locale('fr', 'CA'), | 
					
						
							| 
									
										
										
										
											2022-02-28 11:46:01 +01:00
										 |  |  |               Locale('hu', 'HU'), | 
					
						
							| 
									
										
										
										
											2022-07-25 13:33:50 +07:00
										 |  |  |               Locale('id', 'ID'), | 
					
						
							| 
									
										
										
										
											2022-02-05 13:13:48 -05:00
										 |  |  |               Locale('it', 'IT'), | 
					
						
							| 
									
										
										
										
											2022-05-06 00:40:20 +09:00
										 |  |  |               Locale('ja', 'JP'), | 
					
						
							| 
									
										
										
										
											2022-03-15 21:08:31 +00:00
										 |  |  |               Locale('pl', 'PL'), | 
					
						
							| 
									
										
										
										
											2022-02-03 11:10:20 -03:00
										 |  |  |               Locale('pt', 'BR'), | 
					
						
							| 
									
										
										
										
											2022-02-05 13:13:48 -05:00
										 |  |  |               Locale('ru', 'RU'), | 
					
						
							| 
									
										
										
										
											2022-02-28 15:56:13 +03:00
										 |  |  |               Locale('tr', 'TR'), | 
					
						
							| 
									
										
										
										
											2022-02-05 13:13:48 -05:00
										 |  |  |               Locale('zh', 'CN'), | 
					
						
							| 
									
										
										
										
											2022-02-05 11:23:10 +08:00
										 |  |  |             ], | 
					
						
							|  |  |  |             path: 'assets/translations', | 
					
						
							|  |  |  |             fallbackLocale: const Locale('en'), | 
					
						
							| 
									
										
										
										
											2022-02-05 13:13:48 -05:00
										 |  |  |             saveLocale: false, | 
					
						
							| 
									
										
										
										
											2022-02-05 11:23:10 +08:00
										 |  |  |             child: app, | 
					
						
							|  |  |  |           ), | 
					
						
							| 
									
										
										
										
											2022-01-04 22:44:03 +08:00
										 |  |  |         ); | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       blocObserver: ApplicationBlocObserver(), | 
					
						
							| 
									
										
										
										
											2021-12-07 22:58:50 +05:30
										 |  |  |     ); | 
					
						
							| 
									
										
										
										
											2021-07-12 23:27:58 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     return Future(() => {}); | 
					
						
							| 
									
										
										
										
											2021-06-19 23:41:19 +08:00
										 |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-22 11:23:15 +08:00
										 |  |  | class ApplicationWidget extends StatelessWidget { | 
					
						
							| 
									
										
										
										
											2021-06-19 23:41:19 +08:00
										 |  |  |   final Widget child; | 
					
						
							| 
									
										
										
										
											2022-01-28 18:34:21 +08:00
										 |  |  |   final AppearanceSettingModel settingModel; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-22 11:23:15 +08:00
										 |  |  |   const ApplicationWidget({ | 
					
						
							| 
									
										
										
										
											2021-06-19 23:41:19 +08:00
										 |  |  |     Key? key, | 
					
						
							|  |  |  |     required this.child, | 
					
						
							| 
									
										
										
										
											2022-01-28 18:34:21 +08:00
										 |  |  |     required this.settingModel, | 
					
						
							| 
									
										
										
										
											2021-06-19 23:41:19 +08:00
										 |  |  |   }) : super(key: key); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							| 
									
										
										
										
											2022-06-01 15:22:18 +08:00
										 |  |  |   Widget build(BuildContext context) { | 
					
						
							|  |  |  |     return ChangeNotifierProvider.value( | 
					
						
							|  |  |  |       value: settingModel, | 
					
						
							|  |  |  |       builder: (context, _) { | 
					
						
							|  |  |  |         const ratio = 1.73; | 
					
						
							|  |  |  |         const minWidth = 600.0; | 
					
						
							|  |  |  |         setWindowMinSize(const Size(minWidth, minWidth / ratio)); | 
					
						
							|  |  |  |         settingModel.readLocaleWhenAppLaunch(context); | 
					
						
							|  |  |  |         AppTheme theme = context.select<AppearanceSettingModel, AppTheme>( | 
					
						
							|  |  |  |           (value) => value.theme, | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |         Locale locale = context.select<AppearanceSettingModel, Locale>( | 
					
						
							|  |  |  |           (value) => value.locale, | 
					
						
							|  |  |  |         ); | 
					
						
							| 
									
										
										
										
											2021-06-19 23:41:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-01 15:22:18 +08:00
										 |  |  |         return MultiProvider( | 
					
						
							|  |  |  |           providers: [ | 
					
						
							|  |  |  |             Provider.value(value: theme), | 
					
						
							|  |  |  |             Provider.value(value: locale), | 
					
						
							|  |  |  |           ], | 
					
						
							|  |  |  |           builder: (context, _) { | 
					
						
							|  |  |  |             return MaterialApp( | 
					
						
							|  |  |  |               builder: overlayManagerBuilder(), | 
					
						
							|  |  |  |               debugShowCheckedModeBanner: false, | 
					
						
							|  |  |  |               theme: theme.themeData, | 
					
						
							|  |  |  |               localizationsDelegates: context.localizationDelegates, | 
					
						
							|  |  |  |               supportedLocales: context.supportedLocales, | 
					
						
							|  |  |  |               locale: locale, | 
					
						
							|  |  |  |               navigatorKey: AppGlobals.rootNavKey, | 
					
						
							|  |  |  |               home: child, | 
					
						
							|  |  |  |             ); | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2021-06-19 23:41:19 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class AppGlobals { | 
					
						
							|  |  |  |   static GlobalKey<NavigatorState> rootNavKey = GlobalKey(); | 
					
						
							|  |  |  |   static NavigatorState get nav => rootNavKey.currentState!; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2021-10-30 14:44:43 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | class ApplicationBlocObserver extends BlocObserver { | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   // ignore: unnecessary_overrides
 | 
					
						
							|  |  |  |   void onTransition(Bloc bloc, Transition transition) { | 
					
						
							|  |  |  |     // Log.debug("[current]: ${transition.currentState} \n\n[next]: ${transition.nextState}");
 | 
					
						
							| 
									
										
										
										
											2022-04-14 21:16:29 +08:00
										 |  |  |     // Log.debug("${transition.nextState}");
 | 
					
						
							| 
									
										
										
										
											2021-10-30 14:44:43 +08:00
										 |  |  |     super.onTransition(bloc, transition); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   void onError(BlocBase bloc, Object error, StackTrace stackTrace) { | 
					
						
							|  |  |  |     Log.debug(error); | 
					
						
							|  |  |  |     super.onError(bloc, error, stackTrace); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2021-11-04 13:22:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-14 21:16:29 +08:00
										 |  |  |   // @override
 | 
					
						
							|  |  |  |   // void onEvent(Bloc bloc, Object? event) {
 | 
					
						
							|  |  |  |   //   Log.debug("$event");
 | 
					
						
							|  |  |  |   //   super.onEvent(bloc, event);
 | 
					
						
							|  |  |  |   // }
 | 
					
						
							| 
									
										
										
										
											2021-10-30 14:44:43 +08:00
										 |  |  | } |