给GetMaterialApp.router设置路由监听器

92 阅读1分钟

给GetMaterialApp.router设置路由监听器

routerDelegate: GetDelegate( navigatorObservers: [MyNavigatorObserver()],)

GetMaterialApp.router(
  debugShowCheckedModeBanner: false,
  title:  "demo"
  localizationsDelegates: const [
    GlobalMaterialLocalizations.delegate,
    GlobalWidgetsLocalizations.delegate,
    GlobalCupertinoLocalizations.delegate,
  ],
  supportedLocales: LanguageType.values.map((e) => e.locale).toList(),
  // 配置多语言
  translationsKeys: AppTranslation.translations,
  // 默认语言
  locale: LanguageManager.instance.currentLocaleType.locale,
  // 如果无法找到当前语言的翻译,则回退到这个语言
  fallbackLocale: LanguageManager.instance.currentLocaleType.locale,
  theme: ThemeData(
    brightness: Brightness.light,
    useMaterial3: false,
    splashColor: Colors.transparent, // 点击时的水波纹颜色设置为透明
    highlightColor: Colors.transparent, // 点击时的背景高亮颜色设置为透明
  ),
  initialBinding: BindingsBuilder(
    () {},
  ),
  getPages: AppPages.routes,
  routeInformationParser: Get.createInformationParser(
    initialRoute: Routes.LAUNCH,
  ),
  routerDelegate: GetDelegate( navigatorObservers: [MyNavigatorObserver()],),
  defaultTransition: Transition.rightToLeft,
  transitionDuration: const Duration(milliseconds: 200),
  builder: EasyLoading.init(builder: (context, child) {
    if (Platform.isAndroid) {
      AppConfig.textHeight = 1.2;
    }
    return AnnotatedRegion<SystemUiOverlayStyle>(
      value: AppConfig.systemUiOverlayStyle,
      child: MediaQuery(
        data: MediaQuery.of(context).copyWith(textScaler: const TextScaler.linear(1.0)), // 控制字体不受系统控制
        child: KeyboardDismissOnTap(
          // 全局配置点击键盘外区域取消键盘
          child: child ?? const SizedBox.shrink(),
        ),
      ),
    );
  }),
)

路由监听器

class MyNavigatorObserver extends NavigatorObserver {
  @override
  void didPush(Route<dynamic> route, Route<dynamic>? previousRoute) {
    print('MyNavigatorObserver: didPush - Route ${route.settings.name}');
    super.didPush(route, previousRoute);
  }

  @override
  Future<void> didPop(
      Route<dynamic> route, Route<dynamic>? previousRoute) async {
    print('MyNavigatorObserver: didPop - Route ${route.settings.name}');
    super.didPop(route, previousRoute);
  }

  @override
  void didRemove(Route<dynamic> route, Route<dynamic>? previousRoute) {
    print('MyNavigatorObserver: didRemove - Route ${route.settings.name}');
    super.didRemove(route, previousRoute);
  }

  @override
  void didReplace({Route<dynamic>? newRoute, Route<dynamic>? oldRoute}) {
    print(
        'MyNavigatorObserver: didReplace - New route: ${newRoute?.settings.name}, Old route: ${oldRoute?.settings.name}');
    super.didReplace(newRoute: newRoute, oldRoute: oldRoute);
  }

  @override
  void didStartUserGesture(
      Route<dynamic> route, Route<dynamic>? previousRoute) {
    print(
        'MyNavigatorObserver: didStartUserGesture - Route ${route.settings.name}');
    super.didStartUserGesture(route, previousRoute);
  }

  @override
  void didStopUserGesture() {
    print('MyNavigatorObserver: didStopUserGesture');
    super.didStopUserGesture();
  }
}