gpt4 book ai didi

navigation - 如何在 OnAppearing() 方法中导航?

转载 作者:行者123 更新时间:2023-12-05 09:27:29 25 4
gpt4 key购买 nike

我想避免将我的 OnBoarding View 放在导航堆栈中,以解决按下后退按钮的问题。在我的 MainPage 中,我检查 OnBoarding 是否应该出现。如果为真,我将在 OnAppearing 方法中调用 PushModalAsync 方法。但是应用程序崩溃并出现以下异常:

Objective-C exception thrown.  Name: System.InvalidOperationException Reason: Window should have a UIWindow set. (System.InvalidOperationException)
at Microsoft.Maui.Controls.Window.get_NativeWindow()
at Microsoft.Maui.Controls.Platform.ModalNavigationManager.EndEditing()
at Microsoft.Maui.Controls.Platform.ModalNavigationManager.PushModalAsync(Page modal, Boolean animated)
at Microsoft.Maui.Controls.Window.NavigationImpl.OnPushModal(Page modal, Boolean animated)
at BytePesaApp.MainPage.OnAppearing() in MainPage.xaml.cs:line 18
at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)
at Foundation.NSAsyncSynchronizationContextDispatcher.Apply()

代码实现如下:

public partial class MainPage : ContentPage
{

public MainPage()
{
InitializeComponent();
}

protected override async void OnAppearing()
{
base.OnAppearing();

if (ShouldShowOnBoardingPage() == true)
{
await Navigation.PushModalAsync(new OnBoardingPage(), false);
}
}


private bool ShouldShowOnBoardingPage()
{
return VersionTracking.IsFirstLaunchEver;
}
}

最佳答案

在 OnAppearing 完成之前,Maui 似乎不适合导航。像这样推迟导航:

Dispatcher.Dispatch(async() =>
await Navigation.PushModalAsync(new OnBoardingPage(), false);
);

此代码将被排队,并将在 OnAppearing 返回后运行。


替代方案是在入职期间替换主页。
在 App.xaml.cs 中:

if (ShouldShowOnBoardingPage() == true)
MainPage = new OnBoardingPage();
else
MainPage = new MainPage();

然后当 OnBoarding 完成时:

    Application.Current.MainPage = new MainPage();

如果可能的话,我更喜欢后一种方法。

关于navigation - 如何在 OnAppearing() 方法中导航?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72373278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com