打开页面不返回或关闭

Open page without back or close

我想在成功登录后将用户重定向到主页,所以我不希望他有后退按钮或能够再次进入登录页面。

我已将用户重定向到登录页面,内容如下:

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: PopAsync is not supported globally on Android, please use a NavigationPage.

不用说提到的 NavigationPage 也不起作用。

我刚弄明白,您可以随时使用此代码更改 MainPage

App.Current.MainPage = new General.Pages.MainPage();

我把这个 post 留下来,如果它可以帮助其他用户的话。

var firstPage = isAuthenticated ? new General.Pages.MainPage() : new Account.Pages.Login();
MainPage = new NavigationPage(firstPage);

如果您将使用

mentioned NavigationPage

正确地,PopAsync 会起作用。

有 2 种方法可以解决这个问题。

  1. 最初在App.cs的构造函数中设置你App.MainPage作为你的主页。然后在您主页的 OnAppearing 事件中,或者如果它有一个 ViewModel,那么它的 Initialising 方法会检查用户是否已通过身份验证。如果是,加载他的数据。如果不是,则将您的登录页面显示为模式。登录成功后,可以弹出登录页面的模态,加载首页数据。此外,如果需要,您可以处理登录页面中的后退按钮事件,以不允许用户离开模式页面。 缺点 - 在登录模式出现之前,主页会显示一秒钟。

  2. 在 App.cs 的构造函数中检查用户是否已通过身份验证。如果用户已通过身份验证,则通过将其设置为 MainPage 来显示主页。否则将 MainPage 设置为登录页面。登录成功后再次设置 MainPage.
    缺点 - 在构造函数中检查 isAuthenticated 可能会使应用程序的初始加载看起来更慢。

而您遇到的错误是因为您没有将任何页面推送到导航堆栈中。因此你的流行音乐不会工作。