Mettre les composables dans une structure appropriée
Dans l’article précédent, les bases de la navigation avec NavHost
et NavController
ont été décrites. Cependant, avec des applications plus complexes, le graphique de navigation de l’application peut devenir désordonné et entraîner des erreurs redondantes dans le code. La structure de l’application peut la rendre beaucoup plus testable, évolutive et plus facile à corriger. Allez ici pour la configuration de base :
L’approche la plus simple serait de mettre tous les écrans en un seul NavHost
. Mais on peut faire mieux avec l’imbrication des graphes.
Comme il se passe dans la programmation, nous voulons séparer notre logique. Les multiples chemins peuvent être regroupés en graphiques comme l’introduction, l’écran principal ou autres. Alors, jetons un coup d’œil.
La démonstration se fera sur un flux de travail d’introduction simple et un écran d’accueil principal, qui peut aller sur d’autres écrans. Tout d’abord, nous voulons présenter l’application, motiver l’utilisateur et lui donner quelques recommandations d’utilisation. Ensuite, l’utilisateur peut utiliser l’application dans la navigation principale.
La division de la navigation peut se faire comme ceci :
Le graphique est créé avec le NavGraphBuilder
qui peut déclarer composables
et séparez-les dans des fichiers séparés. De plus, il peut être nommé comme vous le souhaitez. Le générateur encapsule le composant de navigation avec ses destinations.
Route est un chemin unique vers l’écran/
composable
. Chaque écran/composable
a son parcours. Cependant, la destination peut apparaître dans la documentation ou comme nom de paramètre. En d’autres termes, chaque écran est une destination vers laquelle nous devons emprunter un itinéraire unique. Il en va de même pour les graphes uniques, où chaque graphe a sa propre route. C’est pourquoi nous définissons, par exemple,INTRO_ROUTE
tracer un graphique etINTRO_WELCOME_SCREEN
à un écran spécifique/composable
.
Avec les graphiques créés, nous pouvons les déclarer dans l’activité racine de l’application. Les graphiques sont enveloppés dans un seul NavHost
. Les navController
est initialisé à la racine et transmis à chaque graphique afin qu’il soit partagé entre eux. Chaque écran doit avoir accès au navController
aussi.
Désormais, tous les écrans ne contiendront que deux boutons pour avancer et reculer pour plus de simplicité. La seule chose qui changera, c’est onClick
l’action des boutons. Par example:
Maintenant, les écrans et les graphiques sont implémentés. La dernière pièce manquante est la navigation d’un écran à l’autre. L’exemple suivra le flux de l’utilisateur.
La destination de départ est marquée comme introduction à l’application, de sorte que le graphique d’introduction est choisi comme destination de départ. Si un utilisateur souhaite quitter l’écran d’accueil actuel, les .navigate()
et .popStack()
suffisent à utiliser.
navController.navigate(IntroNav.INTRO_MOTIVATION_SCREEN)
// or to go back
navController.popBackStack()
En naviguant dans l’intro, la pile se remplit de tous les écrans. Si nous passons à un autre graphique et cliquons sur le bouton de retour, nous arriverons toujours à l’écran précédent. En naviguant vers l’écran d’accueil, la pile doit être nettoyée à partir de l’écran d’introduction. Voilà le popUpTo()
fonction et NavOptionsBuilder
. Le constructeur, un paramètre de la fonction de navigation, peut faire apparaître la pile jusqu’au début du graphe. Pour supprimer un graphique et accéder à un autre :
// moving to the main graph route
navController.navigate(MainNav.MAIN_ROUTE) {
// removing everything reagrding intro (incliding the intro route itself)
popUpTo(IntroNav.INTRO_ROUTE)
}
Cela ne signifie pas que vous ne pouvez pas imbriquer deux graphiques l’un dans l’autre. N’hésitez pas à créer un autre graphique et à y accéder sans popUpTo()
. Le bouton de retour fonctionnera de la même manière que prévu.
- Passez du temps et réfléchissez au flux d’utilisateurs dans l’application
- Essayez de vous faciliter la tâche. La navigation sera également plus facile pour votre utilisateur final.
- Passez du temps avec votre point de vue réel/utilisateur réel, et vous serez parfois surpris
Merci d’avoir lu et restez à l’écoute pour en savoir plus !
En savoir plus sur le développement Android :
