123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- import 'package:auto_route/auto_route.dart';
- import 'package:flutter/foundation.dart';
- import 'package:flutter_native_splash/flutter_native_splash.dart';
- import 'package:telnow_mobile_new/app_router.gr.dart';
- import 'package:telnow_mobile_new/src/api/api_auth_provider.dart';
- import 'package:telnow_mobile_new/src/injector/injector.dart';
- import 'package:telnow_mobile_new/src/storage/sharedpreferences/shared_preferences_manager.dart';
- import 'package:telnow_mobile_new/src/utils/U.dart';
- @AutoRouterConfig(replaceInRouteName: 'Screen|Page,Route')
- class AppRouter extends RootStackRouter {
- final SharedPreferencesManager _sharedPreferencesManager = locator<SharedPreferencesManager>();
- @override
- RouteType get defaultRouteType => RouteType.material(); //.cupertino, .adaptive ..etc
- @override
- List<AutoRoute> get routes => [
- AutoRoute(path: '/qr', page: NewQrRoute.page, guards: qrGuards, initial: true),
- AutoRoute(path: '/change-code/:pid', page: ChangeCodeRoute.page),
- AutoRoute(
- path: '/app/:pid', page: HomeGuardRoute.page, guards: appGuards,
- children: [
- AutoRoute(path: 'login', page: LoginRoute.page, guards: loginGuards, initial: true),
- AutoRoute(path: 'loginme', page: AutoLoginRoute.page, guards: loginGuards),
- AutoRoute(path: 'license', page: ErrorRoute.page),
- AutoRoute(
- path: 'menu', page: AppResponsive.page, guards: menuGuards,
- children: [
- AutoRoute(path: 'home', page: HomeResponsive.page, initial: true),
- AutoRoute(path: 'history', page: HistoryResponsive.page),
- AutoRoute(path: 'account', page: AccountResponsive.page),
- ]
- ),
- ]
- ),
- ];
- List<AutoRouteGuard> get qrGuards => [
- AutoRouteGuard.simple((resolver, router) async{
- Parameters param = resolver.route.queryParams;
- router.removeLast();
- if (!kIsWeb && U.getAccessCode() != null && param.isEmpty) {
- router.pushNamed('/app/${Uri.encodeComponent(U.getAccessCode()!)}');
- } else{
- FlutterNativeSplash.remove();
- resolver.next();
- }
- })
- ];
- List<AutoRouteGuard> get appGuards => [
- AutoRouteGuard.simple((resolver, router) async{
- RouteMatch<dynamic> vRedirector = resolver.route;
- var codeFromUrl = '';
- String? rawPid = '';
- var pid;
- bool stb = false;
- rawPid = vRedirector.pathParams.getString('pid');
- try {
- pid = Uri.decodeComponent(rawPid);
- } catch (e) {
- print("err : $e");
- stb = true;
- }
- if (pid == null || stb) {
- router.pushNamed("/qr?new=true");
- }
- if(vRedirector.fragment != null && vRedirector.fragment != '' && U.getAccessCode() != null){
- await _sharedPreferencesManager.clearKey(SharedPreferencesManager.keyBaseUrl);
- await _sharedPreferencesManager.clearKey(SharedPreferencesManager.keyAccessCode);
- await _sharedPreferencesManager.clearKey(SharedPreferencesManager.keySerialCode);
- await _sharedPreferencesManager.clearKey(SharedPreferencesManager.version);
- }
- if (U.getAccessCode() == null) {
- await _sharedPreferencesManager.putString(SharedPreferencesManager.keyBaseUrl, U.rewriteUrl(vRedirector.fragment));
- await _sharedPreferencesManager.putString(SharedPreferencesManager.keyAccessCode, pid);
- await _sharedPreferencesManager.putString(SharedPreferencesManager.keySerialCode, 'P-$pid}');
- try {
- var ver = await U.reloadLicense();
- await _sharedPreferencesManager.putInt(SharedPreferencesManager.version, ver['version']);
- rawPid = Uri.encodeComponent(pid);
- } catch (error) {
- await _sharedPreferencesManager.clearKey(SharedPreferencesManager.keyBaseUrl);
- await _sharedPreferencesManager.clearKey(SharedPreferencesManager.keyAccessCode);
- await _sharedPreferencesManager.clearKey(SharedPreferencesManager.keySerialCode);
- await _sharedPreferencesManager.clearKey(SharedPreferencesManager.version);
- router.pushNamed("/qr?new=true");
- }
- } else if(_isNewAccessCode(rawPid, U.getAccessCode()!)){
- router.pushNamed("/change-code/$rawPid");
- return;
- } else {
- if (_sharedPreferencesManager.getInt(SharedPreferencesManager.version) == null){
- try {
- var ver = await U.reloadLicense();
- await _sharedPreferencesManager.putInt(SharedPreferencesManager.version, ver['version']);
- } catch (e) {
- print('error sini 2: ${e.toString()}');
- await _sharedPreferencesManager.clearKey(SharedPreferencesManager.keyBaseUrl);
- await _sharedPreferencesManager.clearKey(SharedPreferencesManager.keyAccessCode);
- await _sharedPreferencesManager.clearKey(SharedPreferencesManager.keySerialCode);
- await _sharedPreferencesManager.clearKey(SharedPreferencesManager.version);
- router.pushNamed("/qr?new=true");
- }
- }
- }
- FlutterNativeSplash.remove();
- resolver.next();
- })
- ];
- List<AutoRouteGuard> get loginGuards => [
- AutoRouteGuard.simple((resolver, router) async{
- router.removeLast();
- if (!_isValidVersion()) {
- router.pushNamed('/app/${Uri.encodeComponent(U.getAccessCode()!)}/license');
- } else if (_isLoggedIn()) {
- router.pushNamed('/app/${Uri.encodeComponent(U.getAccessCode()!)}/menu');
- } else{
- resolver.next();
- }
- })
- ];
- List<AutoRouteGuard> get menuGuards => [
- AutoRouteGuard.simple((resolver, router) async{
- router.removeLast();
- if (!_isValidVersion()) {
- router.pushNamed('/app/${Uri.encodeComponent(U.getAccessCode()!)}/license');
- } else if (!_isLoggedIn()) {
- router.pushNamed('/app/${Uri.encodeComponent(U.getAccessCode()!)}/login');
- } else{
- resolver.next();
- }
- })
- ];
- bool _isLoggedIn() {
- bool? isTokenExist = _sharedPreferencesManager.isKeyExists(SharedPreferencesManager.keyAccessToken);
- String? token = _sharedPreferencesManager.getString(SharedPreferencesManager.keyAccessToken);
- bool? isLoggedIn = _sharedPreferencesManager.isKeyExists(SharedPreferencesManager.keyIsLogin);
- return isLoggedIn! && isTokenExist! && token != null;
- }
- bool _isValidVersion() {
- return ApiAuthProvider().currentVersion == U.getVersion();
- }
- bool _isNewAccessCode(String pid, String savedPid) {
- try{
- return U.decodeBase64Url(pid) == U.decodeBase64Url(Uri.decodeComponent(savedPid)) ? false : true;
- } catch (e){
- return false;
- }
- }
- }
|