在对原始帖子进行了一些讨论之后,由于iOS出现问题,我们需要为其回答打开一个新问题。
问题:
尝试执行此操作并对结果进行故障排除后,iOS 异步代码无法正常运行。虽然Android可以正常运行,但是下面的代码App()
似乎无法在iOS上正常工作,因为我显然无法在其中等待-ables,App()
以便在导航时获得正确的颜色。
Theme theme = await DependencyService.Get<IEnvironment>().GetOperatingSystemTheme();
即使在代码中使用时_ = GetOperatingSystemTheme().ConfigureAwait(true);
,App()
也不会被调用,因此不会设置主题:
public static async Task<Theme> GetOperatingSystemThemeAsync()
{
Theme systemTheme = await DependencyService.Get<IEnvironment>().GetOperatingSystemTheme().ConfigureAwait(true);
SetTheme(systemTheme);
return systemTheme;
}
以及尝试将其用于iOS时的问题:
使用此非异步Environment_iOS代码和App.cs第53行的SetTheme(),我得到了一个
System.NullReferenceException Message =“对象引用未设置为对象的实例”。在“ UIViewController rootController = UIApplication.SharedApplication.KeyWindow.RootViewController;
如果您不叫它App()
而只叫它App.OnStart()
,就会出现这个闪烁的问题。
故障排除结果:
无论您的应用程序中的默认设置是什么,它将在导航发生时闪烁。换句话说,在页面呈现为暗模式之前,默认的白色背景将闪烁。在App.Current.Resources = new DarkModeTheme()
调用页面(即SomePage()
)之前设置默认值(所需背景的各种颜色,即深色页面)会产生正确的结果,因为必须在导航和呈现页面之前完成此操作。
UIApplication.SharedApplication.KeyWindow
为null,因为Xamarin.Forms尚未生成它。
将呼叫UIApplication.SharedApplication.KeyWindow
从的构造函数Xamarin.Forms.Application
移到Xamarin.Forms.Application.OnStart()
。
我还向您发送了一个PR,该PR实现了此修复程序,还正确地为您的Light Theme和Dark Theme实现了MergedDictionaries:https : //github.com/Jakar510/FlickerTest/pull/1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句