application_widget.dart 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import 'package:app_flowy/startup/startup.dart';
  2. import 'package:app_flowy/workspace/presentation/theme/theme_model.dart';
  3. import 'package:easy_localization/easy_localization.dart';
  4. import 'package:flowy_infra/theme.dart';
  5. import 'package:flowy_infra_ui/flowy_infra_ui.dart';
  6. import 'package:flutter/material.dart';
  7. import 'package:provider/provider.dart';
  8. import 'package:window_size/window_size.dart';
  9. import 'package:app_flowy/startup/launcher.dart';
  10. import 'package:bloc/bloc.dart';
  11. import 'package:flowy_log/flowy_log.dart';
  12. class AppWidgetTask extends LaunchTask {
  13. @override
  14. LaunchTaskType get type => LaunchTaskType.appLauncher;
  15. @override
  16. Future<void> initialize(LaunchContext context) {
  17. final widget = context.getIt<EntryPoint>().create();
  18. final app = ApplicationWidget(child: widget);
  19. BlocOverrides.runZoned(
  20. () {
  21. runApp(
  22. EasyLocalization(
  23. supportedLocales: const [Locale('en'), Locale('zh_CN'), Locale('it_IT'), Locale('fr', 'CA')],
  24. path: 'assets/translations',
  25. fallbackLocale: const Locale('en'),
  26. child: app),
  27. );
  28. },
  29. blocObserver: ApplicationBlocObserver(),
  30. );
  31. return Future(() => {});
  32. }
  33. }
  34. class ApplicationWidget extends StatelessWidget {
  35. final Widget child;
  36. const ApplicationWidget({
  37. Key? key,
  38. required this.child,
  39. }) : super(key: key);
  40. @override
  41. Widget build(BuildContext context) => ChangeNotifierProvider(
  42. create: (context) => ThemeModel(),
  43. builder: (context, _) {
  44. const ratio = 1.73;
  45. const minWidth = 800.0;
  46. setWindowMinSize(const Size(minWidth, minWidth / ratio));
  47. ThemeType themeType = context.select<ThemeModel, ThemeType>((value) => value.theme);
  48. AppTheme theme = AppTheme.fromType(themeType);
  49. return Provider.value(
  50. value: theme,
  51. child: MaterialApp(
  52. builder: overlayManagerBuilder(),
  53. debugShowCheckedModeBanner: false,
  54. theme: theme.themeData,
  55. localizationsDelegates: context.localizationDelegates,
  56. supportedLocales: context.supportedLocales,
  57. locale: context.locale,
  58. navigatorKey: AppGlobals.rootNavKey,
  59. home: child,
  60. ),
  61. );
  62. });
  63. }
  64. class AppGlobals {
  65. static GlobalKey<NavigatorState> rootNavKey = GlobalKey();
  66. static NavigatorState get nav => rootNavKey.currentState!;
  67. }
  68. class ApplicationBlocObserver extends BlocObserver {
  69. @override
  70. // ignore: unnecessary_overrides
  71. void onTransition(Bloc bloc, Transition transition) {
  72. // Log.debug("[current]: ${transition.currentState} \n\n[next]: ${transition.nextState}");
  73. //Log.debug("${transition.nextState}");
  74. super.onTransition(bloc, transition);
  75. }
  76. @override
  77. void onError(BlocBase bloc, Object error, StackTrace stackTrace) {
  78. Log.debug(error);
  79. super.onError(bloc, error, stackTrace);
  80. }
  81. @override
  82. void onEvent(Bloc bloc, Object? event) {
  83. Log.debug("$event");
  84. super.onEvent(bloc, event);
  85. }
  86. }