Bonjour à tous,
J’aimerai ouvrir une petite réflexion sur le Navigator 2, je suis très hypé par ce routeur, je l’ai intégré dans qqs application internes mais je reste sur ma faim concernant quelques points. Peut être que je ne l’utilise pas correctement ou que je n’ai pas encore découvert toutes ses possibilité (ce qui est certainement le cas), voici ce qui me dérange un peu :
Le NavigationDelegate saturé
Lorsque l’on a une application utilisant beaucoup d’écrans dans notre application le NavigationDelegate est très vite saturé de petites fonctions permettant l’ouvertures de nouvelles pages.
Exemple :
@override
void openAddServicePage() {
pageEnCours = PageType.service;
serviceSubPage = ServiceSubPage.newService;
addServicePageViewmodel.reset();
notifyListeners();
}
@override
void openDeleteCurrentServicePage() {
pageEnCours = PageType.service;
serviceSubPage = ServiceSubPage.deleteService;
notifyListeners();
}
@override
void openSelectServicePage() {
pageEnCours = PageType.service;
serviceSubPage = ServiceSubPage.selectService;
notifyListeners();
}
@override
void openSettingsPage() {
pageEnCours = PageType.parametres;
settingSubPage = null;
notifyListeners();
}
@override
void openSettingsRegionSelector() {
pageEnCours = PageType.parametres;
settingSubPage = SettingSubPage.regionSelector;
notifyListeners();
}
etc...
Je pourrais peut être utiliser une fonction avec des paramètres, mais j’aime bien l’idée de pouvoir séparer les fonctions cela me permet ensuite de découper mes PagesRouter en fonction des différentes sections de mon application
Exemple :
abstract class ServiceRouter {
void openAddServicePage();
void openSelectServicePage();
void showServiceTab({int idService = 0});
void reloadApp();
void openDeleteCurrentServicePage();
}
abstract class SettingsRouter {
void openSettingsPage();
void openSettingsRegionSelector();
void openSettingsDepartementSelector();
void openSettingsDatabaseUpdater();
void reloadSearchController();
void reloadApp();
void openSettingsContactListPage();
void openSettingsContactCreatePage(String? idBrigade);
void openSettingsContactViewPage(int idContact);
void openSettingsContactEditPage(int idContact);
}
Ainsi dans mes Viewmodel j’appelle le router qui me convient, la programmation est plus propre (avis très subjectif )
Qu’en pensez vous ? Avez vous des idées ?
Une piste me vient à l’esprit et c’est une transition toute trouvée pour la suite.
Utiliser plusieurs Navigator ?
Le titre parle de lui même, est il possible d’utiliser plusieurs Navigator dans la même application ?
Prenons l’exemple d’un site web, j’ai plusieurs sections dans mon site :
- Blog
- Contact
- Page d’erreur
- Forum
Si les sections Contact et page d’erreur ne seraient composées que d’une seule page, les sections Blog et Forum le seront de beaucoup plus.
Donc l’idée serait d’avoir un Navigator principal qui gère un premier niveau l’accès aux sections.
Ensuite dans les sections on pourrait avoir un second Navigator qui gère les pages, et une page pourrait contenir elle même un Navigator s’il y a plusieurs sous page etc…
Cela donnerait par exemple :
Cela est il possible ?
Il faudrait garder la gestion des URL, comment alors gérer nos NavigationRouteParser pour que cela fonctionne ?
J’aime bien l’idée de pouvoir séparer en sections, aussi les sections devraient pouvoir être autonomes mais il devrait être possible d’ouvrir la page contact depuis par exemple un article du blog.
Conclusion
Je pense que le Navigator est un très bon outil, et je rejoint @mbritto sur l’envie d’utiliser le moins possible de librairies externes c’est pour cette raison que je n’ai pas cherché bonheur sur pub.dev.
J’ai la conviction qu’il est possible de réaliser cela avec Flutter et aujourd’hui je suis à la recherche du « comment réaliser cela ? ».
Aussi le sujet est lancé et je suis extrêmement curieux de connaitre votre expérience et vos idées !