Statistiques

La page Statistiques (StatsPage) affiche les résultats et statistiques détaillées d'une partie terminée, incluant le gagnant, les performances des joueurs et les métriques du jeu.

StatsPage

Type : ConsumerStatefulWidget
State : _StatsPageState extends ConsumerState<StatsPage> with WidgetsBindingObserver

Propriétés de constructeur

Propriété Type Description
gameCode String? Code de la partie
winner String? Nom du joueur gagnant
players List<PlayerModel>? Liste des joueurs de la partie
gameDuration int? Durée de la partie en secondes
totalTurns int? Nombre total de tours
tilesVisitedPercentage double? Pourcentage de tuiles visitées
doorsToggledPercentage double? Pourcentage de portes activées
totalTiles int? Nombre total de tuiles
accessibleTiles int? Nombre de tuiles accessibles
totalDoors int? Nombre total de portes

Propriétés d'état

Propriété Type Description
_playerAvatarCache Map<String, String?> Cache pour les URLs d'avatars des joueurs

Méthodes

initState()

Description : Initialise la page, configure les statistiques et rejoint la room Socket.IO des stats.
Actions :

  1. Ajoute l'observer du cycle de vie de l'application
  2. Appelle setGameStats() avec les données reçues
  3. Appelle joinStatsRoom() pour Socket.IO

Retour : void

dispose()

Description : Nettoie les ressources et retire l'observer.
Retour : void

didChangeAppLifecycleState(AppLifecycleState state)

Description : Détecte le retour de l'application au premier plan et vérifie l'état de la partie.
Comportement : Attend 2 secondes après le retour au premier plan, puis appelle _checkStatsState()
Retour : void

void _checkStatsState()

Description : Vérifie si le canal de partie existe toujours.
Action : Si le canal n'existe plus, affiche popup de déconnexion et quitte la room stats
Retour : void

void _showGameDisconnectedPopup(String message)

Description : Affiche un popup de déconnexion de partie et quitte la stats room.
Paramètres :

Action : Appelle leaveStatsRoom() et navigue vers HomePage
Retour : void

void _leaveStatsPage()

Description : Quitte la page de stats et nettoie les ressources.
Actions :

  1. Quitte la stats room Socket.IO
  2. Nettoie le state des stats
  3. Navigue vers HomePage
  4. Focus sur le canal général

Retour : void

void _focusOnGeneralChannel()

Description : Active le canal de chat général après avoir quitté les stats.
Retour : void

String? _getPlayerAvatarUrl(String playerName)

Description : Récupère l'URL d'avatar d'un joueur (avec cache).
Paramètres :

Retour : String? (URL de l'avatar ou null)

String _formatDuration(int seconds)

Description : Formate une durée en secondes vers format "XXh XXmin XXs".
Paramètres :

Retour : String (ex: "1h 23min 45s")

Widget _buildHeader(...)

Description : Construit l'en-tête de la page avec titre et bouton de sortie.
Retour : Widget

Widget _buildWinnerSection(...)

Description : Construit la section affichant le gagnant avec avatar et nom.
Retour : Widget

Widget _buildPlayerRankings(...)

Description : Construit la liste classée des joueurs avec leurs statistiques.
Retour : Widget

Widget _buildGameStatistics(...)

Description : Construit la section des statistiques globales de la partie.
Retour : Widget

Widget _buildStatCard(...)

Description : Construit une carte de statistique individuelle.
Paramètres :

Retour : Widget

Éléments visuels

En-tête

Section Gagnant

Classement des Joueurs

Statistiques Globales

Overlays

Composants utilisés

UserProfileWidget

Widget de profil utilisateur.

ChatboxWidget

Widget de chat flottant.

OneButtonPopup

Popup modal avec un seul bouton.

Providers utilisés

statsNotifierProvider

Type : StateNotifierProvider<StatsNotifier, StatsState>

Provider gérant l'état des statistiques de partie.

StatsNotifier - Méthodes

void setGameStats(...)

Description : Définit les statistiques de la partie.
Paramètres :

Retour : void

void joinStatsRoom({required String gameCode, required String firebaseUid, required String username})

Description : Rejoint la room Socket.IO des statistiques.
Paramètres :

Retour : void

void leaveStatsRoom({required String gameCode, required String firebaseUid})

Description : Quitte la room Socket.IO des statistiques.
Paramètres :

Retour : void

void clearStats()

Description : Efface toutes les statistiques stockées.
Retour : void

authStateProvider

Type : Provider<UserEntity?>

Provider fournissant l'utilisateur authentifié actuel.

chatNotifierProvider

Type : StateNotifierProvider<ChatNotifier, ChatState>

Provider gérant l'état du chat.

ChatState

Propriété Type Description
userChannels List<ChannelEntity> Liste des canaux de l'utilisateur

friendsNotifierProvider

Type : StateNotifierProvider<FriendsNotifier, FriendsState>

Provider gérant la liste des amis.

translationProvider

Type : Provider<TranslationWrapper>

Provider pour la gestion de l'internationalisation.

themeNotifierProvider

Type : StateNotifierProvider<ThemeNotifier, ThemeState>

Provider gérant le thème actif.

Écouteurs Socket.IO

La page utilise la room Socket.IO des statistiques pour détecter quand la partie est supprimée:

Events écoutés

Comportement

Si ces events sont détectés, la page affiche un popup de déconnexion et redirige vers HomePage.

Navigation

Lifecycle management

La page implémente WidgetsBindingObserver pour détecter:

Format des statistiques

Durée

Format: "Xh Xmin Xs"
Exemple: "1h 23min 45s"

Pourcentages

Format: "XX.X%"
Exemple: "75.5%"

Nombres entiers

Format: Nombre brut
Exemple: "42"

Distance

Format: "XX tuiles"
Exemple: "127 tuiles"

Ordre des joueurs

Les joueurs sont affichés dans l'ordre du classement final de la partie:

  1. 1er place (gagnant)
  2. 2ème place
  3. 3ème place
  4. etc.

Le gagnant est également affiché séparément dans la section dédiée en haut de la page.