| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 | import 'package:app_flowy/startup/launcher.dart';import 'package:app_flowy/startup/tasks/prelude.dart';import 'package:flutter/material.dart';import 'package:get_it/get_it.dart';import 'package:app_flowy/workspace/infrastructure/deps_resolver.dart';import 'package:app_flowy/user/infrastructure/deps_resolver.dart';import 'package:flowy_sdk/flowy_sdk.dart';import 'tasks/init_platform_service.dart';// [[diagram: flowy startup flow]]//                   ┌──────────┐//                   │ FlowyApp │//                   └──────────┘//                         │  impl//                         ▼// ┌────────┐  1.run ┌──────────┐// │ System │───┬───▶│EntryPoint│// └────────┘   │    └──────────┘         ┌─────────────────┐//              │                    ┌──▶ │ RustSDKInitTask │//              │    ┌───────────┐   │    └─────────────────┘//              └──▶ │AppLauncher│───┤//        2.launch   └───────────┘   │    ┌─────────────┐         ┌──────────────────┐      ┌───────────────┐//                                   └───▶│AppWidgetTask│────────▶│ApplicationWidget │─────▶│ SplashScreen  │//                                        └─────────────┘         └──────────────────┘      └───────────────┘////                                                 3.build MeterialAppfinal getIt = GetIt.instance;enum IntegrationEnv {  dev,  pro,}abstract class EntryPoint {  Widget create();}class System {  static void run(EntryPoint f) {    // Specify the env    const env = IntegrationEnv.dev;    // Config the deps graph    getIt.registerFactory<EntryPoint>(() => f);    resolveDependencies(env);    // add task    getIt<AppLauncher>().addTask(InitRustSDKTask());    getIt<AppLauncher>().addTask(AppWidgetTask());    getIt<AppLauncher>().addTask(InitPlatformService());    // execute the tasks    getIt<AppLauncher>().launch();  }}void resolveDependencies(IntegrationEnv env) => initGetIt(getIt, env);Future<void> initGetIt(  GetIt getIt,  IntegrationEnv env,) async {  getIt.registerLazySingleton<FlowySDK>(() => const FlowySDK());  getIt.registerLazySingleton<AppLauncher>(() => AppLauncher(env, getIt));  await UserDepsResolver.resolve(getIt);  await HomeDepsResolver.resolve(getIt);}
 |