Page d'Accueil

La Page d'Accueil (HomePage) constitue le hub central de l'application mobile après authentification. Elle présente le logo CyberCity et offre un accès rapide à toutes les fonctionnalités principales via une interface intuitive.

HomePage

Type : ConsumerStatefulWidget
State : _HomePageState extends ConsumerState (HomePage)

Propriétés

Propriété Type Description
isJoinGamePopupActive bool Contrôle l'affichage du popup de saisie de code pour rejoindre une partie
accessCode List Tableau contenant les 4 chiffres du code d'accès saisi
focusNodes List Liste des focus nodes pour les champs de code (4 champs)
isCodeValid bool Indique si le code saisi est valide
codeErrorMsg String Message d'erreur à afficher si le code est invalide
_isInitialized bool Indique si l'initialisation des données est terminée
_isLoadingProfile bool Indique si le profil utilisateur est en cours de chargement

Méthodes

initState()

Description : Initialise les focus nodes et lance le chargement des données après le premier frame.
Actions :

Retour : void

_initializeData()

Description : Charge le profil utilisateur et précharge les données des jeux.
Flux :

  1. Vérifie si l'utilisateur est authentifié
  2. Charge le profil utilisateur via _loadUserProfileAsync()
  3. Précharge les jeux disponibles via _preloadGamesData()
  4. Met à jour _isLoadingProfile à false

Retour : Future

_preloadGamesData()

Description : Précharge la liste des jeux disponibles depuis le serveur.
Appels : gameNotifierProvider.notifier.loadPlayableGames(idToken)
Retour : Future

_loadUserProfileAsync()

Description : Charge le profil utilisateur si pas déjà chargé.
Appels : userNotifierProvider.notifier.loadUserProfile(idToken)
Retour : Future

dispose()

Description : Libère les focus nodes.
Retour : void

showJoinGamePopup()

Description : Affiche le popup de saisie de code pour rejoindre une partie et réinitialise l'état.
État : Met isJoinGamePopupActive à true
Retour : void

closeJoinGamePopup()

Description : Ferme le popup de saisie de code et réinitialise le code et l'état de validation.
État : Met isJoinGamePopupActive à false, réinitialise accessCode et isCodeValid
Retour : void

onInputChange(String value, int index)

Description : Gère la saisie de chaque chiffre du code et déplace le focus au champ suivant.
Paramètres :

Validation : Accepte uniquement les chiffres 0-9
Comportement : Déplace automatiquement le focus au champ suivant après saisie
Retour : void

onBackspace(String currentValue, int index)

Description : Gère le comportement de la touche Backspace pour revenir au champ précédent.
Paramètres :

Retour : void

redirectToCharacterCreation()

Description : Vérifie la validité du code (4 chiffres) et redirige ou affiche une erreur.
Validation : Code complet à 4 chiffres
Retour : void

redirectToJoinPage()

Description : Navigue vers la page de liste des parties disponibles.
Navigation : AppRoutes.join.path
Retour : void

redirectToGameCreation()

Description : Navigue vers la page de création de partie.
Navigation : AppRoutes.games.path
Retour : void

redirectToGames()

Description : Fonction réservée pour la gestion des jeux (non implémentée).
Retour : void

redirectToShop()

Description : Navigue vers la page de la boutique.
Navigation : AppRoutes.shop.path
Retour : void

Widget _buildShopButton()

Description : Construit le bouton d'accès à la boutique (coin supérieur droit).
Style : S'adapte au thème actif (theme1 ou theme2)
Retour : Widget

Widget _buildButton({...})

Description : Construit un bouton principal de navigation.
Paramètres :

Comportement : Utilise CyberButton pour theme2, MainButton pour theme1
Retour : Widget

Éléments visuels

En-tête

Boutons principaux

  1. Rejoindre une Partie

    • Icône : Icons.sports_esports
    • Action : Ouvre JoinPage
  2. Créer une Partie

    • Icône : Icons.add_circle
    • Action : Ouvre GameCreationPage
  3. Gérer les Jeux

    • Icône : Icons.edit
    • Action : Non implémentée

Overlays et widgets flottants

Pied de page

Composants utilisés

ChatboxWidget

Widget de chat flottant permettant d'accéder aux conversations.

UserProfileWidget

