Fiche 05.02 — Navigation programmatique avec routes enum
Objectif
Comprendre comment déclencher une navigation depuis une action : bouton, résultat d’API, connexion réussie ou sélection métier.
1. Pourquoi la navigation programmatique ?
NavigationLink est très pratique quand l’utilisateur clique directement sur une cellule.
Mais parfois, la navigation dépend d’une logique :
- après un login réussi ;
- après la création d’un compte ;
- après un scan terminé ;
- après le choix d’un élément dans une action custom ;
- après un appel réseau.
Dans ce cas, on peut piloter la navigation avec un état.
2. Créer une enum Route
Une route représente un écran possible.
Hashable est nécessaire pour être utilisé avec la navigation typée.
3. Navigation avec path
Ici, on ne met pas directement l’écran dans le bouton. On ajoute une route dans path, et SwiftUI affiche l’écran correspondant.
4. Navigation après action asynchrone
Exemple simplifié après connexion :
Dans une vraie app, le ViewModel peut exposer un état, et la vue réagit à cet état pour naviguer.
5. Navigation et ViewModel
Le ViewModel ne devrait pas forcément connaître NavigationStack. Il peut simplement dire :
Puis la vue déclenche la navigation :
Cela garde le ViewModel testable et évite de mélanger UIKit/SwiftUI navigation avec la logique métier.
Points à connaître
Une enum Route rend la navigation plus propre qu’une accumulation de booléens.
Pour une app simple, inutile de créer un router compliqué. Un path local ou un état de navigation suffit souvent.
Pour une app plus grande, on peut créer un objet Router, mais ce n’est pas obligatoire au début.
Résumé
- La navigation programmatique sert quand la navigation dépend d’une action.
- Une enum
Routereprésente les écrans possibles. NavigationStack(path:)permet d’ajouter ou retirer des routes..navigationDestination(for:)convertit une route en écran.- Le ViewModel peut signaler un événement, et la vue gère la navigation.