423 lines
14 KiB
Dart
Executable File
423 lines
14 KiB
Dart
Executable File
// import 'package:flutter/foundation.dart';
|
|
// import 'package:flutter/material.dart';
|
|
// import 'package:go_router/go_router.dart';
|
|
// import 'package:shared_preferences/shared_preferences.dart';
|
|
// import '../../main.dart';
|
|
// import '../email_verify.dart';
|
|
// import '../enrollment/addons.dart';
|
|
// import '../enrollment/empDetails.dart';
|
|
// import '../enrollment/empReview.dart';
|
|
// import '../login.dart';
|
|
// import '../postEnrollment/chatbot.dart';
|
|
// import '../postEnrollment/claimprocess.dart';
|
|
// import '../postEnrollment/claims.dart';
|
|
// import '../postEnrollment/generalexclusionsdeductibles.dart';
|
|
// import '../postEnrollment/help.dart';
|
|
// import '../postEnrollment/home.dart';
|
|
// import '../postEnrollment/planclaimsform.dart';
|
|
// import '../postEnrollment/policies.dart';
|
|
// import '../postEnrollment/privacypolicy.dart';
|
|
// import '../postEnrollment/profile.dart';
|
|
// import '../postEnrollment/raisedTicketList.dart';
|
|
// import '../service/SessionManager.dart';
|
|
// import 'SessionNotifier.dart';
|
|
// import 'splashScreen.dart';
|
|
// import '../postEnrollment/termsofuse.dart';
|
|
// import '../postEnrollment/tickets.dart';
|
|
// import '../postEnrollment/tickettracklist.dart';
|
|
// import '../postEnrollment/wellness.dart';
|
|
// import '../service/TokenService.dart';
|
|
// import '../session/SetPinBiometric.dart';
|
|
// import '../session/changePin.dart';
|
|
// import '../session/settingUpPinAndBiometric.dart';
|
|
// import '../verify.dart';
|
|
//
|
|
// import 'package:flutter/foundation.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:go_router/go_router.dart';
|
|
import 'package:flutter/foundation.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
import '../../main.dart';
|
|
import '../email_verify.dart';
|
|
import '../enrollment/addons.dart';
|
|
import '../enrollment/empDetails.dart';
|
|
import '../enrollment/empReview.dart';
|
|
import '../login.dart';
|
|
import '../postEnrollment/claimprocess.dart';
|
|
import '../postEnrollment/claims.dart';
|
|
import '../postEnrollment/faqs.dart';
|
|
import '../postEnrollment/generalexclusionsdeductibles.dart';
|
|
import '../postEnrollment/help.dart';
|
|
import '../postEnrollment/home.dart';
|
|
import '../postEnrollment/planclaimsform.dart';
|
|
import '../postEnrollment/policies.dart';
|
|
import '../postEnrollment/privacypolicy.dart';
|
|
import '../postEnrollment/profile.dart';
|
|
import '../postEnrollment/raisedTicketList.dart';
|
|
import '../postEnrollment/retailClaimForm.dart';
|
|
import '../postEnrollment/termsofuse.dart';
|
|
import '../postEnrollment/tickets.dart';
|
|
import '../postEnrollment/tickettracklist.dart';
|
|
import '../postEnrollment/wellness.dart';
|
|
import '../postEnrollment/wellness_web_view.dart';
|
|
import '../service/SessionManager.dart';
|
|
import '../service/TokenService.dart';
|
|
import '../session/SetPinBiometric.dart';
|
|
import '../session/changePin.dart';
|
|
import '../session/settingUpPinAndBiometric.dart';
|
|
import '../verify.dart';
|
|
|
|
class AppRouter {
|
|
// static final SessionNotifier sessionNotifier = SessionNotifier();
|
|
static GoRouter createRouter() {
|
|
return GoRouter(
|
|
// On web, respect the browser URL if present; otherwise fall back to login.
|
|
initialLocation: kIsWeb ? '/login' : '/splash',
|
|
debugLogDiagnostics: true,
|
|
redirect: (BuildContext context, GoRouterState state) async {
|
|
const allowedWithoutToken = [
|
|
'/login',
|
|
'/verify',
|
|
'/mailVerify',
|
|
'/pinPage',
|
|
'/splash',
|
|
];
|
|
|
|
// Always work with the matched path (ignores query params).
|
|
final location = state.matchedLocation;
|
|
final hasToken = await TokenService.hasValidToken();
|
|
|
|
final isGuestRoute = allowedWithoutToken.contains(location);
|
|
|
|
if (hasToken && isGuestRoute) {
|
|
// If a logged-in user tries to access a guest route, redirect to home
|
|
return '/home';
|
|
}
|
|
|
|
if (!hasToken && !isGuestRoute) {
|
|
// If a guest user tries to access a protected route, redirect to login
|
|
return '/login';
|
|
}
|
|
|
|
return null; // No redirect needed
|
|
},
|
|
routes: [
|
|
if (!kIsWeb)
|
|
GoRoute(
|
|
path: '/splash',
|
|
builder: (context, state) => const SplashScreen(),
|
|
),
|
|
GoRoute(
|
|
path: '/login',
|
|
builder: (context, state) => const login(),
|
|
),
|
|
GoRoute(
|
|
path: '/mailVerify',
|
|
builder: (context, state) {
|
|
final data = state.extra as Map<String, dynamic>;
|
|
final type = data['type'] as String;
|
|
final value = data['value'] as String;
|
|
return MyEmailVerify(type: type, value: value);
|
|
},
|
|
),
|
|
// Legacy Firebase-phone OTP route is commented out in verify.dart,
|
|
// so we do not expose /verify from GoRouter anymore.
|
|
GoRoute(
|
|
path: '/home',
|
|
builder: (context, state) => Home(),
|
|
),
|
|
GoRoute(
|
|
path: '/pinSettingPage',
|
|
builder: (context, state) => pinSettingPage(),
|
|
),
|
|
GoRoute(
|
|
path: '/pinPage',
|
|
builder: (context, state) => pinPage(),
|
|
),
|
|
GoRoute(
|
|
path: '/changePin',
|
|
builder: (context, state) => changePin(),
|
|
),
|
|
GoRoute(
|
|
path: '/claimprocess',
|
|
builder: (context, state) => claimprocess(),
|
|
),
|
|
GoRoute(
|
|
path: '/policies',
|
|
builder: (context, state) {
|
|
final arguments =
|
|
state.extra as Map<String, dynamic>?; // optional args
|
|
return policies(arguments: arguments);
|
|
},
|
|
),
|
|
GoRoute(
|
|
path: '/claims',
|
|
builder: (context, state) {
|
|
final int tabIndex = state.extra as int? ?? 0;
|
|
return claims(initialTab: tabIndex);
|
|
},
|
|
),
|
|
GoRoute(
|
|
path: '/profile',
|
|
builder: (context, state) => profile(),
|
|
),
|
|
GoRoute(
|
|
path: '/help',
|
|
builder: (context, state) => help(),
|
|
),
|
|
GoRoute(
|
|
path: '/wellness',
|
|
builder: (context, state) => wellness(),
|
|
),
|
|
GoRoute(
|
|
path: '/privacypolicy',
|
|
builder: (context, state) => privacypolicy(),
|
|
),
|
|
GoRoute(
|
|
path: '/termsofuse',
|
|
builder: (context, state) => termsofuse(),
|
|
),
|
|
GoRoute(
|
|
path: '/generalExclusionsDeductibles',
|
|
builder: (context, state) => generalExclusionsDeductibles(),
|
|
),
|
|
GoRoute(
|
|
path: '/planclaimsform',
|
|
builder: (context, state) {
|
|
final details = state.extra as Map<String, dynamic>?;
|
|
return planclaimsform(details: details);
|
|
},
|
|
),
|
|
GoRoute(
|
|
path: '/retailClaimForm',
|
|
builder: (context, state) {
|
|
final details = state.extra as Map<String, dynamic>?;
|
|
return retailClaimForm(details: details);
|
|
},
|
|
),
|
|
GoRoute(
|
|
path: '/raisedTicketHistory',
|
|
builder: (context, state) => raisedTicketHistory(),
|
|
),
|
|
GoRoute(
|
|
path: '/tickettracklist/:ticketID',
|
|
builder: (context, state) {
|
|
final ticketID = state.pathParameters['ticketID']!;
|
|
return tickettracklist(ticketID: ticketID);
|
|
},
|
|
),
|
|
GoRoute(
|
|
path: '/empDetails',
|
|
builder: (context, state) => empDetails(),
|
|
),
|
|
GoRoute(
|
|
path: '/faqs',
|
|
builder: (context, state) => faqs(),
|
|
),
|
|
GoRoute(
|
|
path: '/addOnsDetails',
|
|
builder: (context, state) => addOnsDetails(),
|
|
),
|
|
GoRoute(
|
|
path: '/empReviewDetails',
|
|
builder: (context, state) => empReviewDetails(),
|
|
),
|
|
GoRoute(
|
|
path: '/tickets',
|
|
builder: (context, state) => tickets(),
|
|
),
|
|
// GoRoute(
|
|
// path: '/chatbot',
|
|
// builder: (context, state) => chatbot(),
|
|
// ),
|
|
GoRoute(
|
|
path: '/wellnessWebView',
|
|
builder: (context, state) {
|
|
final url = state.extra as String;
|
|
return WellnessWebView(url: url);
|
|
},
|
|
),
|
|
],
|
|
);
|
|
}
|
|
}
|
|
//
|
|
// //
|
|
// // class AppRouter {
|
|
// // static GoRouter createRouter() {
|
|
// // return GoRouter(
|
|
// // initialLocation: kIsWeb ? null : '/splash', // 👈 null means use browser URL
|
|
// // debugLogDiagnostics: true,
|
|
// // redirect: (context, state) async {
|
|
// // const allowedWithoutToken = [
|
|
// // '/splash',
|
|
// // '/pinPage',
|
|
// // '/mailVerify',
|
|
// // '/verify',
|
|
// // '/login',
|
|
// // ];
|
|
// //
|
|
// // final location = state.matchedLocation;
|
|
// //
|
|
// // // ✅ allow these without token
|
|
// // if (allowedWithoutToken.contains(location)) {
|
|
// // return null;
|
|
// // }
|
|
// //
|
|
// // // ✅ Restore session on refresh (web & mobile)
|
|
// // await SessionManager().restoreSession();
|
|
// // final hasToken = await TokenService.hasValidToken();
|
|
// //
|
|
// // if (!hasToken) {
|
|
// // await SessionManager().clear();
|
|
// // return '/login';
|
|
// // }
|
|
// //
|
|
// // // ✅ Mobile pin logic
|
|
// // if (!kIsWeb) {
|
|
// // final prefs = await SharedPreferences.getInstance();
|
|
// // if (prefs.containsKey('is_mpin_skipped')) {
|
|
// // final isMpinSkipped = prefs.getString('is_mpin_skipped');
|
|
// // if (isMpinSkipped == '0' && location != '/pinPage') {
|
|
// // return '/pinPage';
|
|
// // }
|
|
// // }
|
|
// // }
|
|
// //
|
|
// // return null; // stay on same page
|
|
// // },
|
|
// //
|
|
// // routes: [
|
|
// // if (!kIsWeb)
|
|
// // GoRoute(
|
|
// // path: '/splash',
|
|
// // builder: (context, state) => SplashScreen(),
|
|
// // ),
|
|
// // GoRoute(
|
|
// // path: '/login',
|
|
// // builder: (context, state) => login(),
|
|
// // ),
|
|
// // GoRoute(
|
|
// // path: '/mailVerify',
|
|
// // builder: (context, state) {
|
|
// // final email = state.extra as String;
|
|
// // return MyEmailVerify(email: email);
|
|
// // },
|
|
// // ),
|
|
// // GoRoute(
|
|
// // path: '/verify',
|
|
// // builder: (context, state) {
|
|
// // final args = state.extra as Map<String, dynamic>;
|
|
// // return MyVerify(
|
|
// // verificationId: args['verificationId'] as String,
|
|
// // mobileNumber: args['mobileNumber'] as String,
|
|
// // resendToken: args['resendToken'],
|
|
// // onResendCode: args['onResendCode'] as Function(String, int?),
|
|
// // );
|
|
// // },
|
|
// // ),
|
|
// // GoRoute(
|
|
// // path: '/mailVerify',
|
|
// // builder: (context, state) => MyVerify(
|
|
// // verificationId: '',
|
|
// // mobileNumber: '',
|
|
// // resendToken: null,
|
|
// // onResendCode: (String, int) {},
|
|
// // ),
|
|
// // ),
|
|
// // GoRoute(
|
|
// // path: '/home',
|
|
// // builder: (context, state) => Home(),
|
|
// // ),
|
|
// // GoRoute(
|
|
// // path: '/pinSettingPage',
|
|
// // builder: (context, state) => pinSettingPage(),
|
|
// // ),
|
|
// // GoRoute(
|
|
// // path: '/pinPage',
|
|
// // builder: (context, state) => pinPage(),
|
|
// // ),
|
|
// // GoRoute(
|
|
// // path: '/changePin',
|
|
// // builder: (context, state) => changePin(),
|
|
// // ),
|
|
// // GoRoute(
|
|
// // path: '/claimprocess',
|
|
// // builder: (context, state) => claimprocess(),
|
|
// // ),
|
|
// // GoRoute(
|
|
// // path: '/policies',
|
|
// // builder: (context, state) => policies(),
|
|
// // ),
|
|
// // GoRoute(
|
|
// // path: '/claims',
|
|
// // builder: (context, state) => claims(),
|
|
// // ),
|
|
// // GoRoute(
|
|
// // path: '/profile',
|
|
// // builder: (context, state) => profile(),
|
|
// // ),
|
|
// // GoRoute(
|
|
// // path: '/help',
|
|
// // builder: (context, state) => help(),
|
|
// // ),
|
|
// // GoRoute(
|
|
// // path: '/wellness',
|
|
// // builder: (context, state) => wellness(),
|
|
// // ),
|
|
// // GoRoute(
|
|
// // path: '/planclaimsform',
|
|
// // builder: (context, state) => planclaimsform(),
|
|
// // ),
|
|
// // GoRoute(
|
|
// // path: '/privacypolicy',
|
|
// // builder: (context, state) => privacypolicy(),
|
|
// // ),
|
|
// // GoRoute(
|
|
// // path: '/termsofuse',
|
|
// // builder: (context, state) => termsofuse(),
|
|
// // ),
|
|
// // GoRoute(
|
|
// // path: '/generalExclusionsDeductibles',
|
|
// // builder: (context, state) => generalExclusionsDeductibles(),
|
|
// // ),
|
|
// // GoRoute(
|
|
// // path: '/chatbot()',
|
|
// // builder: (context, state) => chatbot(),
|
|
// // ),
|
|
// // GoRoute(
|
|
// // path: '/chatbot()',
|
|
// // builder: (context, state) => chatbot(),
|
|
// // ),
|
|
// // GoRoute(
|
|
// // path: '/tickettracklist',
|
|
// // builder: (context, state) => tickettracklist(
|
|
// // ticketID: "",
|
|
// // ),
|
|
// // ),
|
|
// // GoRoute(
|
|
// // path: '/empDetails()',
|
|
// // builder: (context, state) => empDetails(),
|
|
// // ),
|
|
// // GoRoute(
|
|
// // path: '/addOnsDetails()',
|
|
// // builder: (context, state) => addOnsDetails(),
|
|
// // ),
|
|
// // GoRoute(
|
|
// // path: '/empReviewDetails()',
|
|
// // builder: (context, state) => empReviewDetails(),
|
|
// // ),
|
|
// // GoRoute(
|
|
// // path: '/tickets()',
|
|
// // builder: (context, state) => tickets(),
|
|
// // ),
|
|
// // GoRoute(
|
|
// // path: '/raisedTicketHistory()',
|
|
// // builder: (context, state) => raisedTicketHistory(),
|
|
// // ),
|
|
// // ],
|
|
// // );
|
|
// // }
|
|
// // }
|
|
// //
|