171 lines
5.7 KiB
Dart
171 lines
5.7 KiB
Dart
import 'package:get/get.dart';
|
|
import 'package:flutter/material.dart';
|
|
import '../../features/auth/views/phone_input_view.dart';
|
|
import '../../features/auth/views/otp_verify_view.dart';
|
|
import '../../features/auth/views/biometric_setup_view.dart';
|
|
import '../../features/auth/views/biometric_auth_view.dart';
|
|
import '../../features/main_shell/controllers/main_shell_controller.dart';
|
|
import '../../features/main_shell/views/main_shell_view.dart';
|
|
import '../../features/dashboard/controllers/dashboard_controller.dart';
|
|
import '../../features/scanner/views/scanner_view.dart';
|
|
import '../../features/scanner/controllers/scanner_controller.dart';
|
|
import '../../features/invoices/controllers/invoices_controller.dart';
|
|
import '../../features/settings/controllers/settings_controller.dart';
|
|
import '../../features/subscription/views/subscription_view.dart';
|
|
import '../../features/subscription/views/payment_receipt_view.dart';
|
|
import '../../features/invoices/views/invoice_detail_view.dart';
|
|
import '../../features/onboarding/views/onboarding_view.dart';
|
|
import '../../features/onboarding/controllers/onboarding_controller.dart';
|
|
import '../../core/storage/secure_storage.dart';
|
|
import '../../features/companies/views/companies_management_view.dart';
|
|
import '../../features/companies/views/company_stats_view.dart';
|
|
import '../../features/users/views/users_management_view.dart';
|
|
import '../../features/tenants/views/tenants_management_view.dart';
|
|
import '../../features/reports/views/tax_report_view.dart';
|
|
import '../../features/audit/views/audit_log_view.dart';
|
|
import '../../features/referral/views/referral_view.dart';
|
|
|
|
part 'app_routes.dart';
|
|
|
|
class AppPages {
|
|
// ignore: constant_identifier_names
|
|
static const INITIAL = AppRoutes.SPLASH;
|
|
|
|
static final routes = [
|
|
GetPage(
|
|
name: AppRoutes.SPLASH,
|
|
page: () {
|
|
// Check login state after a short delay
|
|
Future.delayed(const Duration(seconds: 2), () async {
|
|
final token = await SecureStorage().getToken();
|
|
if (token != null && token.isNotEmpty) {
|
|
// User is already logged in, request Biometric unlock before dashboard
|
|
Get.offAllNamed(AppRoutes.BIOMETRIC_AUTH);
|
|
} else {
|
|
// Check if user has seen onboarding
|
|
final hasSeenOnboarding =
|
|
await SecureStorage().read('has_seen_onboarding');
|
|
if (hasSeenOnboarding == 'true') {
|
|
Get.offAllNamed(AppRoutes.PHONE_INPUT);
|
|
} else {
|
|
Get.offAllNamed(AppRoutes.ONBOARDING);
|
|
}
|
|
}
|
|
});
|
|
return Scaffold(
|
|
body: Center(
|
|
child: Column(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: [
|
|
Image.asset(
|
|
'assets/images/logo.jpg',
|
|
height: 120,
|
|
errorBuilder: (context, error, stackTrace) => const Icon(
|
|
Icons.security,
|
|
size: 100,
|
|
color: Color(0xFF0F4C81),
|
|
),
|
|
),
|
|
const SizedBox(height: 24),
|
|
const CircularProgressIndicator(),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
},
|
|
),
|
|
GetPage(
|
|
name: AppRoutes.PHONE_INPUT,
|
|
page: () => PhoneInputView(),
|
|
),
|
|
GetPage(
|
|
name: AppRoutes.OTP_VERIFY,
|
|
page: () => OtpVerifyView(),
|
|
),
|
|
GetPage(
|
|
name: AppRoutes.BIOMETRIC_SETUP,
|
|
page: () => BiometricSetupView(),
|
|
),
|
|
GetPage(
|
|
name: AppRoutes.BIOMETRIC_AUTH,
|
|
page: () => const BiometricAuthView(),
|
|
),
|
|
// NEW: Main Shell (replaces standalone dashboard route as the home)
|
|
GetPage(
|
|
name: AppRoutes.MAIN,
|
|
page: () => const MainShellView(),
|
|
binding: BindingsBuilder(() {
|
|
Get.put(MainShellController());
|
|
Get.put(DashboardController());
|
|
Get.put(InvoicesController());
|
|
Get.put(SettingsController());
|
|
}),
|
|
),
|
|
// Keep dashboard as standalone for backward compatibility
|
|
GetPage(
|
|
name: AppRoutes.DASHBOARD,
|
|
page: () => const MainShellView(), // Now redirects to MainShell
|
|
binding: BindingsBuilder(() {
|
|
Get.put(MainShellController());
|
|
Get.put(DashboardController());
|
|
Get.put(InvoicesController());
|
|
Get.put(SettingsController());
|
|
}),
|
|
),
|
|
GetPage(
|
|
name: AppRoutes.SCANNER,
|
|
page: () => const ScannerView(),
|
|
binding: BindingsBuilder(() {
|
|
Get.put(ScannerController());
|
|
}),
|
|
),
|
|
GetPage(
|
|
name: AppRoutes.SUBSCRIPTION,
|
|
page: () => const SubscriptionView(),
|
|
),
|
|
GetPage(
|
|
name: AppRoutes.PAYMENT_RECEIPT,
|
|
page: () => const PaymentReceiptView(),
|
|
),
|
|
GetPage(
|
|
name: AppRoutes.INVOICE_DETAIL,
|
|
page: () => const InvoiceDetailView(),
|
|
),
|
|
GetPage(
|
|
name: AppRoutes.ONBOARDING,
|
|
page: () => const OnboardingView(),
|
|
binding: BindingsBuilder(() {
|
|
Get.put(OnboardingController());
|
|
}),
|
|
),
|
|
GetPage(
|
|
name: AppRoutes.COMPANIES_MANAGEMENT,
|
|
page: () => const CompaniesManagementView(),
|
|
),
|
|
GetPage(
|
|
name: AppRoutes.COMPANY_STATS,
|
|
page: () => const CompanyStatsView(),
|
|
),
|
|
GetPage(
|
|
name: AppRoutes.TENANTS_MANAGEMENT,
|
|
page: () => const TenantsManagementView(),
|
|
),
|
|
GetPage(
|
|
name: AppRoutes.USERS_MANAGEMENT,
|
|
page: () => const UsersManagementView(),
|
|
),
|
|
GetPage(
|
|
name: AppRoutes.TAX_REPORT,
|
|
page: () => const TaxReportView(),
|
|
),
|
|
GetPage(
|
|
name: AppRoutes.AUDIT_LOG,
|
|
page: () => const AuditLogView(),
|
|
),
|
|
GetPage(
|
|
name: AppRoutes.REFERRAL,
|
|
page: () => const ReferralView(),
|
|
),
|
|
];
|
|
}
|