Refactor user and theme management to use BLoC pattern; remove provider classes and integrate new services for user and group functionalities

This commit is contained in:
Dayron
2025-10-14 12:10:42 +02:00
parent c4588a65c0
commit 72ddb58a11
27 changed files with 1864 additions and 791 deletions

View File

@@ -1,9 +1,14 @@
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});
@@ -14,25 +19,28 @@ class HomePage extends StatefulWidget {
class _HomePageState extends State<HomePage> {
int _currentIndex = 0;
// Cache pour les pages créées
final Map<int, Widget> _pageCache = {};
final List<String> titles = [
'Mes voyages', // 0
'Paramètres', // 1
'Carte', // 2
'Chat de groupe', // 3
'Comptes', // 4
'Mes voyages',
'Paramètres',
'Carte',
'Chat de groupe',
'Comptes',
];
@override
void initState() {
super.initState();
// Initialiser les données utilisateur
context.read<UserBloc>().add(UserInitialized());
}
Widget _buildPage(int index) {
// Vérifier si la page est déjà en cache
if (_pageCache.containsKey(index)) {
return _pageCache[index]!;
}
// Créer la page seulement quand elle est demandée
Widget page;
switch (index) {
case 0:
@@ -54,7 +62,6 @@ class _HomePageState extends State<HomePage> {
page = const HomeContent();
}
// Mettre en cache la page créée
_pageCache[index] = page;
return page;
}
@@ -63,7 +70,7 @@ class _HomePageState extends State<HomePage> {
setState(() {
_currentIndex = index;
});
Navigator.pop(context); // Fermer le drawer
Navigator.pop(context);
}
@override
@@ -87,42 +94,19 @@ class _HomePageState extends State<HomePage> {
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,
),
_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);
Navigator.pushNamedAndRemoveUntil(
context,
'/login',
(route) => false,
);
context.read<AuthBloc>().add(AuthSignOutRequested());
Navigator.pushNamedAndRemoveUntil(context, '/login', (route) => false);
},
),
],
@@ -131,12 +115,11 @@ class _HomePageState extends State<HomePage> {
body: IndexedStack(
index: _currentIndex,
children: [
// Créer les pages seulement si elles sont sélectionnées
for (int i = 0; i < titles.length; i++)
if (_currentIndex == i || _pageCache.containsKey(i))
_buildPage(i)
else
Container(), // Placeholder vide
Container(),
],
),
);
@@ -158,8 +141,7 @@ class _HomePageState extends State<HomePage> {
@override
void dispose() {
// Nettoyer le cache si nécessaire
_pageCache.clear();
super.dispose();
}
}
}