Aller au contenu principal

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 :

  1. Setup (30 min)

    • Créez la structure de dossiers
    • Configurez pubspec.yaml
    • Créez le fichier JSON initial
  2. Modèle (1h)

    • Créez la classe Contact
    • Implémentez toJson/fromJson
    • Testez avec main simple
  3. Services (2h)

    • Créez ContactService
    • Créez FichierService avec JSON
    • Testez sauvegarde/chargement
  4. Controller (1h30)

    • Créez ContactController
    • Implémentez le menu
    • Gèrez les interactions
  5. Intégration (1h)

    • Connectez tout
    • Testez toutes les fonctionnalités
    • Corrigez les bugs
  6. 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 :

  1. Comment créer une classe en Dart ?
  2. Comment gérer les exceptions ?
  3. Comment utiliser JSON en Dart ?
  4. Comment organiser en packages ?
  5. 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.