Widget de profil utilisateur affichant l'avatar, le nom d'utilisateur, le solde et les statistiques.

Propriétés

Propriété Type Description
enableLogout bool Active/désactive le bouton de déconnexion (défaut: true)

MainButton

Bouton de navigation principal avec style cyberpunk (theme1).

Propriétés

Propriété Type Description
text String Texte du bouton
icon IconData Icône à afficher
onPressed VoidCallback Callback du clic
borderColor Color Couleur de la bordure
glowColor Color Couleur de l'effet glow
textColor Color Couleur du texte
textShadowColor Color Couleur de l'ombre du texte
iconColor Color Couleur de l'icône

CyberButton

Bouton de navigation avec style cyberpunk alternatif (theme2).

Propriétés

Propriété Type Description
text String Texte du bouton
onPressed VoidCallback Callback du clic
width double? Largeur du bouton
fontSize double? Taille de la police

HelpButtonWidget

Bouton d'aide circulaire avec icône.

Propriétés

Propriété Type Description
onPressed VoidCallback Callback du clic
size double Taille du bouton
iconSize double Taille de l'icône

HelpPopupWidget

Popup d'aide contextuelle avec contenu Markdown.

Propriétés

Propriété Type Description
isActive bool Contrôle l'affichage du popup
title String Titre du popup
markdownContent String Contenu en format Markdown
showFullHelpButton bool Affiche le bouton "Aide complète"
onClose VoidCallback Callback de fermeture
onViewFullHelp VoidCallback Callback pour ouvrir la page d'aide complète

Providers utilisés

authNotifierProvider

Type : StateNotifierProvider (AuthNotifier, AuthState)

Provider gérant l'état d'authentification. Écouté pour détecter les déconnexions et rediriger vers AuthPage.

userNotifierProvider

Type : StateNotifierProvider (UserNotifier, UserState)

Provider gérant le profil utilisateur.

UserNotifier - Méthodes

loadUserProfile(String idToken)

Description : Charge le profil utilisateur depuis le serveur.
Paramètres :

Retour : Future

bool isProfileLoaded()

Description : Vérifie si le profil est déjà chargé.
Retour : bool

void clearUserProfile()

Description : Efface le profil utilisateur.
Retour : void

userProfileUiNotifierProvider

Type : StateNotifierProvider (UserProfileUiNotifier, UserProfileUiState)

Provider gérant l'état de l'interface du profil utilisateur.

UserProfileUiNotifier - Méthodes

void reset()

Description : Réinitialise l'état de l'interface du profil.
Retour : void

gameNotifierProvider

Type : StateNotifierProvider (GameNotifier, GameState)

Provider gérant la liste des jeux disponibles.

GameNotifier - Méthodes

loadPlayableGames(String idToken)

Description : Charge la liste des jeux jouables depuis le serveur.
Paramètres :

Retour : Future

themeNotifierProvider

Type : StateNotifierProvider (ThemeNotifier, ThemeState)

Provider gérant le thème actif de l'application (theme1 ou theme2).

translationProvider

Type : Provider (TranslationWrapper)

Provider pour la gestion de l'internationalisation (i18n).

helpPopupProvider

Type : StateNotifierProvider (HelpPopupNotifier, HelpPopupState)

Provider gérant l'état du popup d'aide.

HelpPopupNotifier - Méthodes

void toggleHelp(String route)

Description : Active/désactive le popup d'aide pour une route donnée.
Paramètres :

Retour : void

void hideHelp()

Description : Ferme le popup d'aide.
Retour : void

helpServiceProvider

Type : Provider (HelpService)

Provider fournissant le service d'aide contextuelle.

HelpService - Méthodes

HelpContent getHelpContentForRoute(String route)

Description : Retourne le contenu d'aide pour une route donnée.
Paramètres :

Retour : HelpContent (title, content, showFullHelpButton)

Navigation

Écouteurs Socket.IO

Aucun écouteur Socket.IO n'est configuré directement sur cette page, mais les widgets imbriqués (ChatboxWidget, UserProfileWidget) peuvent avoir leurs propres écouteurs.

Comportement de chargement

  1. Premier chargement : Affiche un CircularProgressIndicator pendant le chargement du profil
  2. Profil chargé : Affiche l'interface complète
  3. Déconnexion : Redirige automatiquement vers AuthPage et réinitialise le profil