这似乎是一个简单的问题,但我一直找不到简单的答案。从本质上讲,我想根据一些存储状态选择应用程序中的哪个页面启动。我在AppShell构造函数中添加了一个GoToAsync调用,但这不起作用——这是有道理的,因为AppShell还没有完全构建好。
我找到了这个答案,但感觉它有点绕过了这个问题:
毛伊岛AppShell-打开导航
哪里是注入一些代码的最佳位置,这些代码将在启动时运行一次,并且可以成功地将.NET Maui应用程序导航到选定的页面?
在玩了重写之后,似乎重写Application.OnStart
是可行的!CCD_ 2被设置在该点并且导航工作。
以下是允许异步初始化并使用Loading Page直到初始化完成的附加代码:
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();
}
}