NET MAUI, как настроить загрузку первой страницы в зависимости от того, есть ли у меня JWT или нет в Shell
Например, если у меня есть оболочка, где я добавляю FlyoutItem (ы) в код, мне нужно установить некоторый контент при запуске приложения (например, в зависимости от того, есть ли у меня JWT или нет), как я могу это сделать .
public partial class AppShell : Shell
{
public AppShell ()
{
InitializeComponent ();
FlyoutItem flyoutItem = new FlyoutItem ();
flyoutItem.FlyoutDisplayOptions = FlyoutDisplayOptions.AsMultipleItems;
flyoutItem.Items.Add (new ShellContent () { Title = "NewPage1", Content = new NewPage1 () });
flyoutItem.Items.Add (new ShellContent () { Title = "home", Content = new MainPage () });
myshell.Items.Add (flyoutItem);
}
}
Или аналогичный в xaml
<?xml version="1.0" encoding="UTF-8" ?>
<Shell
x:Class="MauiUI.AppShell"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MauiUI"
xmlns:pages="clr-namespace:MauiUI.Pages"
FlyoutHeaderBehavior="CollapseOnScroll"
Shell.FlyoutBehavior="Flyout">
<FlyoutItem IsVisible="False">
<ShellContent
Title="Login"
Route="login"
ContentTemplate="{DataTemplate pages:LoginPage}" />
</FlyoutItem>
<FlyoutItem IsVisible="False">
<ShellContent
Title="Register"
Route="register"
ContentTemplate="{DataTemplate pages:RegisterPage}" />
</FlyoutItem>
<FlyoutItem>
<ShellContent
Title="Amazons of Volleyball"
Route="main"
ContentTemplate="{DataTemplate pages:MainPage}" />
</FlyoutItem>
<FlyoutItem>
<ShellContent
Title="Detaiils"
Route="details"
ContentTemplate="{DataTemplate pages:PlayerDetailsPage}" />
</FlyoutItem>
<FlyoutItem>
<ShellContent
Title="Add new Amazon"
Route="add-or-update"
ContentTemplate="{DataTemplate pages:AddOrUpdatePlayer}" />
</FlyoutItem>
</Shell>
1 ответ
В зависимости от размера данных, которые вы должны загрузить, и того, что вы хотите, чтобы пользователь видел в это время.
Если у вас не так много загрузки, вы можете просто сделать все вApplication.OnStart
как сказано в этом ответе , существует также множество других событий жизненного цикла приложения , которые могут удовлетворить ваши потребности (например,OnCreated
).
Просто будьте осторожны, если вы используетеasync / await
в этих методах, поскольку приложение будет продолжать загружаться в то же время, и если вы ожидаете данных, которые должны отображаться, вы должны разрабатывать свой пользовательский интерфейс с учетом этого (используя события и внедрение зависимостей .
Если для загрузки данных, которые вы загружаете, требуется некоторое время (> несколько секунд), вы можете изменить начальную страницу своего приложения на страницу, предназначенную для загрузки данных, после загрузки данных вы можете просто перейти на хорошую страницу с помощьюShell.Current.GoToAsync("/home/or/login")
.
Вы также можете напрямую загружать данные внутрьMauiProgram.CreateMauiApp()
и передавать информацию с )внедрением зависимостей , экран-заставка останется на экране во время загрузки.