打开页面而不后退或关闭
本文关键字: | 更新日期: 2023-09-27 18:02:45
我想在成功登录后将用户重定向到主页,所以我不希望他有后退按钮或能够再次进入登录页面。
我用这样的东西将用户重定向到登录页面:
if (isAuthenticated)
{
MainPage = new General.Pages.MainPage();
}
else
{
MainPage = new Account.Pages.Login();
}
我使用这段代码成功登录,但不起作用,并给出了一个例外:
await Navigation.PopAsync(false);
await Navigation.PushAsync(new General.Pages.MainPage());
给定的例外情况是:
System.InvalidOperationException:Android上全局不支持PopAsync,请使用NavigationPage。
不用说,上述NavigationPage
也不起作用。
我刚刚想好了,您可以在任何时候使用以下代码更改MainPage
:
App.Current.MainPage = new General.Pages.MainPage();
如果这篇文章能帮助其他用户的话,我就把它留给别人吧。
有两种方法可以实现这一点。
-
最初在App.cs的构造函数中将
App.MainPage
设置为主页。然后在主页的OnAppearing
事件中,或者如果它有ViewModel,那么它的Initialization方法会检查用户是否经过身份验证。如果是,加载他的数据。如果不是,则将您的登录页面显示为模态。登录成功后,您可以弹出登录页面的模式并加载主页的数据。此外,如果需要,您可以在登录页面中处理后退按钮事件,以不允许用户退出模式页面。缺点-在登录模式出现之前,主页会显示一秒钟。 -
在App.cs的构造函数中,检查用户是否已通过身份验证。如果用户已通过身份验证,则通过将主页设置为
MainPage
来显示主页。否则,将MainPage
设置为登录页面。登录成功后,再次设置MainPage
缺点-在构造函数中检查isAuthenticated可能会使应用程序的初始加载看起来更慢。
您遇到的错误是因为您没有将任何页面推入导航堆栈。所以你的pop不起作用。
var firstPage = isAuthenticated ? new General.Pages.MainPage() : new Account.Pages.Login();
MainPage = new NavigationPage(firstPage);
如果您将使用
提到的
NavigationPage
PopAsync
正常工作。