【问题标题】:Open page without back or close打开页面不返回或关闭
【发布时间】:2016-08-17 05:24:56
【问题描述】:

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

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

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 也不起作用。

【问题讨论】:

    标签: c# xamarin navigation xamarin.forms


    【解决方案1】:

    我刚刚想通了,您可以使用以下代码随时更改MainPage

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

    如果它可以帮助其他用户,我会保留这篇文章。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:
        var firstPage = isAuthenticated ? new General.Pages.MainPage() : new Account.Pages.Login();
        MainPage = new NavigationPage(firstPage);
        

        如果你会使用

        提到NavigationPage

        正确地,PopAsync 可以工作。

        【讨论】:

        • 感谢您的回答,但有问题的代码是第二部分。
        • 但是问题的原因在第一部分。如果MainPage 不是NavigationPage,则不能使用Navigation
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多