这是基于vue-vben-admin 模板适用于abp Vnext的前端管理项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

94 lines
2.4 KiB

import 'package:get/get.dart';
import 'module.key.dart';
abstract class Module {
static final Map<Module, bool> _initModuleMap = {};
List<Module> get dependencies => const [];
List<GetPage> get routes => const [];
Future<void> configureServicesAsync() {
return Future.sync(() => configureServices());
}
void configureServices() {
}
T inject<T>(
T dependency,
{
String? tag,
bool permanent = false,
InstanceBuilderCallback<T>? builder,
}) => Get.put(dependency, tag: tag, permanent: permanent, builder: builder);
void create<T>(
InstanceBuilderCallback<T> builder,
{
String? tag,
bool permanent = true,
}
) => Get.create(builder, tag: tag, permanent: permanent);
void lazyInject<T>(
InstanceBuilderCallback<T> builder,
{
String? tag,
bool fenix = false,
}) => Get.lazyPut(builder, tag: tag, fenix: fenix);
Future<T> injectAsync<T>(
AsyncInstanceBuilderCallback<T> builder,
{
String? tag,
bool permanent = false,
}) => Get.putAsync(builder, tag: tag, permanent: permanent);
bool isInjected({String? tag}) => Get.isRegistered(tag: tag);
Future<Map<ModuleKey, List<GetPage>>> initAsync() async {
final routeMap = <ModuleKey, List<GetPage>>{};
for (var dependency in dependencies) {
if (_initModuleMap.containsKey(dependency)) {
continue;
}
await dependency.configureServicesAsync();
var childrenRoute = await dependency.initAsync();
routeMap.addAll(childrenRoute);
_initModuleMap[dependency] = true;
}
await configureServicesAsync();
routeMap.assign(ModuleKey(toString()), routes);
_initModuleMap[this] = true;
return routeMap;
}
Map<ModuleKey, List<GetPage>> init() {
final routeMap = <ModuleKey, List<GetPage>>{};
for (var dependency in dependencies) {
if (_initModuleMap.containsKey(dependency)) {
continue;
}
dependency.configureServices();
var childrenRoute = dependency.init();
routeMap.addAll(childrenRoute);
_initModuleMap[dependency] = true;
}
configureServices();
routeMap.assign(ModuleKey(toString()), routes);
_initModuleMap[this] = true;
return routeMap;
}
List<GetPage> getRoutes() {
List<GetPage> findRoutes = [];
findRoutes.addAll(routes);
for (var dependency in dependencies) {
findRoutes.addAll(dependency.routes);
}
return findRoutes;
}
}