From 6130e63cfb73ae2291cfa7063ada67c5dfebcd37 Mon Sep 17 00:00:00 2001 From: qlionbleusam Date: Tue, 4 Aug 2026 15:38:14 +0200 Subject: [PATCH] feat: rediriger vers l'onglet Statistiques a la fin d'une session --- lib/app.dart | 2 +- lib/features/analysis/analysis_screen.dart | 3 +++ lib/features/home/home_screen.dart | 3 +++ lib/main_navigation_holder.dart | 26 ++++++++++++++++++---- 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/lib/app.dart b/lib/app.dart index 23f18847..d0831503 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -27,7 +27,7 @@ class BullyApp extends StatelessWidget { Locale('fr', 'FR'), // Français ], locale: const Locale('fr', 'FR'), // Force l'interface en français - home: const MainNavigationHolder(), + home: MainNavigationHolder(key: mainNavKey), ); }, ); diff --git a/lib/features/analysis/analysis_screen.dart b/lib/features/analysis/analysis_screen.dart index 5db4a735..51bbd66e 100644 --- a/lib/features/analysis/analysis_screen.dart +++ b/lib/features/analysis/analysis_screen.dart @@ -9,6 +9,7 @@ import 'dart:math' as math; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import '../../main_navigation_holder.dart'; import '../../core/constants/app_constants.dart'; import '../../core/theme/app_theme.dart'; import '../../data/models/target_type.dart'; @@ -673,6 +674,8 @@ class _AnalysisScreenContentState extends State<_AnalysisScreenContent> { sessionProvider.endSession(); Navigator.pop(context); Navigator.of(context).popUntil((route) => route.isFirst); + // Fin de session : on atterrit sur les statistiques. + openMainTab(mainTabStats); } } catch (e) { if (context.mounted) { diff --git a/lib/features/home/home_screen.dart b/lib/features/home/home_screen.dart index 0bbca062..ff69de35 100644 --- a/lib/features/home/home_screen.dart +++ b/lib/features/home/home_screen.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import '../../main_navigation_holder.dart'; import '../../core/constants/app_constants.dart'; import '../../core/theme/app_theme.dart'; import '../../data/repositories/session_repository.dart'; @@ -230,6 +231,8 @@ class _HomeScreenState extends State { backgroundColor: AppTheme.successColor, ), ); + // Fin de session : on bascule sur les statistiques. + openMainTab(mainTabStats); }, child: const Text('TERMINER', style: TextStyle(color: Colors.redAccent)), ), diff --git a/lib/main_navigation_holder.dart b/lib/main_navigation_holder.dart index 26d10b2c..81685b73 100644 --- a/lib/main_navigation_holder.dart +++ b/lib/main_navigation_holder.dart @@ -5,6 +5,23 @@ import 'features/statistics/statistics_screen.dart'; import 'features/garage/weapon_list_screen.dart'; import 'core/theme/app_theme.dart'; +/// Index des onglets de la barre de navigation principale. +const int mainTabHome = 0; +const int mainTabHistory = 1; +const int mainTabStats = 2; +const int mainTabGarage = 3; + +/// Clé du holder : permet de piloter l'onglet actif depuis n'importe quel +/// écran (ex. fin de session -> onglet Stats). +final GlobalKey> mainNavKey = + GlobalKey>(); + +/// Ouvre l'onglet [index] de la navigation principale. +void openMainTab(int index) { + final state = mainNavKey.currentState; + if (state is _MainNavigationHolderState) state.selectTab(index); +} + class MainNavigationHolder extends StatefulWidget { const MainNavigationHolder({super.key}); @@ -21,11 +38,12 @@ class _MainNavigationHolderState extends State { int _statsTick = 0; int _historyTick = 0; - void _onItemTapped(int index) { + void selectTab(int index) { + if (!mounted) return; setState(() { _selectedIndex = index; - if (index == 1) _historyTick++; - if (index == 2) _statsTick++; + if (index == mainTabHistory) _historyTick++; + if (index == mainTabStats) _statsTick++; }); } @@ -54,7 +72,7 @@ class _MainNavigationHolderState extends State { ), child: BottomNavigationBar( currentIndex: _selectedIndex, - onTap: _onItemTapped, + onTap: selectTab, type: BottomNavigationBarType.fixed, backgroundColor: Theme.of(context).cardColor, selectedItemColor: AppTheme.primaryColor,