From 83218166ba48c688cd4eb5c791408560ffb80ce7 Mon Sep 17 00:00:00 2001 From: "vaibhav.surve" Date: Sat, 11 Oct 2025 08:49:37 +0000 Subject: [PATCH] revert 7fb5a5217aee404e3c940f0729086460d9bd1c4c revert fixed initial loging --- lib/helpers/services/app_initializer.dart | 35 +++-- lib/main.dart | 11 +- lib/routes.dart | 156 ++++++++++------------ lib/view/my_app.dart | 41 +++--- 4 files changed, 114 insertions(+), 129 deletions(-) diff --git a/lib/helpers/services/app_initializer.dart b/lib/helpers/services/app_initializer.dart index 88b7f73..acd9b88 100644 --- a/lib/helpers/services/app_initializer.dart +++ b/lib/helpers/services/app_initializer.dart @@ -1,7 +1,6 @@ import 'package:flutter/services.dart'; import 'package:url_strategy/url_strategy.dart'; import 'package:firebase_core/firebase_core.dart'; - import 'package:marco/helpers/services/storage/local_storage.dart'; import 'package:marco/helpers/services/app_logger.dart'; import 'package:marco/helpers/services/auth_service.dart'; @@ -21,7 +20,7 @@ Future initializeApp() async { ]); await _setupDeviceInfo(); - await _handleAuthTokens(); + await _handleAuthTokens(); await _setupTheme(); await _setupFirebaseMessaging(); @@ -39,10 +38,23 @@ Future initializeApp() async { } } +Future _handleAuthTokens() async { + final refreshToken = await LocalStorage.getRefreshToken(); + if (refreshToken?.isNotEmpty ?? false) { + logSafe("🔁 Refresh token found. Attempting to refresh JWT..."); + final success = await AuthService.refreshToken(); + if (!success) { + logSafe("⚠️ Refresh token invalid or expired. User must login again."); + } + } else { + logSafe("❌ No refresh token found. Skipping refresh."); + } +} + Future _setupUI() async { setPathUrlStrategy(); await SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge); - logSafe("💡 UI setup completed."); + logSafe("💡 UI setup completed with default system behavior."); } Future _setupFirebase() async { @@ -65,19 +77,6 @@ Future _setupDeviceInfo() async { logSafe("📱 Device Info: ${deviceInfoService.deviceData}"); } -Future _handleAuthTokens() async { - final refreshToken = LocalStorage.getRefreshToken(); - if (refreshToken?.isNotEmpty ?? false) { - logSafe("🔁 Refresh token found. Attempting refresh..."); - final success = await AuthService.refreshToken(); - if (!success) { - logSafe("⚠️ Refresh failed — user must login again."); - } - } else { - logSafe("❌ No refresh token — skipping refresh."); - } -} - Future _setupTheme() async { await ThemeCustomizer.init(); logSafe("💡 Theme customizer initialized."); @@ -85,10 +84,10 @@ Future _setupTheme() async { Future _setupFirebaseMessaging() async { await FirebaseNotificationService().initialize(); - logSafe("💬 Firebase Messaging initialized."); + logSafe("💡 Firebase Messaging initialized."); } void _finalizeAppStyle() { AppStyle.init(); - logSafe("🎨 AppStyle initialized."); + logSafe("💡 AppStyle initialized."); } diff --git a/lib/main.dart b/lib/main.dart index 3bc0d24..77307e9 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -12,15 +12,20 @@ import 'package:marco/helpers/services/storage/local_storage.dart'; Future main() async { WidgetsFlutterBinding.ensureInitialized(); - // --- Logging setup --- + // Initialize logging system await initLogging(); - logSafe("🚀 App starting..."); + logSafe("App starting..."); + + // ✅ Ensure local storage is ready before enabling remote logging await LocalStorage.init(); + logSafe("💡 Local storage initialized (early init for logging)."); + + // Now safe to enable remote logging enableRemoteLogging(); try { await initializeApp(); - logSafe("✅ App fully initialized"); + logSafe("App initialized successfully."); runApp( ChangeNotifierProvider( diff --git a/lib/routes.dart b/lib/routes.dart index 6edb62a..37a166e 100644 --- a/lib/routes.dart +++ b/lib/routes.dart @@ -2,29 +2,26 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:marco/helpers/services/auth_service.dart'; import 'package:marco/helpers/services/tenant_service.dart'; -// Auth -import 'package:marco/view/auth/login_screen.dart'; -import 'package:marco/view/auth/login_option_screen.dart'; -import 'package:marco/view/auth/register_account_screen.dart'; import 'package:marco/view/auth/forgot_password_screen.dart'; +import 'package:marco/view/auth/login_screen.dart'; +import 'package:marco/view/auth/register_account_screen.dart'; import 'package:marco/view/auth/reset_password_screen.dart'; -import 'package:marco/view/auth/mpin_screen.dart'; -import 'package:marco/view/auth/mpin_auth_screen.dart'; -// Dashboard + Modules +import 'package:marco/view/error_pages/coming_soon_screen.dart'; +import 'package:marco/view/error_pages/error_404_screen.dart'; +import 'package:marco/view/error_pages/error_500_screen.dart'; import 'package:marco/view/dashboard/dashboard_screen.dart'; -import 'package:marco/view/tenant/tenant_selection_screen.dart'; import 'package:marco/view/Attendence/attendance_screen.dart'; import 'package:marco/view/taskPlanning/daily_task_planning.dart'; import 'package:marco/view/taskPlanning/daily_progress_report.dart'; import 'package:marco/view/employees/employees_screen.dart'; +import 'package:marco/view/auth/login_option_screen.dart'; +import 'package:marco/view/auth/mpin_screen.dart'; +import 'package:marco/view/auth/mpin_auth_screen.dart'; import 'package:marco/view/directory/directory_main_screen.dart'; import 'package:marco/view/expense/expense_screen.dart'; import 'package:marco/view/document/user_document_screen.dart'; -// Error -import 'package:marco/view/error_pages/coming_soon_screen.dart'; -import 'package:marco/view/error_pages/error_404_screen.dart'; -import 'package:marco/view/error_pages/error_500_screen.dart'; -/// Middleware to enforce authentication and tenant selection +import 'package:marco/view/tenant/tenant_selection_screen.dart'; + class AuthMiddleware extends GetMiddleware { @override RouteSettings? redirect(String? route) { @@ -41,99 +38,88 @@ class AuthMiddleware extends GetMiddleware { } } -/// Returns the list of all app routes -List getPageRoute() { - final List routes = [ - // ========== AUTH ROUTES ========== - GetPage(name: '/auth/login', page: () => LoginScreen()), - GetPage(name: '/auth/login-option', page: () => LoginOptionScreen()), - GetPage(name: '/auth/register_account', page: () => const RegisterAccountScreen()), - GetPage(name: '/auth/forgot_password', page: () => ForgotPasswordScreen()), - GetPage(name: '/auth/reset_password', page: () => const ResetPasswordScreen()), - GetPage(name: '/auth/mpin', page: () => MPINScreen()), - GetPage(name: '/auth/mpin-auth', page: () => MPINAuthScreen()), - - // ========== MAIN DASHBOARD ROUTES ========== +getPageRoute() { + var routes = [ GetPage( - name: '/', - page: () => DashboardScreen(), - middlewares: [AuthMiddleware()], - ), + name: '/', + page: () => DashboardScreen(), + middlewares: [AuthMiddleware()]), GetPage( name: '/dashboard', - page: () => DashboardScreen(), + page: () => DashboardScreen(), // or your actual home screen middlewares: [AuthMiddleware()], ), GetPage( - name: '/select-tenant', - page: () => const TenantSelectionScreen(), - middlewares: [AuthMiddleware()], - ), + name: '/select-tenant', + page: () => const TenantSelectionScreen(), + middlewares: [AuthMiddleware()]), - // ========== DASHBOARD SUBMODULES ========== + // Dashboard GetPage( - name: '/dashboard/attendance', - page: () => AttendanceScreen(), - middlewares: [AuthMiddleware()], - ), + name: '/dashboard/attendance', + page: () => AttendanceScreen(), + middlewares: [AuthMiddleware()]), GetPage( - name: '/dashboard/employees', - page: () => EmployeesScreen(), - middlewares: [AuthMiddleware()], - ), + name: '/dashboard', + page: () => DashboardScreen(), + middlewares: [AuthMiddleware()]), GetPage( - name: '/dashboard/daily-task-Planning', - page: () => DailyTaskPlanningScreen(), - middlewares: [AuthMiddleware()], - ), + name: '/dashboard/employees', + page: () => EmployeesScreen(), + middlewares: [AuthMiddleware()]), + // Daily Task Planning GetPage( - name: '/dashboard/daily-task-progress', - page: () => DailyProgressReportScreen(), - middlewares: [AuthMiddleware()], - ), + name: '/dashboard/daily-task-Planning', + page: () => DailyTaskPlanningScreen(), + middlewares: [AuthMiddleware()]), GetPage( - name: '/dashboard/directory-main-page', - page: () => DirectoryMainScreen(), - middlewares: [AuthMiddleware()], - ), + name: '/dashboard/daily-task-progress', + page: () => DailyProgressReportScreen(), + middlewares: [AuthMiddleware()]), GetPage( - name: '/dashboard/expense-main-page', - page: () => ExpenseMainScreen(), - middlewares: [AuthMiddleware()], - ), + name: '/dashboard/directory-main-page', + page: () => DirectoryMainScreen(), + middlewares: [AuthMiddleware()]), + // Expense GetPage( - name: '/dashboard/document-main-page', - page: () => UserDocumentsPage(), - middlewares: [AuthMiddleware()], - ), - - // ========== ERROR SCREENS ========== + name: '/dashboard/expense-main-page', + page: () => ExpenseMainScreen(), + middlewares: [AuthMiddleware()]), + // Documents GetPage( - name: '/error/coming_soon', - page: () => ComingSoonScreen(), - middlewares: [AuthMiddleware()], - ), + name: '/dashboard/document-main-page', + page: () => UserDocumentsPage(), + middlewares: [AuthMiddleware()]), + // Authentication + GetPage(name: '/auth/login', page: () => LoginScreen()), + GetPage(name: '/auth/login-option', page: () => LoginOptionScreen()), + GetPage(name: '/auth/mpin', page: () => MPINScreen()), + GetPage(name: '/auth/mpin-auth', page: () => MPINAuthScreen()), GetPage( - name: '/error/500', - page: () => Error500Screen(), - middlewares: [AuthMiddleware()], - ), + name: '/auth/register_account', + page: () => const RegisterAccountScreen()), + GetPage(name: '/auth/forgot_password', page: () => ForgotPasswordScreen()), GetPage( - name: '/error/404', - page: () => Error404Screen(), - middlewares: [AuthMiddleware()], - ), + name: '/auth/reset_password', page: () => const ResetPasswordScreen()), + // Error + GetPage( + name: '/error/coming_soon', + page: () => ComingSoonScreen(), + middlewares: [AuthMiddleware()]), + GetPage( + name: '/error/500', + page: () => Error500Screen(), + middlewares: [AuthMiddleware()]), + GetPage( + name: '/error/404', + page: () => Error404Screen(), + middlewares: [AuthMiddleware()]), ]; - - // ✅ Force uniform transition for all pages return routes - .map( - (e) => GetPage( + .map((e) => GetPage( name: e.name, page: e.page, middlewares: e.middlewares, - transition: Transition.noTransition, - ), - ) + transition: Transition.noTransition)) .toList(); } diff --git a/lib/view/my_app.dart b/lib/view/my_app.dart index 5786214..5b4a66a 100644 --- a/lib/view/my_app.dart +++ b/lib/view/my_app.dart @@ -4,6 +4,7 @@ import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:provider/provider.dart'; import 'package:marco/helpers/services/app_logger.dart'; +import 'package:marco/helpers/extensions/app_localization_delegate.dart'; import 'package:marco/helpers/services/localizations/language.dart'; import 'package:marco/helpers/services/navigation_services.dart'; import 'package:marco/helpers/services/storage/local_storage.dart'; @@ -15,26 +16,25 @@ import 'package:marco/routes.dart'; class MyApp extends StatelessWidget { const MyApp({super.key}); - Future _resolveInitialRoute() async { + Future _getInitialRoute() async { try { final token = LocalStorage.getJwtToken(); - if (token == null || token.isEmpty) { - logSafe("👤 No token — going to login option"); + logSafe("User not logged in. Routing to /auth/login-option"); return "/auth/login-option"; } final bool hasMpin = LocalStorage.getIsMpin(); if (hasMpin) { await LocalStorage.setBool("mpin_verified", false); - logSafe("🔐 MPIN found — going to MPIN auth"); + logSafe("Routing to /auth/mpin-auth"); return "/auth/mpin-auth"; } - logSafe("🏠 Routing to dashboard"); + logSafe("No MPIN. Routing to /dashboard"); return "/dashboard"; } catch (e, stacktrace) { - logSafe("❌ Error resolving initial route", + logSafe("Error determining initial route", level: LogLevel.error, error: e, stackTrace: stacktrace); return "/auth/login-option"; } @@ -45,27 +45,21 @@ class MyApp extends StatelessWidget { return Consumer( builder: (_, notifier, __) { return FutureBuilder( - future: _resolveInitialRoute(), + future: _getInitialRoute(), builder: (context, snapshot) { - if (snapshot.connectionState == ConnectionState.waiting) { - return const MaterialApp( - home: Scaffold( - body: Center(child: CircularProgressIndicator()), - ), - ); - } - if (snapshot.hasError) { - logSafe("❌ Error while determining initial route: ${snapshot.error}"); + logSafe("FutureBuilder snapshot error", + level: LogLevel.error, error: snapshot.error); return const MaterialApp( - home: Scaffold( - body: Center(child: Text("Error determining route")), - ), + home: Center(child: Text("Error determining route")), ); } - final initialRoute = snapshot.data ?? "/auth/login-option"; - logSafe("🚦 Launching app with initial route: $initialRoute"); + if (!snapshot.hasData) { + return const MaterialApp( + home: Center(child: CircularProgressIndicator()), + ); + } return GetMaterialApp( debugShowCheckedModeBanner: false, @@ -73,7 +67,7 @@ class MyApp extends StatelessWidget { darkTheme: AppTheme.darkTheme, themeMode: ThemeCustomizer.instance.theme, navigatorKey: NavigationService.navigatorKey, - initialRoute: initialRoute, + initialRoute: snapshot.data!, getPages: getPageRoute(), builder: (context, child) { NavigationService.registerContext(context); @@ -82,7 +76,8 @@ class MyApp extends StatelessWidget { child: child ?? const SizedBox(), ); }, - localizationsDelegates: const [ + localizationsDelegates: [ + AppLocalizationsDelegate(context), GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate,