app_widget.dart 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. import 'package:app_flowy/startup/startup.dart';
  2. import 'package:app_flowy/user/application/user_settings_service.dart';
  3. import 'package:app_flowy/workspace/application/appearance.dart';
  4. import 'package:appflowy_editor/appflowy_editor.dart' hide Log;
  5. import 'package:easy_localization/easy_localization.dart';
  6. import 'package:flowy_infra_ui/flowy_infra_ui.dart';
  7. import 'package:flowy_sdk/log.dart';
  8. import 'package:flowy_sdk/protobuf/flowy-user/protobuf.dart';
  9. import 'package:flutter/material.dart';
  10. import 'package:flutter_bloc/flutter_bloc.dart';
  11. import 'package:window_size/window_size.dart';
  12. class InitAppWidgetTask extends LaunchTask {
  13. @override
  14. LaunchTaskType get type => LaunchTaskType.appLauncher;
  15. @override
  16. Future<void> initialize(LaunchContext context) async {
  17. final widget = context.getIt<EntryPoint>().create();
  18. final appearanceSetting = await SettingsFFIService().getAppearanceSetting();
  19. final app = ApplicationWidget(
  20. appearanceSetting: appearanceSetting,
  21. child: widget,
  22. );
  23. Bloc.observer = ApplicationBlocObserver();
  24. runApp(
  25. EasyLocalization(
  26. supportedLocales: const [
  27. // In alphabetical order
  28. Locale('ca', 'ES'),
  29. Locale('de', 'DE'),
  30. Locale('en'),
  31. Locale('es', 'VE'),
  32. Locale('fr', 'FR'),
  33. Locale('fr', 'CA'),
  34. Locale('hu', 'HU'),
  35. Locale('id', 'ID'),
  36. Locale('it', 'IT'),
  37. Locale('ja', 'JP'),
  38. Locale('ko', 'KR'),
  39. Locale('pl', 'PL'),
  40. Locale('pt', 'BR'),
  41. Locale('ru', 'RU'),
  42. Locale('sv'),
  43. Locale('tr', 'TR'),
  44. Locale('zh', 'CN'),
  45. ],
  46. path: 'assets/translations',
  47. fallbackLocale: const Locale('en'),
  48. useFallbackTranslations: true,
  49. saveLocale: false,
  50. child: app,
  51. ),
  52. );
  53. return Future(() => {});
  54. }
  55. }
  56. class ApplicationWidget extends StatelessWidget {
  57. final Widget child;
  58. final AppearanceSettingsPB appearanceSetting;
  59. const ApplicationWidget({
  60. Key? key,
  61. required this.child,
  62. required this.appearanceSetting,
  63. }) : super(key: key);
  64. @override
  65. Widget build(BuildContext context) {
  66. const ratio = 1.73;
  67. const minWidth = 600.0;
  68. setWindowMinSize(const Size(minWidth, minWidth / ratio));
  69. final cubit = AppearanceSettingsCubit(appearanceSetting)
  70. ..readLocaleWhenAppLaunch(context);
  71. return BlocProvider(
  72. create: (context) => cubit,
  73. child: BlocBuilder<AppearanceSettingsCubit, AppearanceSettingsState>(
  74. builder: (context, state) => MaterialApp(
  75. builder: overlayManagerBuilder(),
  76. debugShowCheckedModeBanner: false,
  77. theme: state.theme.themeData,
  78. localizationsDelegates: context.localizationDelegates +
  79. [AppFlowyEditorLocalizations.delegate],
  80. supportedLocales: context.supportedLocales,
  81. locale: state.locale,
  82. navigatorKey: AppGlobals.rootNavKey,
  83. home: child,
  84. ),
  85. ),
  86. );
  87. }
  88. }
  89. class AppGlobals {
  90. static GlobalKey<NavigatorState> rootNavKey = GlobalKey();
  91. static NavigatorState get nav => rootNavKey.currentState!;
  92. }
  93. class ApplicationBlocObserver extends BlocObserver {
  94. @override
  95. // ignore: unnecessary_overrides
  96. void onTransition(Bloc bloc, Transition transition) {
  97. // Log.debug("[current]: ${transition.currentState} \n\n[next]: ${transition.nextState}");
  98. // Log.debug("${transition.nextState}");
  99. super.onTransition(bloc, transition);
  100. }
  101. @override
  102. void onError(BlocBase bloc, Object error, StackTrace stackTrace) {
  103. Log.debug(error);
  104. super.onError(bloc, error, stackTrace);
  105. }
  106. // @override
  107. // void onEvent(Bloc bloc, Object? event) {
  108. // Log.debug("$event");
  109. // super.onEvent(bloc, event);
  110. // }
  111. }