| 
									
										
										
										
											2023-07-04 14:30:38 -07:00
										 |  |  | import 'package:appflowy/plugins/document/presentation/more/cubit/document_appearance_cubit.dart'; | 
					
						
							| 
									
										
										
										
											2022-10-22 21:57:44 +08:00
										 |  |  | import 'package:appflowy_editor/appflowy_editor.dart' hide Log; | 
					
						
							| 
									
										
										
										
											2021-12-07 22:58:50 +05:30
										 |  |  | import 'package:easy_localization/easy_localization.dart'; | 
					
						
							| 
									
										
										
										
											2021-07-29 22:22:35 +08:00
										 |  |  | import 'package:flowy_infra_ui/flowy_infra_ui.dart'; | 
					
						
							| 
									
										
										
										
											2023-01-08 12:10:53 +08:00
										 |  |  | import 'package:appflowy_backend/log.dart'; | 
					
						
							|  |  |  | import 'package:appflowy_backend/protobuf/flowy-user/protobuf.dart'; | 
					
						
							| 
									
										
										
										
											2021-06-19 23:41:19 +08:00
										 |  |  | import 'package:flutter/material.dart'; | 
					
						
							| 
									
										
										
										
											2022-11-10 14:22:18 +08:00
										 |  |  | import 'package:flutter_bloc/flutter_bloc.dart'; | 
					
						
							| 
									
										
										
										
											2021-06-19 23:41:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-20 11:14:42 +08:00
										 |  |  | import '../../user/application/user_settings_service.dart'; | 
					
						
							|  |  |  | import '../../workspace/application/appearance.dart'; | 
					
						
							|  |  |  | import '../startup.dart'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-20 16:10:50 +08:00
										 |  |  | class InitAppWidgetTask extends LaunchTask { | 
					
						
							| 
									
										
										
										
											2023-05-17 11:03:33 +08:00
										 |  |  |   const InitAppWidgetTask(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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 { | 
					
						
							| 
									
										
										
										
											2022-12-20 11:14:42 +08:00
										 |  |  |     final widget = context.getIt<EntryPoint>().create(context.config); | 
					
						
							| 
									
										
										
										
											2023-02-26 16:27:17 +08:00
										 |  |  |     final appearanceSetting = | 
					
						
							|  |  |  |         await UserSettingsBackendService().getAppearanceSetting(); | 
					
						
							| 
									
										
										
										
											2022-01-28 18:34:21 +08:00
										 |  |  |     final app = ApplicationWidget( | 
					
						
							| 
									
										
										
										
											2022-10-25 17:30:57 +08:00
										 |  |  |       appearanceSetting: appearanceSetting, | 
					
						
							| 
									
										
										
										
											2022-08-31 09:19:31 +08:00
										 |  |  |       child: widget, | 
					
						
							| 
									
										
										
										
											2022-01-28 18:34:21 +08:00
										 |  |  |     ); | 
					
						
							| 
									
										
										
										
											2023-05-17 16:33:44 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-31 11:15:35 +08:00
										 |  |  |     Bloc.observer = ApplicationBlocObserver(); | 
					
						
							|  |  |  |     runApp( | 
					
						
							|  |  |  |       EasyLocalization( | 
					
						
							|  |  |  |         supportedLocales: const [ | 
					
						
							|  |  |  |           // In alphabetical order
 | 
					
						
							| 
									
										
										
										
											2023-06-03 10:06:05 +05:30
										 |  |  |           Locale('ar', 'SA'), | 
					
						
							| 
									
										
										
										
											2022-08-31 11:15:35 +08:00
										 |  |  |           Locale('ca', 'ES'), | 
					
						
							|  |  |  |           Locale('de', 'DE'), | 
					
						
							|  |  |  |           Locale('en'), | 
					
						
							|  |  |  |           Locale('es', 'VE'), | 
					
						
							| 
									
										
										
										
											2023-01-18 10:20:42 +01:00
										 |  |  |           Locale('eu', 'ES'), | 
					
						
							| 
									
										
										
										
											2022-08-31 11:15:35 +08:00
										 |  |  |           Locale('fr', 'FR'), | 
					
						
							|  |  |  |           Locale('fr', 'CA'), | 
					
						
							|  |  |  |           Locale('hu', 'HU'), | 
					
						
							|  |  |  |           Locale('id', 'ID'), | 
					
						
							|  |  |  |           Locale('it', 'IT'), | 
					
						
							|  |  |  |           Locale('ja', 'JP'), | 
					
						
							| 
									
										
										
										
											2022-10-11 10:27:20 +09:00
										 |  |  |           Locale('ko', 'KR'), | 
					
						
							| 
									
										
										
										
											2022-08-31 11:15:35 +08:00
										 |  |  |           Locale('pl', 'PL'), | 
					
						
							|  |  |  |           Locale('pt', 'BR'), | 
					
						
							|  |  |  |           Locale('ru', 'RU'), | 
					
						
							| 
									
										
										
										
											2022-10-23 07:14:08 +02:00
										 |  |  |           Locale('sv'), | 
					
						
							| 
									
										
										
										
											2022-08-31 11:15:35 +08:00
										 |  |  |           Locale('tr', 'TR'), | 
					
						
							|  |  |  |           Locale('zh', 'CN'), | 
					
						
							| 
									
										
										
										
											2023-04-03 12:53:54 +08:00
										 |  |  |           Locale('zh', 'TW'), | 
					
						
							| 
									
										
										
										
											2022-08-31 11:15:35 +08:00
										 |  |  |         ], | 
					
						
							|  |  |  |         path: 'assets/translations', | 
					
						
							|  |  |  |         fallbackLocale: const Locale('en'), | 
					
						
							| 
									
										
										
										
											2022-09-08 11:29:43 +08:00
										 |  |  |         useFallbackTranslations: true, | 
					
						
							| 
									
										
										
										
											2022-08-31 11:15:35 +08:00
										 |  |  |         saveLocale: false, | 
					
						
							|  |  |  |         child: app, | 
					
						
							|  |  |  |       ), | 
					
						
							| 
									
										
										
										
											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-11-10 14:22:18 +08:00
										 |  |  |   final AppearanceSettingsPB appearanceSetting; | 
					
						
							| 
									
										
										
										
											2022-01-28 18:34:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-22 11:23:15 +08:00
										 |  |  |   const ApplicationWidget({ | 
					
						
							| 
									
										
										
										
											2021-06-19 23:41:19 +08:00
										 |  |  |     Key? key, | 
					
						
							|  |  |  |     required this.child, | 
					
						
							| 
									
										
										
										
											2022-10-25 17:30:57 +08:00
										 |  |  |     required this.appearanceSetting, | 
					
						
							| 
									
										
										
										
											2021-06-19 23:41:19 +08:00
										 |  |  |   }) : super(key: key); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							| 
									
										
										
										
											2022-06-01 15:22:18 +08:00
										 |  |  |   Widget build(BuildContext context) { | 
					
						
							| 
									
										
										
										
											2022-11-10 14:22:18 +08:00
										 |  |  |     final cubit = AppearanceSettingsCubit(appearanceSetting) | 
					
						
							|  |  |  |       ..readLocaleWhenAppLaunch(context); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-04 14:30:38 -07:00
										 |  |  |     return MultiBlocProvider( | 
					
						
							|  |  |  |       providers: [ | 
					
						
							|  |  |  |         BlocProvider.value(value: cubit), | 
					
						
							|  |  |  |         BlocProvider<DocumentAppearanceCubit>( | 
					
						
							|  |  |  |           create: (_) => DocumentAppearanceCubit()..fetch(), | 
					
						
							|  |  |  |         ), | 
					
						
							|  |  |  |       ], | 
					
						
							| 
									
										
										
										
											2022-11-10 14:22:18 +08:00
										 |  |  |       child: BlocBuilder<AppearanceSettingsCubit, AppearanceSettingsState>( | 
					
						
							|  |  |  |         builder: (context, state) => MaterialApp( | 
					
						
							|  |  |  |           builder: overlayManagerBuilder(), | 
					
						
							|  |  |  |           debugShowCheckedModeBanner: false, | 
					
						
							| 
									
										
										
										
											2022-12-18 16:02:18 +08:00
										 |  |  |           theme: state.lightTheme, | 
					
						
							|  |  |  |           darkTheme: state.darkTheme, | 
					
						
							| 
									
										
										
										
											2022-12-08 14:21:11 +08:00
										 |  |  |           themeMode: state.themeMode, | 
					
						
							| 
									
										
										
										
											2022-11-10 14:22:18 +08:00
										 |  |  |           localizationsDelegates: context.localizationDelegates + | 
					
						
							|  |  |  |               [AppFlowyEditorLocalizations.delegate], | 
					
						
							|  |  |  |           supportedLocales: context.supportedLocales, | 
					
						
							|  |  |  |           locale: state.locale, | 
					
						
							|  |  |  |           navigatorKey: AppGlobals.rootNavKey, | 
					
						
							|  |  |  |           home: child, | 
					
						
							|  |  |  |         ), | 
					
						
							|  |  |  |       ), | 
					
						
							| 
									
										
										
										
											2022-06-01 15:22:18 +08:00
										 |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											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
										 |  |  | } |