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 :
- Crée 4
FocusNodepour les champs de code - Appelle
_initializeData()après le premier rendu
Retour : void
_initializeData()
Description : Charge le profil utilisateur et précharge les données des jeux.
Flux :
- Vérifie si l'utilisateur est authentifié
- Charge le profil utilisateur via
_loadUserProfileAsync() - Précharge les jeux disponibles via
_preloadGamesData() - 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 :
value: Valeur saisie (1 chiffre)index: Position dans le code (0-3)
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 :
currentValue: Valeur actuelle du champindex: Position dans le code (0-3)
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 :
text: Texte du boutonicon: Icône à afficheronPressed: Callback du clictheme: Thème actifthemeState: État du thème
Comportement : Utilise CyberButton pour theme2, MainButton pour theme1
Retour : Widget
Éléments visuels
En-tête
- Logo CyberCity : Logo de l'application, hauteur = 21% de l'écran
Boutons principaux
-
Rejoindre une Partie
- Icône :
Icons.sports_esports - Action : Ouvre
JoinPage
- Icône :
-
Créer une Partie
- Icône :
Icons.add_circle - Action : Ouvre
GameCreationPage
- Icône :
-
Gérer les Jeux
- Icône :
Icons.edit - Action : Non implémentée
- Icône :
Overlays et widgets flottants
- Bouton Boutique : Coin supérieur droit, icône de boutique
- ChatboxWidget : Widget de chat flottant
- UserProfileWidget : Widget de profil utilisateur
- HelpButtonWidget : Bouton d'aide (coin supérieur gauche)
- HelpPopupWidget : Popup d'aide contextuelle
Popup de saisie de code
- Titre : "REJOINDRE UNE PARTIE"
- Message : "ENTREZ LE CODE À 4 CHIFFRES" ou message d'erreur
- Champs de saisie : 4 champs pour les chiffres (0-9)
- Boutons : "ANNULER" et "REJOINDRE"
Pied de page
- Nom de l'équipe : Affiché en bas de l'écran avec style cyberpunk
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 :
idToken: Token d'authentification Firebase
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 :
idToken: Token d'authentification Firebase
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 :
route: Route de la page actuelle
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 :
route: Route de la page
Retour : HelpContent (title, content, showFullHelpButton)
Navigation
- Rejoindre une Partie :
AppRoutes.join.path→JoinPage - Créer une Partie :
AppRoutes.games.path→GameCreationPage - Boutique :
AppRoutes.shop.path→ShopPage - Aide complète :
AppRoutes.help.path→HelpPage - Déconnexion :
AppRoutes.auth.path→AuthPage
É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
- Premier chargement : Affiche un
CircularProgressIndicatorpendant le chargement du profil - Profil chargé : Affiche l'interface complète
- Déconnexion : Redirige automatiquement vers
AuthPageet réinitialise le profil