| Application de Gestion de Tâches 📅

Présentation

Task_Manage_App est une application iOS développée en Swift avec l'IDE Xcode. Elle a été conçue en suivant l'architecture MVVM (Modèle-Vue-Vue-Modèle). 📝✅


Caractéristiques principales :


  • Créez, affichez et gérez vos tâches avec facilité.
  • Suivez l'état et la priorité de chaque tâche.
  • Visualisez les détails de chaque tâche grâce à la vue en liste ou à la vue détaillée.
  • L'architecture MVVM favorise la séparation claire des responsabilités entre les modèles, les vues et les vues-modèles, rendant le code plus maintenable. 🏗️

Pourquoi utiliser l'architecture MVVM :

L'architecture MVVM (Modèle-Vue-Modèle-Vue) présente les avantages suivants :

  • Séparation des Responsabilités : MVVM sépare clairement la logique métier (modèle), l'interface utilisateur (vue) et la logique de présentation (vue-modèle), facilitant ainsi la maintenance et les tests.
  • Réutilisation de la Logique de Présentation : La vue-modèle peut être réutilisée pour différents types de vues, ce qui permet de maintenir une logique de présentation cohérente.
  • Testabilité : En isolant la logique de présentation dans la vue-modèle, il est plus facile de tester l'application.
tache1 tache2 tache3

Les Technologies utilisées

Swift

Listing des fonctionnalités du programme

- Fichier ContentView.swift

ContentView : Définit la vue principale de l'application.

var viewModel: TaskViewModel : Déclare une propriété observée pour le modèle de vue TaskViewModel.

@State private var isAddingTask = false : Déclare une variable d'état pour suivre l'état d'ajout d'une tâche.

@State private var selectedTask: Task? = nil : Déclare une variable d'état pour suivre la tâche sélectionnée.

@State private var isShowingAddTaskView = false : Déclare une variable d'état pour suivre l'état d'affichage de la vue d'ajout de tâche.

@State private var newTaskTitle = "" : Déclare une variable d'état pour stocker le titre de la nouvelle tâche.

@State private var newTaskDescription = "" : Déclare une variable d'état pour stocker la description de la nouvelle tâche.

@State private var newTaskDueDate = Date() : Déclare une variable d'état pour stocker la date d'échéance de la nouvelle tâche, initialisée à la date actuelle.

private let dateFormatter: DateFormatter : Déclare un formateur de date pour afficher les dates.

func getTaskStateColor(task: Task) -> Color : Définit une fonction pour obtenir la couleur d'état de la tâche en fonction de son état.

var body: some View : Définit le corps de la vue ContentView.

func getTaskStateLabel(task: Task) -> String : Définit une fonction pour obtenir l'étiquette d'état de la tâche.

struct ContentView_Previews: PreviewProvider : Définit la structure pour afficher un aperçu de ContentView.

- Fichier Gestion_TasksApp.swift

import SwiftUI : Importe le framework SwiftUI.

@main struct Gestion_TasksApp: App : Définit la structure Gestion_TasksApp comme point d'entrée de l'application, conforme au protocole App.

var body: some Scene : Déclare la variable body qui représente une scène.

WindowGroup : Définit un groupe de fenêtres.

ContentView(viewModel: TaskViewModel()) : Affiche la vue ContentView avec un ViewModel TaskViewModel.

- Fichier Task.swift

import Foundation : Importe le framework Foundation.

struct Task : Identifiable : Définit une structure Task qui se conforme au protocole Identifiable.

var id = UUID() : Déclare une variable id qui est initialisée avec un UUID, utilisée pour identifier de manière unique chaque instance de Task.

var title: String : Déclare une variable title de type String, qui représente le titre de la tâche.

var dueDate: Date : Déclare une variable dueDate de type Date, qui représente la date d'échéance de la tâche.

var description: String : Déclare une variable description de type String, qui représente la description de la tâche.

var isCompleted: Bool : Déclare une variable isCompleted de type Bool, qui indique si la tâche est terminée ou non (par défaut à false).

var isSuspended: Bool : Déclare une variable isSuspended de type Bool, qui indique si la tâche est suspendue ou non (par défaut à false).

init(title: String, dueDate: Date, description: String, isCompleted: Bool = false, isSuspended: Bool = false) : Initialise une instance de Task avec les valeurs spécifiées pour le titre, la date d'échéance, la description, isCompleted et isSuspended.

- Fichier TaskViewModel.swift

import Foundation : Importe le framework Foundation.

class TaskViewModel: ObservableObject : Définit une classe TaskViewModel qui se conforme au protocole ObservableObject.

@Published var tasks: [Task] = [] : Déclare une propriété tasks, publiée, de type tableau de Task, initialisée à un tableau vide.

func addTask(title: String, dueDate: Date, description: String) : Ajoute une nouvelle tâche à la liste de tâches avec le titre, la date d'échéance et la description spécifiés.

func updateTask(task: Task, newTitle: String, newDescription: String, newdueDate: Date) : Met à jour les détails de la tâche spécifiée avec les nouveaux titre, description et date d'échéance.

func deleteTask(task: Task) : Supprime la tâche spécifiée de la liste des tâches.

func stateTask(task: Task) -> String : Retourne l'état actuel de la tâche spécifiée, qui peut être "En retard", "Terminée", "En suspend" ou "À faire".

- Fichier TaskDetailView.swift

import SwiftUI : Importe le framework SwiftUI.

struct TaskDetailView: View : Définit une vue TaskDetailView.

@ObservedObject var viewModel: TaskViewModel : Déclare une propriété viewModel, observée, de type TaskViewModel.

var task: Task : Déclare une propriété task de type Task.

@State private var isEditing = false : Déclare une propriété isEditing, privée, qui indique si la vue est en mode édition ou non.

@State private var newTitle = "" : Déclare une propriété newTitle, privée, pour stocker le nouveau titre de la tâche en cours d'édition.

@State private var newDescription = "" : Déclare une propriété newDescription, privée, pour stocker la nouvelle description de la tâche en cours d'édition.

@State private var newdueDate = Date() : Déclare une propriété newdueDate, privée, pour stocker la nouvelle date d'échéance de la tâche en cours d'édition.

var body: some View : Définit le corps de la vue.

var formattedDueDate: String : Déclare une propriété computed pour formater la date d'échéance.

Code

- Fichier ContentView.swift

code-content-view code-content-view22 code-content-view33

- Fichier Gestion_TasksApp.swift

code-gestiontasksapp

- Fichier Task.swift

code-task

- Fichier TaskViewModel.swift

code-taskviewmodel

- Fichier TaskDetailView.swift

code-taskdetailview code-tasksdetailview2

Sauvegarde du projet

Chaque nouvelle version de ce projet est "poussée" sur la branche principale (main) du projet sur le dépôt distant Github.

depot-projet-github