184 lines
5.9 KiB
Dart
184 lines
5.9 KiB
Dart
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<AdminDashboardPage> createState() => _AdminDashboardPageState();
|
|
}
|
|
|
|
class _AdminDashboardPageState extends State<AdminDashboardPage> {
|
|
int _selectedIndex = 0;
|
|
|
|
// Liste des pages à afficher
|
|
late final List<Widget> _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<void> _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<NavigationDestination> _buildNavigationDestinations() {
|
|
// Destinations de base toujours présentes
|
|
final List<NavigationDestination> 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;
|
|
}
|
|
}
|