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
无需将新页面推送到不再需要的NavigationStack上,只需将App.MainPage设置为新页面即可。
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.