Module Dart.11 – Mini-projet
Objectif
Créer une application Dart console ou Flutter simple complète pour valider toutes les compétences Dart acquises.
Théorie
Application : Gestionnaire de contacts
Application complète utilisant toutes les fonctionnalités Dart apprises.
Spécifications du projet
Fonctionnalités
1. CRUD complet (Create, Read, Update, Delete)
- Créer un nouveau contact
- Afficher tous les contacts
- Modifier un contact existant
- Supprimer un contact
2. POO complète
- Classes avec encapsulation
- Héritage si approprié
- Mixins pour réutilisabilité
- Polymorphisme
3. Null safety
- Utilisation appropriée de null safety
- Opérateurs null-aware
- Gestion des valeurs nullable
4. Persistance
- Sauvegarde en JSON
- Chargement au démarrage
- Gestion d'erreurs de fichier
5. Interface console
- Menu interactif
- Affichage formaté
- Validation des entrées
Structure de données
class Contact {
int id;
String nom;
String? email;
String? telephone;
DateTime dateCreation;
Contact({
required this.id,
required this.nom,
this.email,
this.telephone,
required this.dateCreation,
});
Map<String, dynamic> toJson() {
return {
'id': id,
'nom': nom,
'email': email,
'telephone': telephone,
'dateCreation': dateCreation.toIso8601String(),
};
}
factory Contact.fromJson(Map<String, dynamic> json) {
return Contact(
id: json['id'],
nom: json['nom'],
email: json['email'],
telephone: json['telephone'],
dateCreation: DateTime.parse(json['dateCreation']),
);
}
}
Architecture recommandée
Structure :
contacts/
├── lib/
│ ├── main.dart
│ ├── models/
│ │ └── contact.dart
│ ├── services/
│ │ ├── contact_service.dart
│ │ └── fichier_service.dart
│ └── controllers/
│ └── contact_controller.dart
├── data/
│ └── contacts.json
├── pubspec.yaml
└── README.md
Guide de développement
Étape 1 : Modèle
// models/contact.dart
class Contact {
// Propriétés, constructeurs, toJson, fromJson
}
Étape 2 : Service de données
// services/contact_service.dart
class ContactService {
List<Contact> contacts = [];
void ajouter(Contact contact) {}
Contact? trouver(int id) {}
void modifier(Contact contact) {}
void supprimer(int id) {}
List<Contact> lister() {}
}
Étape 3 : Persistance
// services/fichier_service.dart
import 'dart:convert';
import 'dart:io';
class FichierService {
Future<void> sauvegarder(List<Contact> contacts) async {
// Convertir en JSON et sauvegarder
}
Future<List<Contact>> charger() async {
// Lire et parser JSON
}
}
Étape 4 : Controller
// controllers/contact_controller.dart
class ContactController {
ContactService service = ContactService();
FichierService fichierService = FichierService();
Future<void> demarrer() async {
await chargerDonnees();
afficherMenu();
}
void afficherMenu() {}
void creerContact() {}
void listerContacts() {}
void modifierContact() {}
void supprimerContact() {}
}
Étape 5 : Main
// main.dart
import 'controllers/contact_controller.dart';
void main() async {
var controller = ContactController();
await controller.demarrer();
}
Critères d'évaluation
Fonctionnalité (40%) :
- CRUD complet fonctionnel
- Persistance JSON opérationnelle
- Interface utilisateur claire
Code (30%) :
- POO bien utilisée
- Architecture organisée
- Code propre et commenté
Dart (20%) :
- Utilisation appropriée des concepts
- Null safety correct
- Gestion d'exceptions
Documentation (10%) :
- dartdoc complet
- README avec instructions
Exercice - Développement
Suivez ces étapes :
-
Setup (30 min)
- Créez la structure de dossiers
- Configurez pubspec.yaml
- Créez le fichier JSON initial
-
Modèle (1h)
- Créez la classe Contact
- Implémentez toJson/fromJson
- Testez avec main simple
-
Services (2h)
- Créez ContactService
- Créez FichierService avec JSON
- Testez sauvegarde/chargement
-
Controller (1h30)
- Créez ContactController
- Implémentez le menu
- Gèrez les interactions
-
Intégration (1h)
- Connectez tout
- Testez toutes les fonctionnalités
- Corrigez les bugs
-
Améliorations (1h)
- Ajoutez exceptions personnalisées
- Améliorez l'UX
- Finalisez la documentation
Quiz de révision
Avant de commencer, vérifiez vos connaissances :
- Comment créer une classe en Dart ?
- Comment gérer les exceptions ?
- Comment utiliser JSON en Dart ?
- Comment organiser en packages ?
- Comment créer un menu console ?
Ressources
Si vous êtes bloqué :
- Revisitez les modules précédents
- Documentation Dart officielle : dart.dev
- Stack Overflow
Bonnes pratiques :
- Code organisé
- POO bien utilisée
- Null safety approprié
- Gestion d'erreurs
- Documentation complète
Objectif final
Créer une application Dart console complète qui démontre :
- Maîtrise de la syntaxe Dart
- Compréhension de la POO
- Utilisation du null safety
- Gestion des exceptions
- Manipulation de fichiers et JSON
- Architecture professionnelle
- Bonnes pratiques
Validation : Vous avez terminé Dart quand votre application est fonctionnelle, bien structurée et utilise toutes les fonctionnalités apprises.
Félicitations ! Vous avez terminé l'apprentissage complet de Dart. Vous êtes maintenant capable de créer des applications Dart professionnelles et êtes prêt pour Flutter.