application_task.dart 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import 'package:app_flowy/startup/startup.dart';
  2. import 'package:flowy_infra/theme.dart';
  3. import 'package:flowy_infra_ui/flowy_infra_ui.dart';
  4. import 'package:flutter/material.dart';
  5. import 'package:provider/provider.dart';
  6. import 'package:window_size/window_size.dart';
  7. import 'package:app_flowy/startup/launcher.dart';
  8. class AppWidgetTask extends LaunchTask {
  9. @override
  10. LaunchTaskType get type => LaunchTaskType.appLauncher;
  11. @override
  12. Future<void> initialize(LaunchContext context) {
  13. final widget = context.getIt<EntryPoint>().create();
  14. final app = ApplicationWidget(child: widget);
  15. runApp(app);
  16. return Future(() => {});
  17. }
  18. }
  19. final GlobalKey<FlowyOverlayState> _key = GlobalKey<FlowyOverlayState>();
  20. class ApplicationWidget extends StatelessWidget {
  21. final Widget child;
  22. const ApplicationWidget({
  23. Key? key,
  24. required this.child,
  25. }) : super(key: key);
  26. @override
  27. Widget build(BuildContext context) {
  28. const ratio = 1.73;
  29. const minWidth = 500.0;
  30. const launchWidth = 1310.0;
  31. setWindowMinSize(const Size(minWidth, minWidth / ratio));
  32. setWindowFrame(const Rect.fromLTRB(0, 0, launchWidth, launchWidth / ratio));
  33. final theme = AppTheme.fromType(ThemeType.light);
  34. FlowyOverlayConfig config = FlowyOverlayConfig(barrierColor: theme.bg3.withOpacity(0.3));
  35. return Provider.value(
  36. value: theme,
  37. child: MaterialApp(
  38. builder: overlayManagerBuilder(config: config),
  39. debugShowCheckedModeBanner: false,
  40. theme: theme.themeData,
  41. navigatorKey: AppGlobals.rootNavKey,
  42. home: child,
  43. ));
  44. }
  45. }
  46. class AppGlobals {
  47. static GlobalKey<NavigatorState> rootNavKey = GlobalKey();
  48. static NavigatorState get nav => rootNavKey.currentState!;
  49. }