application_widget.dart 2.7 KB

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