feat: synchronisation mode deconnecte fin chat et stats

This commit is contained in:
2025-08-31 18:21:20 +02:00
parent 41a4505b4b
commit 604294af96
149 changed files with 285769 additions and 250633 deletions

View File

@@ -13,6 +13,7 @@ import 'package:geosector_app/core/repositories/membre_repository.dart';
import 'package:geosector_app/core/repositories/amicale_repository.dart';
import 'package:geosector_app/core/services/sync_service.dart';
import 'package:geosector_app/core/services/connectivity_service.dart';
import 'package:geosector_app/core/services/chat_manager.dart';
import 'package:geosector_app/presentation/auth/splash_page.dart';
import 'package:geosector_app/presentation/auth/login_page.dart';
import 'package:geosector_app/presentation/auth/register_page.dart';
@@ -30,9 +31,62 @@ final syncService = SyncService(userRepository: userRepository);
final connectivityService = ConnectivityService();
final themeService = ThemeService.instance;
class GeosectorApp extends StatelessWidget {
class GeosectorApp extends StatefulWidget {
const GeosectorApp({super.key});
@override
State<GeosectorApp> createState() => _GeosectorAppState();
}
class _GeosectorAppState extends State<GeosectorApp> with WidgetsBindingObserver {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
// Arrêter le chat quand l'app se ferme
ChatManager.instance.dispose();
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
switch (state) {
case AppLifecycleState.resumed:
// App revenue au premier plan - relancer les syncs
debugPrint('📱 App au premier plan - Reprise des syncs chat');
ChatManager.instance.resumeSyncs();
break;
case AppLifecycleState.paused:
// App mise en arrière-plan - arrêter les syncs pour économiser la batterie
debugPrint('⏸️ App en arrière-plan - Pause des syncs chat');
ChatManager.instance.pauseSyncs();
break;
case AppLifecycleState.inactive:
// État transitoire (ex: appel entrant) - ne rien faire
debugPrint('💤 App inactive temporairement');
break;
case AppLifecycleState.detached:
// App vraiment fermée (rare sur mobile) - nettoyer complètement
debugPrint('🛑 App fermée complètement - Arrêt total du chat');
ChatManager.instance.dispose();
break;
case AppLifecycleState.hidden:
// État masqué (Flutter 3.13+) - traiter comme paused
debugPrint('👻 App masquée');
ChatManager.instance.pauseSyncs();
break;
}
}
@override
Widget build(BuildContext context) {
return AnimatedBuilder(