post_enrollment_app/lib/pages/config/gorouter.dart
2026-04-08 09:11:24 +05:30

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(),
// // ),
// // ],
// // );
// // }
// // }
// //