import 'package:get/get.dart'; import '../dependency/index.dart'; import 'module.key.dart'; abstract class Module { late bool isInitlized= false; Injector get injector => Injector.instance; List get dependencies => const []; List get routes => const []; Future configureServicesAsync() { return Future.sync(() => configureServices()); } void configureServices() { } T get({String? tag}) => injector.get(tag: tag); T inject( T dependency, { String? tag, bool permanent = false, InjectorBuilderFactory? builder, }) => injector.inject(dependency, tag: tag, permanent: permanent, builder: builder); void create( InjectorBuilderFactory builder, { String? tag, bool permanent = true, } ) => injector.create(builder, tag: tag, permanent: permanent); void lazyInject( InjectorBuilderFactory builder, { String? tag, bool fenix = false, }) => injector.lazyInject(builder, tag: tag, fenix: fenix); Future injectAsync( AsyncInjectorBuilderFactory builder, { String? tag, bool permanent = false, }) => injector.injectAsync(builder, tag: tag, permanent: permanent); bool isInjected({String? tag}) => injector.isInjected(tag: tag); Future>> initAsync() async { var routeMap = >{}; if (isInitlized) return routeMap; for (var dependency in dependencies) { var childrenRoute = await dependency.initAsync(); routeMap.addAll(childrenRoute); } await configureServicesAsync(); routeMap.putIfAbsent(ModuleKey(toString()), () => routes); isInitlized = true; return routeMap; } Map> init() { var routeMap = >{}; if (isInitlized) return routeMap; for (var dependency in dependencies) { var childrenRoute = dependency.init(); routeMap.addAll(childrenRoute); } configureServices(); routeMap.putIfAbsent(ModuleKey(toString()), () => routes); isInitlized = true; return routeMap; } List getRoutes() { List findRoutes = []; for (var dependency in dependencies) { findRoutes.addAll(dependency.getRoutes()); } findRoutes.addAll(routes); return findRoutes; } }