导航到 .NET Maui 应用程序中的启动页面

Rya*_*yan 8 app-shell maui

似乎是一个简单的问题,但我一直无法找到简单的答案。本质上,我想根据某些存储的状态选择应用程序中的哪个页面启动。我在 AppShell 构造函数中添加了 GoToAsync 调用,但这不起作用 - 这是有道理的,因为 AppShell 尚未完全构建。

我找到了这个答案,但感觉它有点回避这个问题:

Maui AppShell - 打开导航

哪里是注入一些代码的最佳位置,这些代码将在启动时运行一次并可以成功地将 .NET Maui 应用程序导航到所选页面?

Rya*_*yan 5

在尝试了重写之后,似乎重写是Application.OnStart有效的!Shell.Current此时已设置并且导航可以工作。

以下是允许异步初始化并使用加载页面直到初始化完成的附加代码:

using MyApp.Services;
using MyApp.UI;

namespace MyApp;

public partial class App : Application
{
    ConfigurationProviderService m_configProvider;

    public App(ConfigurationProviderService configProvider)
    {
        m_configProvider = configProvider;

        InitializeComponent();

        MainPage = new LoadingPage();
    }

    protected override void OnStart()
    {
        var task = InitAsync();

        task.ContinueWith((task) =>
        {
            MainThread.BeginInvokeOnMainThread(() =>
            {
                MainPage = new AppShell();

                // Choose navigation depending on init
                Shell.Current.GoToAsync(...);
            });
        });

        base.OnStart();
    }

    private async Task InitAsync()
    {
        await m_configProvider.InitAsync();
    }
}
Run Code Online (Sandbox Code Playgroud)