title: NavigationStack has a problem with ScanPage
body: <p>I have a problem with the scan in a Xamarin app. It's just difficult to explain. I have 4 pages in my app. My Scan is open with a button in the 4th page. When i used the scan the first time i have no problem. As Long as stay on the 4th page i have no problem i can do a lot of scan with no error. But when i use the button Go Back in my app and i go on the 3th page and after i return to the 4th page and i used the scan i have an error.</p>
  
  <pre><code>System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
  Parameter name: index
  </code></pre>
  
  <p>At this moment my navigationStack is equal to 0.</p>
  
  <p>My method GoBack just do:</p>
  
  <blockquote>
    <p>Navigation.PopAsync();</p>
  </blockquote>
  
  <p>And the scanner bug when i scan my QRCode and i call SendPresenceAck()</p>
  
  <pre><code>private async Task SendPresenceAck(string paramA09) //, int? idPrestation)
      {
  
          int idParticipant;
          if (!int.TryParse(paramA09, out idParticipant))
          {
              //await this.ShowAlert("Attention", "Problème de lecture du QR Code.");
              await this.DisplayAlert("Attention", "Problème de lecture du QR Code.", "Cancel");
  
              return;
          }
  
          // On appelle le WS pour signifier la présence
          // On passe par validateService
          // On prépare la validation de la présence
          var validateService = new ValidatePresenceService(this.Token);
  
          // On ajoute la ligne à valider
          var validate = validateService.AddNewPresence(idParticipant, this.idPrestation, true);
  
          // On déclenche l'envoi au WS (si besoin)
          if (validate != null)
          {
              // On envoie uniquement en cas de connexion
              if (!Global.GetSettingsBool(TypeSettings.IsHorsConnexion))
              {
                  //await validateService.SendAll();
                  // Attention : si participant déjà enregistré : erreur 403
                  try
                  {
                      await validateService.Send(validate);
                      // await this.DisplayAlert("OK", "Le billet est validé.", "OK");
                      popupLoginView.IsVisible = true;
                      //Gestion du premier stack et du bouton
                      StckSLayout.BackgroundColor = Color.FromHex("#DD5500");
                      ImageBack.BackgroundColor = Color.White;
                      //BoxSEmpty.BackgroundColor= Color.FromHex("#DD5500");
                      button.BackgroundColor = Color.FromHex("#DD5500");
                      button.Text = "Blabla";
                      //BoxSEmpty.Clicked += boutonSortir;
                      button.Clicked += async (sender, e) =&gt;
                      {
                          // Ouverture du scan
                          await BtnScanClicked(sender, e);
  
  
  
                      };
                      //Gestion à partir du deuxième stack
                      StckSLayoutMiddle.BackgroundColor = Color.FromHex("#DD7700");
                      LbldAlert.BackgroundColor = Color.FromHex("#641914");
                      LbldAlert.Text = "ALERTE";
                      LblSEnd.BackgroundColor = Color.FromHex("#641914");
                      LblSEnd.Text = "Blabla";
                      // 401 : impossible d'identifier le numéro du billet
                      //  await this.DisplayAlert("Attention", "Impossible d'identifier le numéro du billet, veuillez vérifier les informations de celui ci.", "Cancel");
                      //   return;
  
  
  
                  }
                  catch (WebException ex)
                  {
                      HttpWebResponse objresponse = ex.Response as HttpWebResponse;
                      if (objresponse.StatusCode == HttpStatusCode.Forbidden)
                      {
                          popupLoginView.IsVisible = true;
                          //Gestion du premier stack et du bouton
                          StckSLayout.BackgroundColor = Color.FromHex("#DD5500");
                          ImageBack.BackgroundColor = Color.White;
                          //BoxSEmpty.BackgroundColor= Color.FromHex("#DD5500");
                          button.BackgroundColor = Color.FromHex("#DD5500");
                          button.Text = "Blabla";
                          //BoxSEmpty.Clicked += boutonSortir;
                          button.Clicked += async (sender, e) =&gt;
                          {
                              // Ouverture du scan
                              await BtnScanClicked(sender, e);
  
  
  
                          };
                          //Gestion à partir du deuxième stack
                          StckSLayoutMiddle.BackgroundColor = Color.FromHex("#DD7700");
                          LbldAlert.BackgroundColor = Color.FromHex("#641914");
                          LbldAlert.Text = "ALERTE";
                          LblSEnd.BackgroundColor = Color.FromHex("#641914");
                          LblSEnd.Text = "Blabla";
                          // 403 : le participant a déjà été enregistré aujourd'hui
                          // Message d'erreur
                          // await this.DisplayAlert("Attention", "Le billet a déjà été enregistré, le numéro du billet a déjà été scanné auparavant.", "OK");
                          // return;
  
                      }
                      else if (objresponse.StatusCode == HttpStatusCode.NotFound)
                      {
                          popupLoginView.IsVisible = true;
                          //Gestion du premier stack et du bouton
                          StckSLayout.BackgroundColor = Color.FromHex("#DD5500");
                          ImageBack.BackgroundColor = Color.White;
                          //BoxSEmpty.BackgroundColor= Color.FromHex("#DD5500");
                          button.BackgroundColor = Color.FromHex("#DD5500");
                          button.Text = "Blabla";
                          //BoxSEmpty.Clicked += boutonSortir;
                          button.Clicked += async (sender, e) =&gt;
                          {
  
  
                              // Ouverture du scan
                              await BtnScanClicked(sender, e);
  
  
  
                          };
                          //Gestion à partir du deuxième stack
                          StckSLayoutMiddle.BackgroundColor = Color.FromHex("#DD7700");
                          LbldAlert.BackgroundColor = Color.FromHex("#641914");
                          LbldAlert.Text = "ALERTE";
                          LblSEnd.BackgroundColor = Color.FromHex("#641914");
                          LblSEnd.Text = "Blabla";
                          // 404 : billet non valide
  
                          // await this.DisplayAlert("Attention", "Le billet n'est pas valide.", "Cancel");
  
                          //return;
                      }
                      else if (objresponse.StatusCode == HttpStatusCode.Unauthorized)
                      {
                          popupLoginView.IsVisible = true;
                          //Gestion du premier stack et du bouton
                          StckSLayout.BackgroundColor = Color.FromHex("#DD5500");
                          ImageBack.BackgroundColor = Color.White;
                          //BoxSEmpty.BackgroundColor= Color.FromHex("#DD5500");
                          button.BackgroundColor = Color.FromHex("#DD5500");
                          button.Text = "Blabla";
                          //BoxSEmpty.Clicked += boutonSortir;
                          button.Clicked += async (sender, e) =&gt;
                          {
                              // Ouverture du scan
                              await BtnScanClicked(sender, e);
  
  
  
                          };
                          //Gestion à partir du deuxième stack
                          StckSLayoutMiddle.BackgroundColor = Color.FromHex("#DD7700");
                          LbldAlert.BackgroundColor = Color.FromHex("#641914");
                          LbldAlert.Text = "ALERTE";
                          LblSEnd.BackgroundColor = Color.FromHex("#641914");
                          LblSEnd.Text = "Blabla";
                          // 401 : impossible d'identifier le numéro du billet
                          //  await this.DisplayAlert("Attention", "Impossible d'identifier le numéro du billet, veuillez vérifier les informations de celui ci.", "Cancel");
                          //   return;
  
                      }
                  }
                  catch (Exception e)
                  {
                      // Erreur
                      await this.DisplayAlert("Attention", e.Message, "Cancel");
                      return;
                  }
              }
              else
              {
                  // Hors connexion : on vérifie juste si l'utilisateur n'est pas déjà présent dans la table SQL
  
                  // Attention : si pas de prestation : on a le droit d'enregistrer plusieurs fois la présence
                  // Si il y a une prestation, en revanche, on doit vérifier qu'il n'est pas déjà inscrit
  
                  if (validate.IdPrestation.HasValue &amp;&amp;
                      validateService.IsInscriptionAlreadyRecorded(validate))
                  {
                      popupLoginView.IsVisible = true;
  
                      //Gestion du premier stack et du bouton
                      StckSLayout.BackgroundColor = Color.FromHex("#DD5500");
                      ImageBack.BackgroundColor = Color.White;
                      //BoxSEmpty.BackgroundColor= Color.FromHex("#DD5500");
                      button.BackgroundColor = Color.FromHex("#DD5500");
                      button.Text = "Blabla";
                      //BoxSEmpty.Clicked += boutonSortir;
                      button.Clicked += async (sender, e) =&gt;
                      {
  
  
                          // Ouverture du scan
                          await BtnScanClicked(sender, e);
  
  
  
                      };
                      //Gestion à partir du deuxième stack
                      StckSLayoutMiddle.BackgroundColor = Color.FromHex("#DD7700");
                      LbldAlert.BackgroundColor = Color.FromHex("#641914");
                      LbldAlert.Text = "ALERTE";
                      LblSEnd.BackgroundColor = Color.FromHex("#641914");
                      LblSEnd.Text = "Blabla";
  
                      // Déjà trouvé : message d'erreur
                      // await this.DisplayAlert("Attention", "Le participant a déjà été enregistré.", "OK");
                      //
                      // return;
  
  
                  }
  
              }
          }
          else
          {
              // Pb à l'insertion des données ??
  
          }
  
  
          return;
  
  
      }
  </code></pre>
  
  <p>The exception is on the line: </p>
  
  <pre><code>popupLoginView.IsVisible = true;
  </code></pre>
  
  <p>Sorry it's very hard to explain and i'm not english so i hope somebody understand and help me.
  Thanks.</p>