Flutter & Redux : une recette bien ordonnée avec dispatch
Posté le 22 juin 2025 • 3 min de lecture • 568 motsFlutter propose plusieurs solutions pour la gestion d’état, mais lorsqu’une application devient complexe et nécessite une structure claire, Redux devient un choix pertinent.

Inspiré du modèle de flux unidirectionnel de données, Redux permet de centraliser l’état de l’application et de le modifier via des actions claires, prévisibles et testables.
Le cœur de Redux repose sur trois concepts :
L’objectif de cet article est de comprendre comment utiliser dispatch avec Redux dans Flutter, en gardant une approche simple, pédagogique et rigoureuse.
Avant d’utiliser dispatch, voici comment intégrer Redux dans une application Flutter.
Ajoutez à votre fichier pubspec.yaml :
dependencies:
flutter:
sdk: flutter
flutter_redux: ^0.10.0
redux: ^5.0.0Créez une action simple :
class IncrementAction {}Définissez un reducer :
int counterReducer(int state, dynamic action) {
if (action is IncrementAction) {
return state + 1;
}
return state;
}Initialisez le Store :
final store = Store<int>(counterReducer, initialState: 0);Intégrez le StoreProvider :
return StoreProvider<int>(
store: store,
child: MyApp(),
);Vous êtes maintenant prêt à utiliser dispatch.
La fonction dispatch sert à envoyer une action au reducer via le store. Cela déclenche une transformation de l’état global.
StoreConnector<int, VoidCallback>(
converter: (store) {
return () => store.dispatch(IncrementAction());
},
builder: (context, callback) => ElevatedButton(
onPressed: callback,
child: Text('Incrémenter'),
),
)L’appel à store.dispatch(...) :
Cela garantit une gestion centralisée, un code testable, et un débogage facilité.
Exemple simple :
store.dispatch(IncrementAction());store.dispatch(LoginAction(username: "user", password: "pass"));Dans ce cas, l’action peut déclencher un middleware pour lancer une requête HTTP avant que l’état ne soit modifié.
Couplé avec redux_thunk :
ThunkAction<AppState> fetchData = (Store<AppState> store) async {
store.dispatch(StartLoadingAction());
final data = await fetchFromApi();
store.dispatch(LoadSuccessAction(data));
};Il existe plusieurs approches de gestion d’état dans Flutter. Voici un tableau comparatif :
| Méthode | Centralisation | Simplicité | Scalabilité | Performance | Documentation |
|---|---|---|---|---|---|
setState | ❌ Non | ✅ Facile | ❌ Faible | ✅ Excellente | ✅ Native |
Provider | ✅ Partielle | ✅ Facile | ✅ Moyenne | ✅ Bonne | ✅ Officielle |
Redux | ✅ Totale | ⚠️ Complexe | ✅ Élevée | ✅ Bonne | ✅ Étendue |
Riverpod | ✅ Totale | ✅ Modérée | ✅ Élevée | ✅ Excellente | ✅ Officielle |
BLoC | ✅ Totale | ⚠️ Verbeux | ✅ Élevée | ✅ Très bonne | ✅ Large communauté |
GetX | ✅ Totale | ✅ Très simple | ✅ Moyenne | ✅ Très performante | ⚠️ Moins officiel |
Chaque solution a ses cas d’usage idéaux. Redux reste un bon choix pour les développeurs venant du web ou nécessitant une architecture strictement contrôlée.
Utiliser dispatch avec Redux dans Flutter offre une architecture prévisible, robuste et extensible. Bien qu’elle nécessite une phase d’apprentissage plus exigeante que d’autres solutions, elle permet une meilleure lisibilité du code, un excellent support des tests unitaires, et une gestion claire des flux de données. Pour les projets ambitieux, Redux s’avère être un outil de confiance. Toutefois, il est important de comparer les alternatives pour choisir la méthode qui correspond le mieux à la taille, à la nature et aux besoins de votre projet Flutter.
Pour aller plus loin :