Atelier 2 : Applications de Rencontre
Vue d'Ensemble
Cet atelier comprend 3 portions d'interface couvrant différents aspects de Flutter. Chaque exercice est un widget complet et autonome.
Modèles de Données
class Contact {
final String id;
final String firstName;
final String lastName;
final String email;
final String phone;
Contact({
required this.id,
required this.firstName,
required this.lastName,
required this.email,
required this.phone,
});
String get fullName => '$firstName $lastName';
String get initials => '${firstName[0]}${lastName[0]}'.toUpperCase();
}
class Image {
final String id;
final String title;
final String assetPath;
bool isFavorite;
Image({
required this.id,
required this.title,
required this.assetPath,
this.isFavorite = false,
});
}
Exercice 1 : Gestionnaire de Contacts avec i18n
Objectif
Créer une application affichant une liste de contacts avec support multi-langues (en, fr), ajout, suppression et édition.
Points à Couvrir
ListView.builderavec les contactsDismissible(swipe pour supprimer)- Bouton d'ajout FAB
- Édition des contacts (modification des informations)
ValueKeypour identifier les contacts- Internationalisation (i18n) - FR/EN
Fonctionnalités à Implémenter
-
Affichage de la liste :
ListView.builder- Avatar avec initiales (CircleAvatar)
- Nom complet
- Bouton pour éditer le contact
-
Suppression :
Dismissible- swiper pour supprimer avec confirmation -
Ajout de contacts : FAB qui ouvre un formulaire simple
-
Édition de contacts : Modification des informations
-
Clés uniques : Chaque contact avec
ValueKey(contact.id) -
Internationalisation (i18n) :
- Fichiers ARB pour FR/EN
- Sélecteur de langue accessible
Exercice 2 : Formulaire de Saisie de Contacts avec i18n
Objectif
Créer une application avec un formulaire permettant la saisie et la validation des informations d'un contact, avec support multi-langues.
Points à Couvrir
FormetTextFormField- Validation personnalisée
GlobalKey<FormState>- Clavier adapté selon le champ
- Internationalisation (i18n) - FR/EN
Fonctionnalités à Implémenter
-
Champs du formulaire :
- Prénom (min 2 caractères)
- Nom (min 2 caractères)
- Email (doit contenir @)
- Téléphone (10 chiffres)
-
Validateurs personnalisés : Implémenter pour chaque champ
-
Clavier adapté :
emailAddress,phone,textselon le champ -
Boutons : Soumettre et Réinitialiser
-
Feedback : Afficher les erreurs de validation
-
Internationalisation (i18n) : Tous les labels et messages en FR/EN
Exercice 3 : Galerie d'Images Interactive avec i18n
Objectif
Créer une application affichant une galerie d'images en grille, permettant la sélection de favoris avec animations, et support multi-langues.
Points à Couvrir
GridView.builderavec 2 colonnesDismissible(swipe pour supprimer)- Animations implicites (
AnimatedOpacity,AnimatedContainer) - Sélection interactive (favoris)
ValueKeypour identifier les images- Internationalisation (i18n) - FR/EN
Fonctionnalités à Implémenter
-
Affichage en grille :
GridView.builder(2 colonnes)- 12-15 images de test (conteneurs colorés ou assets)
- Titre de chaque image
-
Sélection interactive :
- Cliquer pour ajouter/retirer un cœur (favori)
- Animation au clic (opacité ou échelle)
-
Compteur : Afficher "X images favorites"
-
Suppression :
Dismissible- swiper pour supprimer une image -
Actions : Bouton "Réinitialiser les favoris"
-
Clés uniques : Chaque image avec
ValueKey(image.id) -
Internationalisation (i18n) : Labels et boutons en FR/EN
Étapes de Développement Recommandées
- Commencer par l'exercice 2 : Créer et tester le formulaire de saisie
- Puis l'exercice 1 : Créer la liste de contacts en utilisant le formulaire pour ajouter
- Enfin l'exercice 3 : Créer la galerie d'images indépendante
Chaque exercice est une application autonome - pas de lien entre eux pour l'instant.
Exercice 4 : Accessibilité (a11y)
Améliorer l'accessibilité de l'application :
- Ajouter des
SemanticsetsemanticLabelaux images et boutons - Ajouter des
Tooltipexplicites - Assurer la navigation clavier (Tab/Shift+Tab)
- Vérifier les contrastes (WCAG AA minimum)
- Tester avec un lecteur d'écran (VoiceOver/TalkBack)
Exercice 5 : Assets et Ressources
Améliorer la gestion des assets :
- Images : charger les images de la galerie depuis
assets/images/ - Polices : utiliser une police personnalisée pour les titres
- Données : charger une configuration JSON depuis les assets
- Résolutions : gérer les images en @2x et @3x
Structure recommandée :
assets/
images/
gallery/
- img1.png
- img2.png
- ... (15 images)
ui/
- logo.png
- background.jpg
fonts/
- CustomFont-Regular.ttf
- CustomFont-Bold.ttf
data/
- config.json
Exercice 6 : Animations Avancées (BONUS)
Améliorer les animations de la galerie (optionnel) :
- ScaleTransition : animer l'échelle des images au clic
- AnimatedOpacity : fade in/out des images préférées
- RotationTransition : rotation du cœur quand il devient favori
- HeroAnimation : transition fluide vers le détail des images