Fiche 03.02 — Créer un bouton réutilisable en SwiftUI
Objectif
Comprendre comment créer un bouton SwiftUI réutilisable, configurable, propre, et utilisable dans plusieurs écrans de l’app.
1. L’idée à comprendre
Dans une app, tu vas souvent répéter les mêmes styles de boutons :
- bouton principal ;
- bouton secondaire ;
- bouton dangereux ;
- bouton désactivé ;
- bouton avec icône ;
- bouton loading.
Au lieu de recopier ce style partout :
Tu peux créer un composant réutilisable :
C’est plus propre, plus lisible, et plus facile à modifier dans toute l’app.
2. Bouton simple réutilisable
Utilisation :
Ici :
titlepermet de personnaliser le texte ;actionpermet de personnaliser ce qui se passe au clic ;- le style reste centralisé dans
PrimaryButton.
3. Bouton avec état désactivé
Un bouton doit souvent être désactivé si un formulaire est incomplet.
Utilisation :
4. Bouton avec loading
Cas très fréquent : pendant une requête API, le bouton affiche un loader et ne doit plus être cliquable.
Utilisation :
5. Bouton avec icône
Tu peux ajouter une icône optionnelle.
Utilisation :
Label est pratique pour afficher texte + icône.
6. Bouton secondaire
Un bouton secondaire peut avoir un fond plus discret.
Utilisation :
7. Bouton dangereux
Pour une action destructive, comme supprimer un compte ou effacer des données, tu peux créer un bouton dédié.
Utilisation :
8. Version avec style enum
Si tu veux éviter plusieurs fichiers PrimaryButton, SecondaryButton, DestructiveButton, tu peux créer un seul composant avec un style.
Utilisation :
9. Bouton avec contenu personnalisable
Si tu veux un bouton très flexible, tu peux accepter une vue personnalisée comme label.
Utilisation :
C’est utile si certains boutons ont des labels plus complexes.
10. Où ranger les boutons ?
Pour un petit projet :
Pour un projet plus structuré :
Si le bouton est utilisé partout dans l’app, il va dans Shared/Components.
S’il est spécifique à une feature, il peut rester dans la feature.
11. Preview du bouton
Cette preview permet de vérifier rapidement tous les états du bouton.
12. Points à connaître
Ne mets pas toute la logique métier dans le bouton
Le bouton doit afficher et déclencher une action.
Il ne doit pas contenir toute la logique de connexion, suppression, appel API, etc.
Préférable :
Le bouton déclenche.
Le ViewModel gère la logique.
Utilise une closure pour l’action
C’est la manière la plus simple de rendre un bouton réutilisable.
Gère le loading et le disabled
Dans une vraie app, un bouton doit souvent gérer :
C’est important pour éviter les doubles clics et améliorer l’expérience utilisateur.
Attention aux couleurs fixes
Pour un vrai design system, évite de mettre .blue, .red, .gray partout.
Plus tard, tu pourras remplacer par des couleurs centralisées :
Résumé
À retenir :
- un bouton réutilisable évite de répéter le même style partout ;
- le texte est souvent passé avec
title; - l’action est passée avec une closure
() -> Void; - un bon bouton gère souvent
isLoadingetisDisabled; - tu peux avoir plusieurs composants ou un seul bouton avec un enum de style ;
Labelest pratique pour un bouton avec icône ;@ViewBuilderpermet de personnaliser totalement le contenu du bouton ;- le bouton ne doit pas contenir la logique métier, il doit seulement déclencher une action.