2016-08-17 102 views
0

我想重定向用户到成功登录后的主页面,所以我不希望他有一个后退按钮或能够再次进入登录页面。打开页面无后退或关闭

我已经重定向用户到登录页面像这样的东西:

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在Android上不受全局支持,请求e使用NavigationPage。

而且不必提及所提及的NavigationPage也不工作。

回答

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

如果要使用

提到NavigationPage

正确,PopAsync会工作。

+0

感谢您的回答,但有问题的代码是第二部分。 – Akbari

+1

但问题的原因在于第一部分。如果“MainPage”不是“NavigationPage”,则无法使用“导航”。 –

0

我想通了,你可以在任何时候使用此代码更改MainPage

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

我离开这个岗位是,如果它能够帮助可能其他用户。

2

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

  1. 设置你App.MainPage最初在App.cs的构造为主页。然后在你的主页的OnAppearing事件中,或者如果它有一个ViewModel,那么它的初始化方法检查用户是否被认证。如果是加载他的数据。如果没有,则将登录页面显示为模态。登录成功后,您可以弹出登录页面的模式并加载主页的数据。此外,如果需要,您可以处理登录页面中的后退按钮事件,以避免用户跳出模态页面。 缺点 - 在登录模式显示之前,主页将会显示一秒。

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

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