web-dev-qa-db-ja.com

Xamarin Shellにログインページを実装する正しい方法は何ですか?

私のアプリはこのような構造になっています。

スプラッシュページ=>ログインページ=>メインページ

ログイン後、ユーザーはログイン/スプラッシュページに戻ることができません。フライアウトメニューには、ユーザーがアクセスできるページがいくつかあります。ただし、ログイン/スプラッシュ項目はこれらのフライアウトメニュー項目に表示されるべきではありません。

一部のプロジェクトでは、ログインページをモーダルページとして表示する前に、まずメインページをロードしようとする場合があります。ユーザーをログインに戻す前に複雑なメインページをロードするには非常に時間がかかるため、この方法は機能しないと思います。

13
Soul_Master

私はこの方法で実装しました、

public partial class App : Application
{
    private AppShell _mainMenu;
    private LoginPage _loginPage;
    public static App Instance;
    public App()
    {
        InitializeComponent();

        // set singleton
        Instance = this;
        // Check here for previus-login user
        if (SystemEnvironment.UserCurrentSession != null)
        {
            SwitchToMainMenu();
        }
        else
        {
            SwitchToLogin();
        }
    }

    public void SwitchToLogin()
    {
        _loginPage = null;
        _loginPage = new LoginPage();
        MainPage = _loginPage; // Go to login page
    }

    public void SwitchToMainMenu()
    {
        _mainMenu = null;
        _mainMenu = new AppShell();
        MainPage = _mainMenu; // Go to logged user page
    }

    protected override void OnStart()
    {
        // Handle when your app starts
    }

    protected override void OnSleep()
    {
        // Handle when your app sleeps
    }

    protected override void OnResume()
    {
        // Handle when your app resumes
    }
}
0
Danilow

App.xaml.csに次の行を追加します。

 public App()
 {
 InitializeComponent();
 MainPage = new NavigationPage(new MainPage());
 }

認証ファイルに以下を追加します。

async void OnLoginButtonClicked(Object sender, EventArgs e)
    {
        var user = new User
        {
            PhoneNumber = PhoneNumberEntry.Text,
            Password = PasswordEntry.Text
        };
        if (user.PhoneNumber == Dummy.PhoneNumber && user.Password == Dummy.Password)
        {
            Application.Current.MainPage = new AppShell();
        }
        else
        {
            messagelabel.Text = "Invalid Login";
            PasswordEntry.Text = string.Empty;
        }
    }

これは私にとってうまくいきました。

0
Ayesha Fatima

2つのAppShellを作成します。 1つはプリンシパルで、私のアプリケーションのすべてのメニューが含まれます。他の1つだけにログインページがあります。

したがって、1つのAppShelと他のAppShelを切り替えることができます。

MainPage = new AppShell();

MainPage = new LoginAppShell();
0
user3390723