Page d'Authentification
La Page d'Authentification (AuthPage) constitue le point d'entrée de l'application mobile. Elle permet aux utilisateurs de s'authentifier via Firebase Authentication et gère les sessions utilisateur.
AuthPage
Type : ConsumerStatefulWidget
State : _AuthPageState extends ConsumerState (AuthPage)
Description
Widget principal de la page d'authentification qui écoute les changements d'état de l'authentification et affiche les dialogues appropriés (conflit de session, erreurs).
Éléments principaux
- Scaffold : Conteneur principal avec fond transparent
- SafeArea : Zone sécurisée pour le contenu
- Stack : Superposition des éléments
- AuthForm : Formulaire d'authentification centralisé
- LanguageSelectorWidget : Sélecteur de langue (coin supérieur droit)
Méthode build
build(BuildContext context)
Description : Construit l'interface utilisateur et configure les écouteurs de state.
Écouteurs :
authNotifierProvider: Écoute les changements d'état d'authentification- Affiche
OneButtonPopupen cas de conflit de session (showSessionConflictDialog) - Affiche
SnackBarrouge pour les messages d'erreur - Appelle
clearError()après affichage de l'erreur
- Affiche
Retour : Widget
Composants utilisés
AuthForm
Type : ConsumerStatefulWidget
State : _AuthFormState extends ConsumerState (AuthForm)
Composant de formulaire complet gérant la connexion et l'inscription avec validation en temps réel.
Propriétés
| Propriété | Type | Description |
|---|---|---|
_formKey |
GlobalKey | Clé de formulaire pour validation |
_usernameController |
TextEditingController |
Contrôleur pour le nom d'utilisateur (inscription) |
_loginUsernameController |
TextEditingController |
Contrôleur pour le nom d'utilisateur (connexion) |
_emailController |
TextEditingController |
Contrôleur pour l'email |
_passwordController |
TextEditingController |
Contrôleur pour le mot de passe |
_usernameFocusNode |
FocusNode |
Focus pour le champ username (inscription) |
_loginUsernameFocusNode |
FocusNode |
Focus pour le champ username (connexion) |
_emailFocusNode |
FocusNode |
Focus pour le champ email |
_passwordFocusNode |
FocusNode |
Focus pour le champ password |
_isLoginMode |
bool |
Indique si le mode connexion est actif |
_obscurePassword |
bool |
Contrôle la visibilité du mot de passe |
_isCheckingUsername |
bool |
Indique si la vérification du username est en cours |
_hasCheckedUsername |
bool |
Indique si le username a été vérifié |
_isUsernameAvailable |
bool |
Indique si le username est disponible |
_selectedAvatarFile |
File? |
Fichier d'avatar personnalisé sélectionné |
_selectedPredefinedAvatarId |
String? |
ID de l'avatar prédéfini sélectionné |
Méthodes
dispose()
Description : Libère les ressources (contrôleurs et focus nodes).
Retour : void
_toggleMode()
Description : Bascule entre le mode connexion et inscription, et réinitialise le formulaire.
Retour : void
_clearForm()
Description : Réinitialise tous les champs et états du formulaire.
Retour : void
String? _validateEmail(String? value)
Description : Valide le format de l'email avec RegEx strict.
Paramètres :
value: Valeur de l'email à valider
Validation :
- Email non vide
- Longueur max : 254 caractères
- Format :
[a-zA-Z0-9][a-zA-Z0-9._-]*[a-zA-Z0-9]@[a-zA-Z0-9][a-zA-Z0-9.-]*\.[a-zA-Z]{2,}$
Retour : String? (message d'erreur ou null)
String? _validatePassword(String? value)
Description : Valide le mot de passe.
Paramètres :
value: Valeur du mot de passe à valider
Validation :
- Non vide
- Longueur min : 6 caractères (inscription uniquement)
- Longueur max : 128 caractères
Retour : String? (message d'erreur ou null)
String? _validateUsername(String? value)
Description : Valide le nom d'utilisateur pour l'inscription.
Paramètres :
value: Valeur du username à valider
Validation :
- Non vide
- Longueur : 3-9 caractères
- Format :
[a-zA-Z0-9_]+(alphanumériques et underscore uniquement) - Vérification de disponibilité obligatoire
Retour : String? (message d'erreur ou null)
String? _validateLoginUsername(String? value)
Description : Valide le nom d'utilisateur pour la connexion.
Paramètres :
value: Valeur du username à valider
Validation :
- Non vide
- Longueur : 3-9 caractères
Retour : String? (message d'erreur ou null)
_checkUsernameAvailability()
Description : Vérifie la disponibilité du nom d'utilisateur via le AuthNotifier.
État : Met à jour _isCheckingUsername, _hasCheckedUsername, _isUsernameAvailable
Retour : Future
_submit()
Description : Soumet le formulaire après validation et appelle signIn ou signUp.
Flux :
- Valide le formulaire
- Appelle
AuthNotifier.signIn()ouAuthNotifier.signUp() - Navigue vers HomePage en cas de succès
Retour : Future
_selectAvatar()
Description : Ouvre le popup de sélection d'avatar (AvatarSelectorPopup).
Retour : Future
Éléments visuels
- Logo CyberCity : Affiché en haut du formulaire
- Champs de saisie : Email, password, username (selon le mode)
- Bouton "Vérifier disponibilité" : Pour vérifier le username (inscription uniquement)
- Indicateur de validation : Icône verte/rouge selon la disponibilité du username
- Sélection d'avatar : Bouton pour choisir un avatar personnalisé ou prédéfini
- Toggle visibilité password : Icône œil pour afficher/masquer le mot de passe
- Bouton de soumission : "SE CONNECTER" ou "CRÉER UN COMPTE"
- Lien de basculement : "Créer un compte" ou "Se connecter"
OneButtonPopup
Widget de dialogue modal avec un seul bouton de confirmation.
Propriétés
| Propriété | Type | Description |
|---|---|---|
message |
String |
Message à afficher dans le popup |
buttonText |
String? |
Texte du bouton (défaut: "OK") |
onButtonPressed |
VoidCallback? |
Callback appelé lors du clic sur le bouton |
LanguageSelectorWidget
Widget de sélection de langue (Français/English) affiché dans le coin supérieur droit.
Providers utilisés
authNotifierProvider
Type : StateNotifierProvider (AuthNotifier, AuthState)
Provider gérant l'état d'authentification de l'application.
AuthState
| Propriété | Type | Description |
|---|---|---|
isLoading |
bool |
Indique si une opération d'authentification est en cours |
errorMessage |
String? |
Message d'erreur à afficher |
user |
UserEntity? |
Utilisateur authentifié |
showSessionConflictDialog |
bool |
Indique si le dialogue de conflit de session doit être affiché |
AuthNotifier - Méthodes principales
signIn(String username, String password)
Description : Authentifie un utilisateur avec username et password.
Paramètres :
username: Nom d'utilisateurpassword: Mot de passe
Retour : Future (bool) (true si succès, false sinon)
signUp(String email, String username, String password, File? avatarFile, String? predefinedAvatarId)
Description : Crée un nouveau compte utilisateur.
Paramètres :
email: Adresse emailusername: Nom d'utilisateurpassword: Mot de passeavatarFile: Fichier d'avatar personnalisé (optionnel)predefinedAvatarId: ID d'avatar prédéfini (optionnel)
Retour : Future (bool) (true si succès, false sinon)
checkUsernameAvailability(String username)
Description : Vérifie si un nom d'utilisateur est disponible.
Paramètres :
username: Nom d'utilisateur à vérifier
Retour : Future (bool) (true si disponible, false sinon)
void clearError()
Description : Efface le message d'erreur actuel.
Retour : void
void dismissSessionConflictDialog()
Description : Ferme le dialogue de conflit de session.
Retour : void
translationProvider
Type : Provider (TranslationWrapper)
Provider pour la gestion de l'internationalisation (i18n).
Use Cases
L'authentification utilise la Clean Architecture avec les use cases suivants :
- SignInUseCase : Connexion avec email/password
- SignInWithUsernameUseCase : Connexion avec username/password
- SignUpUseCase : Création de compte
- SignOutUseCase : Déconnexion
- CheckUsernameUseCase : Vérification de disponibilité du username
Navigation
- Succès de connexion/inscription : Redirection automatique vers
HomePage - Conflit de session : Affichage du dialogue, puis retour à l'écran de connexion