Bonjour à tous,
Je travaille sur une application Flutter utilisant la Clean Architecture, et je rencontre un problème concernant l’affichage d’un dialogue avec Navigator 2.0. Voici le contexte :
- Mon application suit les principes de la Clean Architecture avec des couches bien définies (Présentation, Domaine, Data).
- Dans la couche Présentation, j’utilise des Presenters (ou ViewModels) pour la logique de présentation.
- Je dois afficher un dialogue lorsque l’utilisateur appuie sur un bouton, permettant de sélectionner un élément dans une liste.
- Le Presenter doit pouvoir récupérer l’élément sélectionné pour mettre à jour l’état de l’application.
Mes questions sont les suivantes :
- Dans quelle couche et quel composant devrais-je déclarer mon dialogue ?
- Comment gérer l’appel du dialogue tout en respectant les principes de la Clean Architecture et de Navigator 2.0 ?
- Quelle serait la meilleure façon de communiquer le résultat du dialogue au Presenter ?
J’aimerais comprendre la meilleure approche pour implémenter cela tout en maintenant une séparation claire des responsabilités et en évitant les dépendances circulaires.
Merci d’avance pour vos conseils et suggestions !
Pour l’instant je wrap ma vue dans un StreamBuilder et je gère les envoie de dialog depuis mon ViewModel, si vous avez mieux je suis preneur, si vous avez mieux je suis toujours preneur.
Dans mon écran, j’ai créé une fonction qui appelle ma boîte de dialogue qui appelle ma fonction dans mon viewModel…
Ce n’est pas tout à fait le même problème mais ça peut te donner une piste de solution.
// affiche une boite de dialogue
showAlertDialog(BuildContext context, String errorMessage) {
// set up the buttons
Widget okButton = TextButton(
child: const Text(« OK »),
onPressed: () {
Navigator.of(context).pop();
},
);
// set up the AlertDialog
AlertDialog alert = AlertDialog(
title: const Text("Attention"),
content: Text(errorMessage),
actions: [okButton],
);
// show the dialog
showDialog(
context: context,
builder: (BuildContext context) {
viewModel.afterAlertDialog;
return alert;
},
);
}
Hello @Bigpers,
Tu peux considérer ton dialogue, comme un écran lié à ton écran principal. Pas besoin d’informer ton navigator lorsqu’il s’ouvre. Sinon tu vas complexifier ton code pour pas grand chose. Et tu gardes un seul viewmodel pour les deux.
Par contre, c’est mieux sur les boutons de ton dialogue qui vont induire une navigation arrière ou sur un autre écran de passer par une fonction du type onValidateButtonTouched plutôt que d’utiliser le Navigator.of(context).pop(); dans ta vue.