namespace FrymasterBadgeApp; public partial class App : Application { private readonly IServiceProvider _serviceProvider; private const string ThemePrefKey = "AppTheme"; // Must match SettingsPage public App(IServiceProvider serviceProvider) { AppLogger.Info("App: Constructor - Internal setup beginning"); try { InitializeComponent(); ApplySavedTheme(); // Set the theme before resolving Shell AppLogger.Info("App: InitializeComponent and Theme application successful"); } catch (Exception ex) { AppLogger.Error("App: FATAL XAML ERROR", ex); throw; } _serviceProvider = serviceProvider; } /// /// Applies the saved theme preference to the app. /// If the preference could not be applied, a warning is logged. /// private void ApplySavedTheme() { try { var pref = Microsoft.Maui.Storage.Preferences.Default.Get(ThemePrefKey, "System"); AppLogger.Info($"App: Applying saved theme preference: {pref}"); Application.Current.UserAppTheme = pref switch { "Light" => AppTheme.Light, "Dark" => AppTheme.Dark, _ => AppTheme.Unspecified }; } catch (Exception ex) { AppLogger.Warn($"App: Failed to apply theme preference: {ex.Message}"); } } /// /// Creates a new instance of the required AppShell service and /// opens a new window with the specified content. /// protected override Window CreateWindow(IActivationState? activationState) { AppLogger.Info("App: CreateWindow entered"); try { var shell = _serviceProvider.GetRequiredService(); AppLogger.Info("App: AppShell resolved successfully"); return new Window(shell); } catch (Exception ex) { AppLogger.Error("CRITICAL STARTUP ERROR: Dependency Resolution Failed", ex); return new Window( new ContentPage { Content = new VerticalStackLayout { VerticalOptions = LayoutOptions.Center, Padding = 20, Children = { new Label { Text = "Startup Failed", FontAttributes = FontAttributes.Bold, HorizontalTextAlignment = TextAlignment.Center, FontSize = 20 }, new Label { Text = ex.Message, HorizontalTextAlignment = TextAlignment.Center, TextColor = Colors.Red, }, new Label { Text = "Check log for details.", HorizontalTextAlignment = TextAlignment.Center, }, } } } ); } } }