Comment Garder La Pile Des Page Précédente Xamarin

Tiens, l'autre jour, j'étais en train de naviguer dans une application Xamarin que j'avais développée (oui, moi, le génie du code ! 😉). Je clique, je clique, je me perds un peu... Bref, je me retrouve à n pages de profondeur et là, horreur, en voulant revenir en arrière, l'application se ferme ! Catastrophe. La pile de navigation aux oubliettes. Grrr... Ça vous est déjà arrivé, non ? C'est frustrant, avouez.

Alors, comment on fait pour que notre application Xamarin se souvienne du chemin parcouru, pour ne pas perdre la pile des pages précédentes ? C'est ce qu'on va voir ensemble !

Comprendre la Pile de Navigation

Avant de plonger dans le code, un petit rappel. Xamarin.Forms utilise une pile de navigation pour gérer l'historique des pages. Imaginez une pile d'assiettes : vous ajoutez une nouvelle assiette (une nouvelle page) sur le dessus, et pour revenir en arrière, vous retirez l'assiette du dessus (vous revenez à la page précédente).

Le problème, c'est que par défaut, Xamarin peut avoir des comportements... disons, inattendus avec cette pile, surtout lorsqu'on utilise des méthodes comme Navigation.PushAsync et Navigation.PopAsync un peu à la légère. Et qui n'a jamais abusé de ces méthodes ? 😁

Les Méthodes Clés : PushAsync et PopAsync

On va décortiquer les deux principales méthodes pour naviguer dans une application Xamarin.Forms :

Comment Faire Des Pieds De Pages Différents Sur Word - Tout Faire
Comment Faire Des Pieds De Pages Différents Sur Word - Tout Faire
  • PushAsync: Ajoute une nouvelle page à la pile de navigation. C'est comme ajouter une nouvelle assiette sur la pile.
  • PopAsync: Retire la page la plus récente de la pile de navigation, et revient donc à la page précédente. C'est comme retirer l'assiette du dessus.

Le piège, c'est que si on ne fait pas attention, on peut vite se retrouver avec une pile désordonnée, ou pire, vide ! Et c'est là qu'arrive la fermeture inopinée de l'application. 😱

Comment Bien Gérer la Pile de Navigation

Voici quelques astuces pour garder le contrôle :

Xamarin.Forms NavigationPage – apcpedagogie
Xamarin.Forms NavigationPage – apcpedagogie
  • Éviter les instanciations multiples de la même page: Si vous cliquez 10 fois sur un bouton qui vous envoie vers la même page, vous aurez 10 instances de cette page dans la pile. Pas très propre, non ? Pensez à vérifier si la page est déjà présente avant de la pousser. (Un petit Navigation.NavigationStack.Count peut aider 😉)
  • Utiliser Navigation.InsertPageBefore: Si vous avez besoin d'insérer une page avant la page actuelle dans la pile, c'est l'outil idéal. Ça peut être utile pour remplacer une page d'authentification après la connexion, par exemple.
  • Bien comprendre les modes de navigation: Xamarin.Forms propose différents modes de navigation (modal, navigation par onglets, etc.). Chacun a son propre comportement de pile. Prenez le temps de bien les comprendre pour éviter les surprises.
  • Les modales (PushModalAsync & PopModalAsync) sont différentes: Elles fonctionnent sur une autre pile. Une modal est parfaite pour des workflows indépendants comme un formulaire à remplir ou une confirmation.

Exemple de Code

Un petit exemple pour illustrer (attention, ce n'est qu'un fragment !) :


async void OnNavigateButtonClicked(object sender, EventArgs e)
{
    // Vérifier si la page existe déjà
    var existingPage = Navigation.NavigationStack.FirstOrDefault(p => p is NouvellePage);
    if (existingPage == null)
    {
        await Navigation.PushAsync(new NouvellePage());
    }
    else
    {
        // Si elle existe, revenir à cette page
        await Navigation.PopToRootAsync(); // Ou naviguer directement vers existingPage
    }
}

Bon, évidemment, c'est un exemple simplifié. Il faut l'adapter à votre contexte. Mais l'idée est là : garder le contrôle sur ce qui est ajouté et retiré de la pile.

En conclusion, gérer la pile de navigation dans Xamarin.Forms, c'est un peu comme dompter une bête sauvage. Ça demande un peu de patience, de compréhension, et quelques astuces. Mais une fois que vous avez le coup de main, vous éviterez bien des frustrations... et des fermetures inopinées de votre application ! 😊