FrymasterBadgeApp/Documentation/AppCS.md

49 lines
1.9 KiB
Markdown

# App
**Namespace:** `FrymasterBadgeApp`
**Base Class:** `Microsoft.Maui.Controls.Application`
**Purpose:** MAUI application entry point. Handles theme persistence, dependency injection, and graceful startup error handling.
## 🔑 Fields
| Name | Type | Access | Description |
|------|------|--------|-------------|
| `_serviceProvider` | `IServiceProvider` | `private` | Holds the DI container used to resolve services like `AppShell`. |
| `ThemePrefKey` | `const string` | `public` | Constant key (`"AppTheme"`) used to store/retrieve theme preference. Must match `SettingsPage`. |
## 🛠 Constructor
### `App(IServiceProvider serviceProvider)`
- **Access:** `public`
- **Parameters:** `serviceProvider` (`IServiceProvider`)
- **Behavior:**
1. Logs constructor start.
2. Calls `InitializeComponent()` to load XAML UI.
3. Applies saved theme via `ApplySavedTheme()`.
4. Stores the injected `IServiceProvider`.
5. Catches and logs fatal XAML initialization errors.
## 📦 Methods
### `ApplySavedTheme()`
- **Access:** `private`
- **Returns:** `void`
- **Behavior:**
1. Reads `"AppTheme"` from `Preferences.Default`. Defaults to `"System"`.
2. Maps string to `AppTheme` enum (`Light`, `Dark`, `Unspecified`).
3. Sets `Application.Current.UserAppTheme`.
4. Logs success or warns on failure.
### `CreateWindow(IActivationState? activationState)`
- **Access:** `protected override`
- **Parameters:** `activationState` (`IActivationState?`)
- **Returns:** `Window`
- **Behavior:**
1. Resolves `AppShell` via `_serviceProvider`.
2. Returns new `Window` containing resolved `AppShell`.
3. If resolution fails, returns a fallback `ContentPage` with `"Startup Failed"` title, exception message in red, and log reference. Prevents hard crash.
---
**Key Features:**
- ✅ Theme persistence across sessions
- ✅ DI-ready shell resolution
- ✅ Graceful startup failure UI
- ✅ Comprehensive initialization logging