用户登录后如何防止后退按钮返回登录页面(Xamarin Forms)

Bur*_*aba 5 xamarin.ios xamarin.android xamarin xamarin.forms

我有一个登录页面,用户在其中输入用户名和密码,然后用户被重定向到他的帐户页面,但是当我按后退按钮时,它会将我带回到登录页面。我该如何防止这种情况发生。\n代码片段:

\n\n
public Login ()\n{\n    if (App.IsUserLoggedIn == false)\n    {\n        InitializeComponent();\n    }\n    else\n    {\n        Navigation.PushAsync(new NavigationPage(new LoginIndexPage()));\n    }\n}\n\nprivate async void LoginButton_Clicked(object sender, EventArgs e)\n{\n    var user = new Xcore.Users.csUser\n    {\n        RefNo = referansnoEntry.Text,\n        Username = usernameEntry.Text,\n        Password = passwordEntry.Text\n    };\n    var isValid = IsCorrectLogin(user);\n    if (isValid)\n    {\n        App.IsUserLoggedIn = true;\n        await Navigation.PushAsync(new NavigationPage(new LoginIndexPage()));\n    }\n    else\n    {\n        showError.Text = "*Hatal\xc4\xb1 giri\xc5\x9f";\n        passwordEntry.Text = string.Empty;\n        usernameEntry.Text = string.Empty;\n        referansnoEntry.Text = string.Empty;\n    }\n}\nprivate bool IsCorrectLogin(Xcore.Users.csUser user)\n{\n    return user.RefNo == Xcore.Users.RegInfo.RefNo \n        && user.Username == Xcore.Users.RegInfo.Username \n        && user.Password == Xcore.Users.RegInfo.Password;\n}\n\n\npublic LoginIndexPage()\n{\n    if (App.IsUserLoggedIn == true)\n    {\n        InitializeComponent();\n    }\n    else\n    {\n        Navigation.PushAsync(new NavigationPage(new Login()));\n    }\n}\nprotected override void OnAppearing()\n{\n    base.OnAppearing();\n    showuserName.Text = Xcore.Users.RegInfo.Username;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我登录时,它会出现在 LoginIndexPage 上。

\n

val*_*ero 5

与 App Pack 提到的类似,导航堆栈中不应该有 LoginPage。无需尝试删除它,只需将下一页设置为根页面即可。

不要将下一页推入堆栈,而是将其设置为:

Application.Current.MainPage = <your next page>

另外,我不会导航到页面构造函数中的页面。这确实不是一个好的做法。


小智 1

尝试在您的 LoginIndexPage 中使用此代码。

protected override bool OnBackButtonPressed()
    {
        return true; // true prevent navigation back and false to allow

    }
Run Code Online (Sandbox Code Playgroud)