首页 > 解决方案 > 在 Xamarin Shell 中实现登录页面的正确方法是什么?

问题描述

我的应用程序具有这样的结构。

启动页面 => 登录页面 => 主页

登录后,用户无法返回登录/启动页面。弹出菜单中有几个页面可供用户访问。但是,登录/启动项不应显示在这些弹出菜单项中。

某些项目可能会在将登录页面显示为模式页面之前先尝试加载主页。我认为这种方式行不通,因为在将用户发送回登录之前加载复杂的主页需要花费很多时间。

标签: xamarin.forms

解决方案


登录屏幕的主要目标是仅在用户未登录到应用程序时显示。答案仅涵盖部分解决方案。这是我存档登录解决方案的方式。我的目标:当应用程序启动时,检查用户是否已登录。如果是,则转到 MainPage,否则转到 LoginPage。相同的原理可用于显示应用程序首次运行屏幕。

下载ShellLoginSample
替换 AppShell.xaml 中的项目顺序

<!--  Your Pages  -->
<TabBar Route="main">
    <Tab Title="Browse" Icon="tab_feed.png">
        <ShellContent ContentTemplate="{DataTemplate local:ItemsPage}" />
    </Tab>
    <Tab Title="About" Icon="tab_about.png">
        <ShellContent ContentTemplate="{DataTemplate local:AboutPage}" />
    </Tab>
</TabBar>

<ShellItem Route="login">
    <ShellContent ContentTemplate="{DataTemplate local:LoginPage}" />
</ShellItem>

然后编辑 App.xaml.cs 以检查登录状态

public App()
{
    InitializeComponent();

    DependencyService.Register<MockDataStore>();
    var isLoogged = Xamarin.Essentials.SecureStorage.GetAsync("isLogged").Result;
    if (isLoogged == "1")
    {
        MainPage = new AppShell();
    }
    else
    {
        MainPage = new LoginPage();
    }
}

然后在 LoginPage.xaml.cs 中编辑

protected async void OnClicked(object source, EventArgs args)
{
    await Xamarin.Essentials.SecureStorage.SetAsync("isLogged", "1");
    Application.Current.MainPage = new AppShell();
    await Shell.Current.GoToAsync("//main");
}

推荐阅读