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

时间:2018-11-29 13:23:06

标签: xamarin xamarin.forms xamarin.ios xamarin.android

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

public Login ()
{
    if (App.IsUserLoggedIn == false)
    {
        InitializeComponent();
    }
    else
    {
        Navigation.PushAsync(new NavigationPage(new LoginIndexPage()));
    }
}

private async void LoginButton_Clicked(object sender, EventArgs e)
{
    var user = new Xcore.Users.csUser
    {
        RefNo = referansnoEntry.Text,
        Username = usernameEntry.Text,
        Password = passwordEntry.Text
    };
    var isValid = IsCorrectLogin(user);
    if (isValid)
    {
        App.IsUserLoggedIn = true;
        await Navigation.PushAsync(new NavigationPage(new LoginIndexPage()));
    }
    else
    {
        showError.Text = "*Hatalı giriş";
        passwordEntry.Text = string.Empty;
        usernameEntry.Text = string.Empty;
        referansnoEntry.Text = string.Empty;
    }
}
private bool IsCorrectLogin(Xcore.Users.csUser user)
{
    return user.RefNo == Xcore.Users.RegInfo.RefNo 
        && user.Username == Xcore.Users.RegInfo.Username 
        && user.Password == Xcore.Users.RegInfo.Password;
}


public LoginIndexPage()
{
    if (App.IsUserLoggedIn == true)
    {
        InitializeComponent();
    }
    else
    {
        Navigation.PushAsync(new NavigationPage(new Login()));
    }
}
protected override void OnAppearing()
{
    base.OnAppearing();
    showuserName.Text = Xcore.Users.RegInfo.Username;
}

当我登录时,它会进入LoginIndexPage。

3 个答案:

答案 0 :(得分:1)

类似于App Pack所述,导航堆栈中不应包含LoginPage。无需尝试删除它,只需将 next 页面设置为根页面。

将下一页设置为:

,而不是推入堆栈。

Application.Current.MainPage = <your next page>

此外,我不会在页面的构造函数中导航到页面。这不是一个好习惯。

答案 1 :(得分:0)

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

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

    }

答案 2 :(得分:0)

通常在这种情况下,我将从导航堆栈中删除登录页面。

我认为,当您离开登录页面时,导航上会有一种方法,例如Navigation.RemovePage(Page page)。这样,您的后堆栈和功能将保留在原位,但由于已从堆栈中删除,因此不会返回登录页面。

但是,您必须记住的是,如果登录名是根页面,则在调用pop()时确实仍然需要一个页面。