250 lines
8.6 KiB
Dart
250 lines
8.6 KiB
Dart
import 'dart:convert';
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:frontend/Screens/authentication/login/login_page.dart';
|
|
import 'package:frontend/Screens/authentication/loginPage1.dart';
|
|
import 'package:frontend/Screens/dashboard/home_page.dart';
|
|
import 'package:frontend/Screens/myTemplates/templatesList.dart';
|
|
import 'package:frontend/Screens/organization/orgSetup.dart';
|
|
import 'package:frontend/Screens/organization/org_List.dart';
|
|
import 'package:frontend/Screens/plans/create_plans.dart';
|
|
import 'package:frontend/Screens/plans/list_plans.dart';
|
|
import 'package:frontend/Screens/policy/policy.dart';
|
|
import 'package:frontend/Screens/policy/policy_list.dart';
|
|
import 'package:frontend/Screens/userManagement/create_traveller_agent/createTravelAgent.dart';
|
|
import 'package:frontend/Screens/userManagement/create_user/create_user1.dart';
|
|
import 'package:frontend/Screens/userManagement/user_List.dart';
|
|
import 'package:frontend/routes/organizationSetting.dart';
|
|
import 'package:go_router/go_router.dart';
|
|
import 'package:responsive_builder/responsive_builder.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
|
|
import '../Screens/allTrips/list_all_plans.dart';
|
|
import '../Screens/allTrips/travel_agent_list.dart';
|
|
import '../Screens/approvals/approval_list.dart';
|
|
import '../Screens/group/group.dart';
|
|
import '../Screens/group/groupList.dart';
|
|
import '../Screens/myTemplates/template.dart';
|
|
import '../Screens/myTemplates/templateForex.dart';
|
|
import '../Screens/myTemplates/templateTest.dart';
|
|
import '../Screens/perdiem_amount/forex_list.dart';
|
|
import '../Screens/userManagement/create_user/create_user.dart';
|
|
import '../Screens/department/department_list.dart';
|
|
import '../Screens/purposeOfTravel/purpose_of_travel_list.dart';
|
|
import '../Screens/costCenter/costCenter_list.dart';
|
|
import '../Screens/dashboard/status_dashboard.dart';
|
|
import '../Screens/hotels/hotels_list.dart';
|
|
import '../Screens/traveller/travellerList.dart';
|
|
import '../Screens/reports/reportList.dart';
|
|
import '../Screens/reports/advancePurchase.dart';
|
|
import '../Screens/reports/servicesAnalysis.dart';
|
|
import '../Screens/reports/misAir.dart';
|
|
import '../Screens/reports/misHotel.dart';
|
|
import '../Screens/reports/misForex.dart';
|
|
import '../Screens/reports/guestHouse.dart';
|
|
import '../Screens/userManagement/create_traveller_agent/listTravelAgent.dart';
|
|
|
|
import '../utils/auth_utils.dart';
|
|
import 'mainLayout.dart';
|
|
|
|
// class AuthState extends ChangeNotifier {
|
|
// String? role;
|
|
//
|
|
// Future<void> loadRole() async {
|
|
// final prefs = await SharedPreferences.getInstance();
|
|
// final userData = prefs.getString('user_data');
|
|
// if (userData != null) {
|
|
// final decoded = jsonDecode(userData);
|
|
// role = decoded["role"];
|
|
// notifyListeners();
|
|
// }
|
|
// }
|
|
// }
|
|
//
|
|
// final authState = AuthState();
|
|
|
|
final GoRouter router = GoRouter(
|
|
// refreshListenable: authState,
|
|
routes: [
|
|
// Public routes without app bar
|
|
GoRoute(path: '/', builder: (context, state) => LoginPage()),
|
|
|
|
// Routes that share the app bar and layout (nested routes)
|
|
ShellRoute(
|
|
builder: (context, state, child) {
|
|
// Use ResponsiveBuilder here to detect isDesktop and pass to MainLayout
|
|
return child;
|
|
// return ResponsiveBuilder(
|
|
// builder: (context, sizingInfo) {
|
|
// bool isDesktop =
|
|
// sizingInfo.deviceScreenType == DeviceScreenType.desktop;
|
|
//
|
|
// return MainLayout(isDesktop: isDesktop, child: child);
|
|
// },
|
|
// );
|
|
},
|
|
routes: [
|
|
// GoRoute(path: '/home', builder: (context, state) => HomePage()),
|
|
GoRoute(
|
|
path: '/listAllPlan',
|
|
builder: (context, state) => ListAllPlans(),
|
|
),
|
|
GoRoute(
|
|
path: '/listTravelAgentPlan',
|
|
builder: (context, state) => TravelAgentListPlans(),
|
|
),
|
|
GoRoute(path: '/listPlan', builder: (context, state) => ListPlans()),
|
|
GoRoute(path: '/createPlan', builder: (context, state) => CreatePlan()),
|
|
GoRoute(
|
|
path: '/allTrips/trips',
|
|
builder: (context, state) => CreatePlan(),
|
|
),
|
|
GoRoute(
|
|
path: '/approver/plans',
|
|
builder: (context, state) => CreatePlan(),
|
|
),
|
|
GoRoute(
|
|
path: '/travelagent/trips',
|
|
builder: (context, state) => CreatePlan(),
|
|
),
|
|
GoRoute(
|
|
path: '/listUser',
|
|
builder: (context, state) => UserListScreen(),
|
|
),
|
|
GoRoute(
|
|
path: '/CreateUserDetails',
|
|
builder: (context, state) => CreateUserFormDetials(),
|
|
),
|
|
GoRoute(
|
|
path: '/Policy',
|
|
pageBuilder:
|
|
(context, state) => MaterialPage(child: Policy.fromState(state)),
|
|
),
|
|
GoRoute(path: '/PolicyList', builder: (context, state) => PolicyList()),
|
|
GoRoute(
|
|
path: '/OrganizationSetup',
|
|
builder: (context, state) => OrgSetUp(),
|
|
),
|
|
GoRoute(
|
|
path: '/OrganizationSettings',
|
|
builder: (context, state) => OrganizationSetting(),
|
|
),
|
|
GoRoute(path: '/group', builder: (context, state) => GroupList()),
|
|
GoRoute(
|
|
path: '/getPerdiem',
|
|
builder: (context, state) => ForexDataList(),
|
|
),
|
|
GoRoute(
|
|
path: '/templateList',
|
|
builder: (context, state) => TemplatesList(),
|
|
),
|
|
GoRoute(
|
|
path: '/template',
|
|
pageBuilder:
|
|
(context, state) =>
|
|
MaterialPage(child: Template.fromState(state)),
|
|
),
|
|
GoRoute(
|
|
path: '/templateForex',
|
|
pageBuilder:
|
|
(context, state) =>
|
|
MaterialPage(child: TemplateForex.fromState(state)),
|
|
),
|
|
GoRoute(
|
|
path: '/approvallist',
|
|
builder: (context, state) => ApprovalList(),
|
|
),
|
|
GoRoute(
|
|
path: '/department',
|
|
builder: (context, state) => DepartmentList(),
|
|
),
|
|
GoRoute(
|
|
path: '/costcenter',
|
|
builder: (context, state) => CostCenterList(),
|
|
),
|
|
GoRoute(path: '/hotels', builder: (context, state) => HotelsDataList()),
|
|
GoRoute(
|
|
path: '/statusdashboard',
|
|
builder: (context, state) => StatusDashboard(),
|
|
),
|
|
GoRoute(
|
|
path: '/unauthorized',
|
|
builder:
|
|
(context, state) =>
|
|
const Scaffold(body: Center(child: Text("🚫 Access Denied"))),
|
|
),
|
|
|
|
GoRoute(
|
|
path: '/traveller',
|
|
builder: (context, state) => TravellerList(),
|
|
),
|
|
GoRoute(
|
|
path: '/CreateGroup',
|
|
pageBuilder:
|
|
(context, state) => MaterialPage(child: Group.fromState(state)),
|
|
),
|
|
GoRoute(path: '/report', builder: (context, state) => ReportList()),
|
|
GoRoute(
|
|
path: '/advancePurchase',
|
|
builder: (context, state) => AdvancePurchase(),
|
|
),
|
|
GoRoute(
|
|
path: '/misservicesAnalysis',
|
|
builder: (context, state) => ServicesAnalysis(),
|
|
),
|
|
GoRoute(path: '/misAirReport', builder: (context, state) => MISair()),
|
|
GoRoute(
|
|
path: '/misHotelReport',
|
|
builder: (context, state) => MIShotel(),
|
|
),
|
|
GoRoute(
|
|
path: '/misForexReport',
|
|
builder: (context, state) => MISforex(),
|
|
),
|
|
GoRoute(
|
|
path: '/guestHouseReport',
|
|
builder: (context, state) => GuestHouse(),
|
|
),
|
|
GoRoute(
|
|
path: '/listTravelAgent',
|
|
builder: (context, state) => TravelAgentListScreen(),
|
|
),
|
|
GoRoute(
|
|
path: '/CreateTravelAgent',
|
|
builder: (context, state) => CreateTravelAgentFormDetials(),
|
|
),
|
|
GoRoute(
|
|
path: '/PurposeOfTravel',
|
|
builder: (context, state) => PurposeOfTravelList(),
|
|
),
|
|
],
|
|
),
|
|
],
|
|
|
|
// redirect: (context, state) async {
|
|
// print('Check REDIRECTION');
|
|
// final apiStatus = ApiStatusCache.latestStatus;
|
|
//
|
|
// print('Check apiStatus - $apiStatus');
|
|
// return null;
|
|
// if (apiStatus == 404) return '/';
|
|
// return null;
|
|
|
|
// final role = await getRoleUser(); // async not allowed here per-route
|
|
// print('Check REDIRECTION');
|
|
// print('getRoleUser1 - $role');
|
|
// // for top-level GoRouter, you can use async redirect
|
|
// if (role == null) return '/'; // not logged in
|
|
// if (state.matchedLocation == '/statusdashboard' &&
|
|
// role != 'Org Admin' &&
|
|
// role != 'Travel Admin') {
|
|
// return '/unauthorized';
|
|
// }
|
|
// return null; //
|
|
// },
|
|
);
|
|
|
|
class ApiStatusCache {
|
|
static int? latestStatus;
|
|
}
|