onInit method
void
onInit()
Implementation
void onInit() {
// 检查配置中是否有 [getPages] 或 [home], 没有则抛出异常
if (config.getPages == null && config.home == null) {
throw 'You need add pages or home';
}
// 设置默认 [GetDelegate]
if (config.routerDelegate == null) {
// 默认使用 home 创建 [GetDelegate]
final newDelegate = GetDelegate.createDelegate(
pages: config.getPages ??
[
GetPage(
name: cleanRouteName("/${config.home.runtimeType}"),
page: () => config.home!,
),
],
notFoundRoute: config.unknownRoute,
navigatorKey: config.navigatorKey,
navigatorObservers: (config.navigatorObservers == null
? <NavigatorObserver>[
GetObserver(config.routingCallback, Get.routing)
]
: <NavigatorObserver>[
GetObserver(config.routingCallback, config.routing),
...config.navigatorObservers!
]),
);
// 将新创建的 [GetDelegate] 传到 [config]
config = config.copyWith(routerDelegate: newDelegate);
}
// 初始化路由解析代理
if (config.routeInformationParser == null) {
final newRouteInformationParser =
GetInformationParser.createInformationParser(
initialRoute: config.initialRoute ??
config.getPages?.first.name ??
cleanRouteName("/${config.home.runtimeType}"),
);
config =
config.copyWith(routeInformationParser: newRouteInformationParser);
}
// 本地化语言
if (config.locale != null) Get.locale = config.locale;
// 设置本地化备选项
if (config.fallbackLocale != null) {
Get.fallbackLocale = config.fallbackLocale;
}
// 保存本地化翻译的 Map
if (config.translations != null) {
Get.addTranslations(config.translations!.keys);
} else if (config.translationsKeys != null) {
Get.addTranslations(config.translationsKeys!);
}
Get.smartManagement = config.smartManagement;
// [onInit] 回调
config.onInit?.call();
// 是否打印日志
Get.isLogEnable = config.enableLog ?? kDebugMode;
Get.log = config.logWriterCallback ?? defaultLogWriterCallback;
// 设置默认的转场动画
if (config.defaultTransition == null) {
config = config.copyWith(defaultTransition: getThemeTransition());
}
// defaultOpaqueRoute = config.opaqueRoute ?? true;
// defaultPopGesture = config.popGesture ?? GetPlatform.isIOS;
// defaultTransitionDuration =
// config.transitionDuration ?? Duration(milliseconds: 300);
// 调用 onReady
Future(() => onReady());
}