import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import '../components/home/home_content.dart'; import '../components/settings/settings_content.dart'; import '../components/map/map_content.dart'; import '../components/group/group_content.dart'; import '../components/count/count_content.dart'; import '../blocs/user/user_bloc.dart'; import '../blocs/user/user_event.dart'; import '../blocs/auth/auth_bloc.dart'; import '../blocs/auth/auth_event.dart'; class HomePage extends StatefulWidget { const HomePage({super.key}); @override State createState() => _HomePageState(); } class _HomePageState extends State { int _currentIndex = 0; final Map _pageCache = {}; final List titles = [ 'Mes voyages', 'Paramètres', 'Carte', 'Chat de groupe', 'Comptes', ]; @override void initState() { super.initState(); // Initialiser les données utilisateur context.read().add(UserInitialized()); } Widget _buildPage(int index) { if (_pageCache.containsKey(index)) { return _pageCache[index]!; } Widget page; switch (index) { case 0: page = const HomeContent(); break; case 1: page = const SettingsContent(); break; case 2: page = const MapContent(); break; case 3: page = const GroupContent(); break; case 4: page = const CountContent(); break; default: page = const HomeContent(); } _pageCache[index] = page; return page; } void _onNavigationTap(int index) { setState(() { _currentIndex = index; }); Navigator.pop(context); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(titles[_currentIndex]), backgroundColor: Theme.of(context).colorScheme.inversePrimary, foregroundColor: Colors.white, ), drawer: Drawer( child: ListView( padding: EdgeInsets.zero, children: [ DrawerHeader( decoration: BoxDecoration( color: Theme.of(context).colorScheme.inversePrimary, ), child: const Text( "Travel Mate", style: TextStyle(color: Colors.white, fontSize: 24), ), ), _buildDrawerItem(icon: Icons.home, title: "Mes voyages", index: 0), _buildDrawerItem(icon: Icons.settings, title: "Paramètres", index: 1), _buildDrawerItem(icon: Icons.map, title: "Carte", index: 2), _buildDrawerItem(icon: Icons.group, title: "Chat de groupe", index: 3), _buildDrawerItem(icon: Icons.account_balance_wallet, title: "Comptes", index: 4), const Divider(), ListTile( leading: const Icon(Icons.logout, color: Colors.red), title: const Text("Déconnexion", style: TextStyle(color: Colors.red)), onTap: () { Navigator.pop(context); context.read().add(AuthSignOutRequested()); Navigator.pushNamedAndRemoveUntil(context, '/login', (route) => false); }, ), ], ), ), body: IndexedStack( index: _currentIndex, children: [ for (int i = 0; i < titles.length; i++) if (_currentIndex == i || _pageCache.containsKey(i)) _buildPage(i) else Container(), ], ), ); } Widget _buildDrawerItem({ required IconData icon, required String title, required int index, }) { return ListTile( leading: Icon(icon), title: Text(title), selected: _currentIndex == index, selectedTileColor: Theme.of(context).colorScheme.primary.withValues(alpha: 0.1), onTap: () => _onNavigationTap(index), ); } @override void dispose() { _pageCache.clear(); super.dispose(); } }