import 'package:geosector_app/app.dart'; // Pour accéder aux instances globales import 'package:flutter/material.dart'; import 'package:geosector_app/app.dart'; // Pour accéder aux instances globales import 'package:hive_flutter/hive_flutter.dart'; import 'package:geosector_app/presentation/widgets/dashboard_layout.dart'; import 'package:geosector_app/core/repositories/user_repository.dart'; import 'package:geosector_app/core/constants/app_keys.dart'; import 'package:geosector_app/shared/app_theme.dart'; // Import des pages admin import 'admin_dashboard_home_page.dart'; import 'admin_statistics_page.dart'; import 'admin_history_page.dart'; import 'admin_communication_page.dart'; import 'admin_map_page.dart'; import 'admin_entite.dart'; class AdminDashboardPage extends StatefulWidget { const AdminDashboardPage({Key? key}) : super(key: key); @override State createState() => _AdminDashboardPageState(); } class _AdminDashboardPageState extends State { int _selectedIndex = 0; // Liste des pages à afficher late final List _pages; // Index de la page Amicale et membres (utilisé pour la navigation conditionnelle) static const int entitePageIndex = 5; // Référence à la boîte Hive pour les paramètres late Box _settingsBox; @override void initState() { super.initState(); try { debugPrint('Initialisation de AdminDashboardPage'); // Vérifier que userRepository est correctement initialisé if (userRepository == null) { debugPrint('ERREUR: userRepository est null dans AdminDashboardPage'); } else { debugPrint('userRepository est correctement initialisé'); // Vérifier l'utilisateur courant final currentUser = userRepository.getCurrentUser(); if (currentUser == null) { debugPrint( 'ERREUR: Aucun utilisateur connecté dans AdminDashboardPage', ); } else { debugPrint( 'Utilisateur connecté: ${currentUser.username} (${currentUser.id})', ); } } _pages = [ const AdminDashboardHomePage(), const AdminStatisticsPage(), const AdminHistoryPage(), const AdminCommunicationPage(), const AdminMapPage(), // La page AdminEntitePage est maintenant accessible uniquement via le menu Paramètres ]; // Initialiser et charger les paramètres _initSettings(); } catch (e) { debugPrint('ERREUR CRITIQUE dans AdminDashboardPage.initState: $e'); } } // Initialiser la boîte de paramètres et charger les préférences Future _initSettings() async { try { // Ouvrir la boîte de paramètres si elle n'est pas déjà ouverte if (!Hive.isBoxOpen(AppKeys.settingsBoxName)) { _settingsBox = await Hive.openBox(AppKeys.settingsBoxName); } else { _settingsBox = Hive.box(AppKeys.settingsBoxName); } // Charger l'index de page sélectionné final savedIndex = _settingsBox.get('adminSelectedPageIndex'); // Vérifier si l'index sauvegardé est valide if (savedIndex != null && savedIndex is int) { debugPrint('Index sauvegardé trouvé: $savedIndex'); // S'assurer que l'index est dans les limites valides if (savedIndex >= 0 && savedIndex < _pages.length) { setState(() { _selectedIndex = savedIndex; }); debugPrint('Index sauvegardé valide, utilisé: $_selectedIndex'); } else { debugPrint( 'Index sauvegardé invalide ($savedIndex), utilisation de l\'index par défaut: 0', ); // Réinitialiser l'index sauvegardé à 0 si invalide _settingsBox.put('adminSelectedPageIndex', 0); } } else { debugPrint( 'Aucun index sauvegardé trouvé, utilisation de l\'index par défaut: 0', ); } } catch (e) { debugPrint('Erreur lors du chargement des paramètres: $e'); } } // Sauvegarder les paramètres utilisateur void _saveSettings() { try { // Sauvegarder l'index de page sélectionné _settingsBox.put('adminSelectedPageIndex', _selectedIndex); } catch (e) { debugPrint('Erreur lors de la sauvegarde des paramètres: $e'); } } @override Widget build(BuildContext context) { return DashboardLayout( title: 'Tableau de bord Administration', selectedIndex: _selectedIndex, onDestinationSelected: (index) { setState(() { _selectedIndex = index; _saveSettings(); // Sauvegarder l'index de page sélectionné }); }, destinations: _buildNavigationDestinations(), showNewPassageButton: false, isAdmin: true, body: _pages[_selectedIndex], ); } /// Construit la liste des destinations de navigation List _buildNavigationDestinations() { // Destinations de base toujours présentes final List destinations = [ const NavigationDestination( icon: Icon(Icons.dashboard_outlined), selectedIcon: Icon(Icons.dashboard), label: 'Tableau de bord', ), const NavigationDestination( icon: Icon(Icons.bar_chart_outlined), selectedIcon: Icon(Icons.bar_chart), label: 'Statistiques', ), const NavigationDestination( icon: Icon(Icons.history_outlined), selectedIcon: Icon(Icons.history), label: 'Historique', ), const NavigationDestination( icon: Icon(Icons.chat_outlined), selectedIcon: Icon(Icons.chat), label: 'Messages', ), const NavigationDestination( icon: Icon(Icons.map_outlined), selectedIcon: Icon(Icons.map), label: 'Carte', ), ]; // Nous ne voulons plus ajouter la destination "Amicale et membres" ici // car elle est accessible uniquement via le menu Paramètres return destinations; } }