Here's an example for my Navigation
:
LoginPage ( Login_Click ) -> MainPage | Block BackButton
MainPage ( Logout_Click ) -> LoginPage | Block going back to the MainPage
Currently I am using this code to show the MainPage
after a successful login.
await Navigation.PushModalAsync(new MainPage());
I DON'T want the users to go back by hitting the PreviousButton(Android)
to return to the LoginPage.
Same story when logging out.
Is there a way to remove the LoginPage from the NavigationStack after a successful login (and remove the MainPage when logged out) ?
NOTE:
This is modal. I am not using a NavigationPage.
You are looking for PopToRootAsync
. So your user enters required info and they tap a login button, you perform your login verification and if success you set a new MainPage
and then PopToRootAsync
which pops all but the root Page off the navigation stack.
Update: Due to the way PopToRootAsync
is done across the various platforms, you need to start from a NavigationPage
but can remove it as your root page after your login process.
So in your Application constructor, instead of just creating your LoginPage
, place it into a NavigationPage
but hide the navigation bar so it does not effect your LoginPage
screen layout:
public App()
{
var navPage = new NavigationPage(new LoginPage());
NavigationPage.SetHasNavigationBar(navPage.CurrentPage, false);
MainPage = navPage;
}
Then within your LoginPage
you can set the Application.Current.MainPage
to any Page
class (does not have to be a NavigationPage
) and then PopToRootAsync
to get to it and totally remove your LoginPage
from the navigation hierarchy.
public partial class LoginPage : ContentPage
{
public LoginPage()
{
InitializeComponent();
loginDone.Clicked += OnLoginClick;
}
async void OnLoginClick(object sender, EventArgs e)
{
// If Login is complete/successful - set new root page
if (YourLoginMethod()) {
Application.Current.MainPage = new MainApplicationPage();
// Pops all but the root Page off the navigation stack, with optional animation.
await Navigation.PopToRootAsync(true);
}
}
}
Note: Tested this technique only on iOS
and Android
Rather than pushing the new page onto the NavigationStack that you no longer want, just set the App.MainPage to the new page.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With