Projet Flutter : Application de Gestion des Utilisateurs (CRUD) -1
Projet Flutter : Application de Gestion des Utilisateurs (CRUD)
-
Description du Projet
- L’objectif de ce projet est de créer une application mobile en utilisant le framework Flutter qui permettra de gérer les utilisateurs en effectuant les opérations CRUD (Create, Read, Update, Delete) sur une base de données SQLite.
- Cette application servira de guide pour les apprenants qui souhaitent développer leurs compétences en programmation Flutter.
-
Objectifs du Projet
- Développer une application mobile interactive en utilisant Flutter pour gérer des données utilisateur.
- Mettre en œuvre des opérations CRUD (Create, Read, Update, Delete) pour la gestion des utilisateurs.
- Utiliser une base de données SQLite locale pour stocker et récupérer les données utilisateur.
- Créer une interface utilisateur conviviale avec des écrans dédiés pour l’ajout, l’édition, la visualisation et la suppression des utilisateurs.
- Organiser et structurer le code de manière modulaire pour une maintenance facile et une extensibilité future.
-
Structure de la Base de Données
- Nous allons créer une base de données SQLite nommée ‘db_crud.db’ qui contiendra une seule table appelée ‘users’. Voici la structure de la table :
- Tableau « users »
-
Structure du Projet
- Le projet sera organisé en suivant la structure de répertoires suivante :
- db_helper: Ce dossier contient tous les fichiers relatifs à la gestion de la base de données. Il sert d’abstraction pour vos opérations CRUD et la gestion de la connexion à la base de données.
- modèle: Ce dossier contient les modèles de données de votre application. Dans ce cas, vous avez un modèle User qui représente les données d’un utilisateur.
- screens: Ici, vous avez tous les écrans/UI de votre application. Chaque fichier représente une page ou un écran distinct. C’est une bonne pratique car cela permet de séparer et de gérer chaque écran individuellement.
- services: Les services sont une couche d’abstraction entre vos écrans/UI et vos opérations de données. Dans ce cas, UserService fournit des méthodes spécifiques pour gérer la logique métier des utilisateurs.
- main.dart: C’est le point d’entrée de votre application. C’est le fichier qui est exécuté en premier lorsque votre application démarre.
- Cette structure est logique, modulaire et facilite la gestion et l’évolutivité de votre application. Elle permet également une meilleure collaboration entre les développeurs car chaque composant ou fonctionnalité est bien séparé.
-
Fonctionnalités Clés
- L’application offrira les fonctionnalités suivantes :
- 1. **Ajouter un Utilisateur** : Les utilisateurs pourront ajouter de nouvelles entrées avec leur nom, numéro de contact et une description.
- 2. **Afficher la Liste des Utilisateurs** : Une liste de tous les utilisateurs existants sera affichée avec des fonctionnalités pour éditer et supprimer chaque utilisateur.
- 3. **Éditer un Utilisateur** : Les utilisateurs pourront modifier les informations d’un utilisateur existant.
- 4. **Supprimer un Utilisateur** : Les utilisateurs pourront supprimer un utilisateur de la liste.
-
Objectifs d’apprentissage
- Ce projet permettra aux apprenants de développer les compétences suivantes :
-
Guide de réalisation
- Ce guide de projet fournira des instructions étape par étape, des exemples de code et des ressources pour aider les apprenants à développer cette application de gestion des utilisateurs.
-
Fichier
database_connection.dart
- Le fichier database_connection.dart est responsable de la gestion de la connexion à la base de données SQLite dans votre application.
- ce fichier définit la classe DatabaseConnection qui gère la connexion à la base de données SQLite en créant la base de données si elle n’existe pas et en définissant la structure de la table « users ». Cela permet à d’autres parties de votre application d’utiliser cette classe pour accéder à la base de données SQLite de manière organisée.
- Voici une description détaillée du contenu de ce fichier :
- Importations de packages :
import 'package:sqflite/sqflite.dart'
; : Importe la bibliothèque sqflite, qui fournit des fonctionnalités pour interagir avec les bases de données SQLite.import 'package:path/path.dart';
: Importe la bibliothèque path pour manipuler les chemins de fichiers.import 'package:path_provider/path_provider.dart';
: Importe la bibliothèque path_provider, qui permet d’obtenir le répertoire de stockage de l’application.- Définition de la classe DatabaseConnection :
- class
DatabaseConnection
: Déclare une classe nommée DatabaseConnection pour gérer la connexion à la base de données SQLite. - Méthode
setDatabase()
: Future<Database> setDatabase() async
: Cette méthode asynchrone est utilisée pour créer et configurer la connexion à la base de données SQLite.await getApplicationDocumentsDirectory()
: Obtient le répertoire de documents de l’application où la base de données sera stockée.var path = join(directory.path, 'db_users_crud');
: Crée le chemin complet du fichier de base de données en joignant le répertoire de documents et le nom de la base de données (‘db_users_crud’ dans ce cas).await openDatabase(path, version: 1, onCreate: _createDatabase);
: Ouvre la base de données SQLite en utilisant le chemin path, en spécifiant la version (1) et en indiquant la fonction _createDatabase qui sera appelée si la base de données n’existe pas.return database;
: Renvoie la connexion à la base de données SQLite créée.- Méthode
_createDatabase()
: Future<void> _createDatabase(Database database, int version) async
: Cette méthode privée asynchrone est appelée lors de la création de la base de données.String sql = "CREATE TABLE users (...);"
: Définit une requête SQL pour créer une table appelée « users » avec des colonnes spécifiées (id, name, contact, description).await database.execute(sql);
: Exécute la requête SQL pour créer la table dans la base de données.-
Fichier
repository.dart
- Ce fichier repository.dart est responsable de l’encapsulation des opérations CRUD (Create, Read, Update, Delete) pour interagir avec la base de données SQLite à travers la classe Repository.
- Ce fichier repository.dart encapsule la logique d’accès à la base de données SQLite en fournissant des méthodes pour effectuer des opérations CRUD.
- Il utilise la classe
DatabaseConnection
pour établir et gérer la connexion à la base de données. Cette structure facilite la réutilisation des opérations de base de données dans d’autres parties de l’application sans avoir à répéter la logique d’accès à la base de données. - Voici une description détaillée du contenu de ce fichier :
- Importations de packages :
import 'package:projet_sqlite_users/db_helper/database_connection.dart';
: Importe la classe DatabaseConnection depuis un autre fichier pour gérer la connexion à la base de données.-
import 'package:sqflite/sqflite.dart';
: Importe la bibliothèque sqflite, qui fournit des fonctionnalités pour interagir avec les bases de données SQLite. - Définition de la classe Repository :
class Repository
: Déclare une classe Repository qui sera responsable de l’interaction avec la base de données.late DatabaseConnection _databaseConnection;
: Déclare un attribut _databaseConnection de type DatabaseConnection qui sera utilisé pour gérer la connexion à la base de données SQLite.- Attribut statique _database :
static Database? _database;
: Déclare un attribut statique _database de type Database pour stocker la référence à la base de données SQLite. La base de données est partagée entre toutes les instances de la classe Repository.- Méthode database :
Future<Database?> get database async
: Cette méthode permet d’obtenir la connexion à la base de données asynchrone. Si la connexion n’a pas encore été établie, elle appelle la méthode setDatabase() de _databaseConnection pour la créer.if (_database != null)
: Vérifie si la connexion à la base de données existe déjà._database = await _databaseConnection.setDatabase();
: Si la connexion n’existe pas, elle est créée en appelant setDatabase() de la classe DatabaseConnection.return _database;
: Renvoie la connexion à la base de données.- Méthodes CRUD :
insertData(table, data) async, readData(table) async,
: Ces méthodes effectuent respectivement les opérations CRUD sur la base de données en utilisant la connexion obtenue par la méthode database. Elles prennent en paramètres le nom de la table (table) et les données associées (data ou itemId pour certaines méthodes)
readDataById(table, itemId) async,
updateData(table, data) async,
deleteDataById(table, itemId) async-
Fichier
user.dart
- Quel est le but de cette classe User ?
- Etablir la raison d’être de la classe User et introduire le concept de modèle de données.
- Quels attributs (variables membres) devez-vous définir dans la classe User pour représenter un utilisateur ?
- Identifier les attributs nécessaires pour stocker les données d’un utilisateur, tels que id, name, contact, et description.
- Pourquoi certains attributs sont-ils définis comme int? et d’autres comme String? ?
- Le type de données des attributs et pourquoi ils pourraient être définis comme optionnels (int?, String?) ou non-optionnels (int, String).
- Quelle est la méthode userMap destinée à faire ?
- La méthode userMap est utilisée pour convertir un objet User en un Map de type
qui peut être utilisé pour insérer des données dans la base de données SQLite. - Quels attributs de la classe User sont inclus dans le Map retourné par userMap ?
- Ils devraient identifier que les attributs id, name, contact, et description sont inclus dans le Map.
- Pourquoi y a-t-il un point d’exclamation (!) après name et contact dans la méthode userMap ?
- Expliquez-leur le concept de non-nullabilité et pourquoi ces attributs peuvent être forcés (!) s’ils sont censés toujours contenir une valeur non nulle.
- Comment utiliseriez-vous cette classe User dans votre application ?
- Réfléchir à l’utilisation de la classe User pour créer, lire, mettre à jour et supprimer des utilisateurs dans l’application.
-
– **Id** (INTEGER) : Clé primaire pour identifier de manière unique chaque utilisateur.
– **Name** (TEXT) : Champ pour stocker le nom de l’utilisateur.
– **Contact** (TEXT) : Champ pour stocker le numéro de contact de l’utilisateur.
– **Description** (TEXT) : Champ pour stocker une description (exemple : informations supplémentaires sur l’utilisateur).
« `
Lib
│
├── db_helper
│ ├── database_connection.dart : Gestion de la connexion à la base de données.
│ └── repository.dart : Opérations CRUD génériques pour la base de données.
│
├── modèle
│ └── User.dart : Définition du modèle « User » pour représenter les données d’un utilisateur.
│
├── screens
│ ├── AddUser.dart : Écran pour ajouter un nouvel utilisateur.
│ ├── EditUser.dart : Écran pour éditer les informations d’un utilisateur existant.
│ ├── ViewUsers.dart : Écran pour afficher la liste des utilisateurs et effectuer des opérations CRUD.
│ └── home.dart : Écran principal ou page d’accueil de l’application.
│
├── services
│ └── UserService.dart : Service spécifique pour gérer la logique métier des utilisateurs.
│
└── main.dart : Point d’entrée de l’application contenant la fonction main().
« `
-
– Création et gestion d’une base de données SQLite dans Flutter.
– Mise en place de l’architecture de base pour une application Flutter.
– Gestion de l’interface utilisateur avec des écrans pour l’ajout, l’édition et la visualisation des utilisateurs.
– Implémentation des opérations CRUD (Create, Read, Update, Delete) sur la base de données SQLite.
– Organisation et structuration d’un projet Flutter pour une meilleure maintenance.
Attribut _databaseConnection
:
.
Résultat attendu du projet