【发布时间】:2023-03-28 23:01:01
【问题描述】:
在对Original Post 进行了一些讨论之后,由于在 iOS 中发现了一个问题,我们需要为其回答提出一个新问题。
问题:
尝试此操作并对结果进行故障排除后,iOS async code 无法正常工作。虽然 Android 可以正常工作,但 App() 中的以下代码似乎不适用于 iOS,因为我显然不能 await >-ables 在App() 中,这是导航时正确着色所必需的。
Theme theme = await DependencyService.Get<IEnvironment>().GetOperatingSystemTheme();
即使在App() 中使用_ = GetOperatingSystemTheme().ConfigureAwait(true);,也不会调用代码,因此也不会设置主题:
public static async Task<Theme> GetOperatingSystemThemeAsync()
{
Theme systemTheme = await DependencyService.Get<IEnvironment>().GetOperatingSystemTheme().ConfigureAwait(true);
SetTheme(systemTheme);
return systemTheme;
}
以及尝试将其用于 iOS 时的问题:
使用这个non-async Environment_iOS code 和the SetTheme() at Line 53 of the App.cs 我得到了一个
System.NullReferenceException Message=Object reference not set to an instance of an object”。在“UIViewController rootController = UIApplication.SharedApplication.KeyWindow.RootViewController;
如果您不在App() 中调用它,而是仅在App.OnStart() 中调用它,则此flashing issue occurs。
故障排除结果:
无论您的应用程序中的默认设置是什么,导航发生时都会闪烁,换句话说,默认的白色背景将在页面呈现为暗模式之前闪烁。在调用页面(即SomePage())之前设置默认值(所需的背景颜色。即App.Current.Resources = new DarkModeTheme() 用于深色页面)可以提供正确的结果,因为它必须在导航发生和呈现页面之前完成。
【问题讨论】:
-
@Julipan 谢谢。忘记了那些格式选项。
-
您可以编辑问题并添加来自 App.cs 的代码吗?
-
@BrandonMinnick 已更新;但是,示例存储库目前尚未针对 iOS 进行测试。明天将进行测试,因为我目前无法访问 Mac。
标签: c# xamarin.forms xamarin.android xamarin.ios