import 'package:flutter/widgets.dart'; import 'package:go_router/go_router.dart'; import 'router_key.dart'; import 'chat_router.dart'; import 'contact_router.dart'; import 'more_router.dart'; import 'package:together_mobile/models/init_get_it.dart'; import 'package:together_mobile/models/token_model.dart'; import 'package:together_mobile/models/user_model.dart'; import 'package:together_mobile/request/signup_signin.dart'; import 'package:together_mobile/screens/signin_signup/signup_screen.dart'; import 'package:together_mobile/screens/signin_signup/signin_screen.dart'; import 'package:together_mobile/screens/welcome/welcome_screen.dart'; import 'package:together_mobile/screens/home/home_screen.dart'; final GoRouter router = GoRouter( initialLocation: '/welcome', navigatorKey: rootNavigatorKey, debugLogDiagnostics: true, routes: [ GoRoute( path: '/welcome', name: 'Welcome', builder: (BuildContext context, GoRouterState state) => const WelcomeScreen(), redirect: (context, state) async { await getIt.get().init(); if (getIt.get().token.isNotEmpty) { Map res = await signinByToken(); if (res['code'] == 10200) { await getIt.get().updateToken(res['token']); getIt.get().init(res['data']); return '/chat'; } } return null; }, ), GoRoute( path: '/signup', name: 'SignUp', pageBuilder: (context, state) { return CustomTransitionPage( key: state.pageKey, child: const SignupScreen(), transitionDuration: const Duration(milliseconds: 200), reverseTransitionDuration: const Duration(milliseconds: 200), transitionsBuilder: (BuildContext context, Animation animation, Animation secondaryAnimation, Widget child) { const begin = Offset(1.0, 0.0); const end = Offset.zero; final tween = Tween(begin: begin, end: end); final offsetAnimation = animation.drive(tween); return SlideTransition( position: offsetAnimation, child: child, ); }, ); }, ), GoRoute( path: '/signin', name: 'SignIn', pageBuilder: (context, state) { return CustomTransitionPage( key: state.pageKey, child: const SigninScreen(), transitionDuration: const Duration(milliseconds: 200), reverseTransitionDuration: const Duration(milliseconds: 200), transitionsBuilder: ( BuildContext context, Animation animation, Animation secondaryAnimation, Widget child, ) { const begin = Offset(1.0, 0.0); const end = Offset.zero; final tween = Tween(begin: begin, end: end); final offsetAnimation = animation.drive(tween); return SlideTransition( position: offsetAnimation, child: child, ); }, ); }, ), ShellRoute( navigatorKey: shellNavigatorKey, builder: (BuildContext context, GoRouterState state, Widget child) { int initIndex = 0; if (state.fullPath!.startsWith('/chat')) { initIndex = 0; } else if (state.fullPath!.startsWith('/contact')) { initIndex = 1; } else if (state.fullPath!.startsWith('/more')) { initIndex = 2; } return HomeScreenWithNavBar(initIndex: initIndex, child: child); }, routes: [ chatRouter, contactRouter, moreRouter, ], ), ], );