xamarin.forms - 在 Xamarin Shell 中实现登录页面的正确方法是什么?
问题描述
我的应用程序具有这样的结构。
启动页面 => 登录页面 => 主页
登录后,用户无法返回登录/启动页面。弹出菜单中有几个页面可供用户访问。但是,登录/启动项不应显示在这些弹出菜单项中。
某些项目可能会在将登录页面显示为模式页面之前先尝试加载主页。我认为这种方式行不通,因为在将用户发送回登录之前加载复杂的主页需要花费很多时间。
解决方案
登录屏幕的主要目标是仅在用户未登录到应用程序时显示。答案仅涵盖部分解决方案。这是我存档登录解决方案的方式。我的目标:当应用程序启动时,检查用户是否已登录。如果是,则转到 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");
}
推荐阅读
- javascript - 'return' 关键字的用途是什么
- swift - 如何使用在自定义单元格中创建的标签
- symfony3.x - 在产品查询生成器的实例化中,令牌不能为空。/ 查询 Akeneo 2
- spring - 为@Pointcut 设置表达式
- excel - 在 Excel 中使用 DEC2BIN() 创建一个列表
- javascript - JS中如何计算前几个月?
- javascript - 更改查找和替换 Google 表格脚本
- jquery - 如何包装和排除特定标签
- haskell - stack install ghc-mod 在 OSX 10.13.4 上因依赖冲突而失败
- android - 对话框关闭后EditText光标错误