2016-08-17 86 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在構造函數中可能會使應用程序的初始加載速度變慢。

而且您遇到的錯誤是因爲您沒有將任何頁面推入導航堆棧。因此,你的流行不會工作。