MIF_E31222656/lib/core/routes/app_routes.dart

117 lines
5.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:tugas_akhir_supabase/screens/admin/admin_dashboard.dart';
import 'package:tugas_akhir_supabase/screens/admin/community_management.dart';
import 'package:tugas_akhir_supabase/screens/admin/crop_management.dart';
import 'package:tugas_akhir_supabase/screens/admin/user_management.dart';
import 'package:tugas_akhir_supabase/screens/auth/forgot_password_screen.dart';
import 'package:tugas_akhir_supabase/screens/auth/login_screen.dart';
import 'package:tugas_akhir_supabase/screens/auth/otp_screen.dart';
import 'package:tugas_akhir_supabase/screens/auth/register_screen.dart';
import 'package:tugas_akhir_supabase/screens/auth/reset_password_screen.dart';
import 'package:tugas_akhir_supabase/screens/calendar/calendar_screen.dart';
import 'package:tugas_akhir_supabase/screens/calendar/field_management_screen.dart';
import 'package:tugas_akhir_supabase/screens/calendar/schedule_list_screen.dart';
import 'package:tugas_akhir_supabase/screens/community/community_screen.dart';
import 'package:tugas_akhir_supabase/screens/community/enhanced_community_screen.dart';
import 'package:tugas_akhir_supabase/screens/home_screen.dart';
import 'package:tugas_akhir_supabase/screens/image_processing/plant_scanner_screen.dart';
import 'package:tugas_akhir_supabase/screens/intro/animation_splash_screen.dart';
import 'package:tugas_akhir_supabase/screens/intro/intro_page_screen.dart';
import 'package:tugas_akhir_supabase/screens/panen/analisis_chart_screen.dart';
import 'package:tugas_akhir_supabase/screens/panen/analisis_hasil_screen.dart';
import 'package:tugas_akhir_supabase/screens/panen/analisis_input_screen.dart';
import 'package:tugas_akhir_supabase/screens/panen/analisis_panen_screen.dart';
import 'package:tugas_akhir_supabase/screens/profile_screen.dart';
import 'package:tugas_akhir_supabase/screens/calendar/schedule_detail_screen.dart';
import 'package:tugas_akhir_supabase/widgets/session_guard_wrapper.dart';
/// Defines all routes used in the application
class AppRoutes {
/// Non-authenticated routes
static final Map<String, Widget Function(BuildContext)> _publicRoutes = {
'/': (context) => const SplashScreen(),
'/intro': (context) => const AnimatedIntroScreen(),
'/login': (context) => const LoginScreen(),
'/register': (context) => const RegisterScreen(),
'/forgot-password': (context) => const ForgotPasswordScreen(),
'/otp': (context) {
final args =
ModalRoute.of(context)?.settings.arguments as Map<String, dynamic>?;
return OtpScreen(
email: args?['email'] ?? '',
userId: args?['userId'] ?? '',
);
},
'/reset-password': (context) => const ResetPasswordScreen(),
};
/// Authenticated routes
static final Map<String, Widget Function(BuildContext)>
_authenticatedRoutes = {
'/home': (context) => const HomeScreen(),
'/profile': (context) => const ProfileScreen(),
'/calendar': (context) => const KalenderTanamScreen(),
'/field-management': (context) => const FieldManagementScreen(),
'/schedule-list': (context) => const ScheduleListScreen(),
'/plant-scanner': (context) => const PlantScannerScreen(),
'/community': (context) => const CommunityScreen(),
'/enhanced-community': (context) => const EnhancedCommunityScreen(),
'/analisis': (context) {
final args =
ModalRoute.of(context)?.settings.arguments as Map<String, dynamic>?;
return HarvestAnalysisScreen(userId: args?['userId'] ?? '');
},
'/analisis-input': (context) {
final args =
ModalRoute.of(context)?.settings.arguments as Map<String, dynamic>?;
return AnalisisInputScreen(userId: args?['userId'] ?? '');
},
'/analisis-hasil': (context) {
final args =
ModalRoute.of(context)?.settings.arguments as Map<String, dynamic>?;
return HarvestResultScreen(
userId: args?['userId'] ?? '',
harvestData: args?['harvestData'],
scheduleData: args?['scheduleData'],
);
},
'/analisis-chart': (context) {
final args =
ModalRoute.of(context)?.settings.arguments as Map<String, dynamic>?;
return HarvestAnalysisChart(
userId: args?['userId'] ?? '',
harvestData: args?['harvestData'],
scheduleData: args?['scheduleData'],
isManualInput: args?['isManualInput'] ?? false,
);
},
'/kalender-detail': (context) {
final args =
ModalRoute.of(context)?.settings.arguments as Map<String, dynamic>?;
return ScheduleDetailScreen(scheduleId: args?['scheduleId'] ?? '');
},
/// Admin routes
'/admin': (context) => const AdminDashboard(),
'/admin/users': (context) => const UserManagement(),
'/admin/crops': (context) => const CropManagement(),
'/admin/community': (context) => const CommunityManagement(),
};
/// Combined routes with session guard for authenticated routes
static Map<String, Widget Function(BuildContext)> get routes {
final Map<String, Widget Function(BuildContext)> allRoutes = {};
/// Add public routes as-is
allRoutes.addAll(_publicRoutes);
/// Add authenticated routes wrapped with SessionGuardWrapper
_authenticatedRoutes.forEach((route, builder) {
allRoutes[route] =
(context) => SessionGuardWrapper(child: builder(context));
});
return allRoutes;
}
}