Files
smart-serow/pi/ui/lib
2026-01-26 18:04:36 +09:00
..
2026-01-26 16:50:52 +09:00
2026-01-26 16:50:52 +09:00
2026-01-26 00:20:52 +09:00
2026-01-26 18:04:36 +09:00
2026-01-26 00:20:52 +09:00
2026-01-26 00:35:48 +09:00

Flutter App Structure

Entry Flow

main.dart → AppThemeProvider → MaterialApp → AppRoot → Screen

Folders

Folder Purpose
screens/ Full-screen views (splash, dashboard, overheat)
widgets/ Reusable components (stat_box, navigator)
services/ Singletons with business logic
theme/ Color definitions and runtime theme switching

Services

All services use singleton pattern with ServiceName.instance.

Service Role
ConfigService Loads config.json, exposes settings
PiIO Pi hardware interface (CPU temp, future GPIO)
OverheatMonitor Polls temp, fires callback when threshold exceeded
ThemeService Dark/bright mode state, notifies listeners
TestFlipFlopService Debug: toggles theme + navigator emotion every 2s

Theme System

  • AppColors — static color constants (dark/bright variants), auto-generated from JSON
  • AppTheme — InheritedWidget providing runtime colors via AppTheme.of(context)
  • ThemeService — singleton holding current mode, call setDarkMode(bool) or toggle()

Usage in widgets:

final theme = AppTheme.of(context);
backgroundColor: theme.background,
color: theme.foreground,

Screen Lifecycle

AppRoot manages which screen is visible:

  1. SplashScreen — during init sequence
  2. DashboardScreen — normal operation
  3. OverheatScreen — when OverheatMonitor triggers (leads to shutdown)