2.5 KiB
2.5 KiB
AppShell
Namespace: FrymasterBadgeApp
Base Class: Shell
Purpose: MAUI Shell container responsible for dynamic tab generation, routing, theme switching, and app-level navigation.
🔑 Fields
| Name | Type | Access | Description |
|---|---|---|---|
_db |
SqlService |
private readonly |
Database service. |
_printerService |
PrinterService |
private readonly |
Printing service. |
_serviceProvider |
IServiceProvider |
private readonly |
DI container for resolving pages. |
_isInitialized |
bool |
private |
Prevents duplicate company loading. |
🛠 Constructor
AppShell(SqlService db, PrinterService printerService, IServiceProvider serviceProvider)
- Access:
public - Behavior: Registers routes for
SettingsPage,CompanyPage, andEmployeePage.
📦 Methods
OnAppearing()
- Access:
protected override async void - Behavior: Ensures
LoadCompaniesAsync()runs exactly once when shell becomes visible.
LoadCompaniesAsync()
- Access:
private async Task - Behavior:
- Fetches companies on background thread via
Task.Run. - Switches to main thread to clear
MainTabBar.Items. - If no companies: adds
"Setup"tab routing toCompanyPage. - Else: adds
ShellContenttab per company routing toEmployeePage_{ID}. - Navigates to first tab using
///{targetRoute}(rebuilds stack). - Falls back to
///InitialSetupon DB failure.
- Fetches companies on background thread via
OnManageCompaniesClicked(object sender, EventArgs e)
- Access:
public async void - Behavior: Pushes
CompanyPageonto navigation stack.
OnSettingsClicked(object sender, EventArgs e)
- Access:
private async void - Behavior: Pushes
SettingsPageonto stack.
OnThemeClicked(object sender, EventArgs e)
- Access:
private async void - Behavior: Displays action sheet (
System,Light,Dark). UpdatesApplication.Current.UserAppThemeand persists toPreferences.Default.
OnExitClicked(object sender, EventArgs e)
- Access:
private - Behavior: Calls
Application.Current?.Quit().
OnAboutClicked(object sender, EventArgs e)
- Access:
private async void - Behavior: Displays alert:
"Frymaster Badge App v1.0".
Architecture Notes:
- Uses
///route prefix to force full navigation stack rebuild when switching initial tabs. - Thread-safe UI updates via
MainThread.InvokeOnMainThreadAsync. - Graceful degradation to setup screen on database failure.