Pāriet uz saturu

Light theme migrācijas plāns

Datums: 2026-05-02 Mērķis: likvidēt hardcoded CaNavigatorApp.bgDark/bgMid/textColor/textDim/accentColor/borderColor lietojumus, lai light tēma uzreiz strādātu visā app.

Pašreizējais stāvoklis

Sprints Migrēts
Sprint 4 lib/theme/app_theme.dart ar lightTheme() aktivizēts
Sprint 6 consent_screen.dart, legal_screen.dart migrēti uz Theme.of(context).colorScheme
Sprint 7+ Atlikti

Atlikušie lietojumi: ~200 vietās 12 ekrānos un 6 widget-os.

Migrācijas mapping table

Vecais (CaNavigatorApp.*) Jaunais (Theme.of(context).colorScheme.*)
bgDark (tumši zaļš) surface (auto dark/light)
bgMid (vidējs zaļš) surfaceContainerHigh
textColor (gaišs teksts) onSurface
textDim (pelēks teksts) onSurfaceVariant
accentColor (zaļais accent) primary
borderColor (tumšs zaļš) outline
primaryColor (AppBar) surfaceContainer (default AppBar)

Migrācijas paterns

Pirms (StatelessWidget)

class MyScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: CaNavigatorApp.bgDark,  // ❌
      body: Text('Hi', style: TextStyle(color: CaNavigatorApp.textColor)),  // ❌
    );
  }
}

Pēc

class MyScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final colors = Theme.of(context).colorScheme;
    return Scaffold(
      // backgroundColor noklusējumā ņemts no theme — dzēst override
      body: Text('Hi', style: TextStyle(color: colors.onSurface)),
    );
  }
}

Helper metodes ar _buildXxx() paterns

Helper metodes nesaņem BuildContext automātiski. Variants A: padodi context kā argumentu:

Widget _buildSection(BuildContext context) {
  final colors = Theme.of(context).colorScheme;
  // ...
}

Variants B (vēlamāks lielajām metodēm): konvertē uz savu Stateless widget:

class _Section extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final colors = Theme.of(context).colorScheme;
    // ...
  }
}

Migrācijas secība (~5d kopā)

# Ekrāns/Widget Lietojumi Slodze Prioritāte
1 onboarding_screen.dart 19 1.5h Augsta (pirmais ekrāns)
2 monitored_properties_screen.dart ~30 2h Augsta (Phase 2)
3 settings_screen.dart ~60 4h Augsta (theme switcher pats)
4 notes_screen.dart ~25 2h Vidēja
5 skices_screen.dart ~15 1h Vidēja
6 skice_form_screen.dart ~40 3h Vidēja
7 feedback_screen.dart ~10 1h Zema
8 help_screen.dart ~5 30 min Zema
9 news_screen.dart ~5 30 min Zema
10 input_screen.dart ~30 2h Augsta (drawer saturs)
11 download_area_screen.dart ~10 1h Zema
12 offline_areas_screen.dart ~10 1h Zema
W1 forest_infra_widget.dart ~10 1h Zema (panel — overlay tumšs)
W2 heritage_widget.dart ~5 30 min Zema
W3 weather_banner.dart ~10 1h Vidēja
W4 marker_popup.dart ~30 3h Augsta (bieži lietots)
W5 status_bar.dart ~15 2h Augsta (vienmēr redzams)
W6 drawing_toolbar.dart ~10 1h Vidēja

Kopā: ~30h = 4 dienas pārliecinātu darbu.

Validācija pēc katras migrācijas

flutter analyze lib/screens/<file>.dart
flutter run --debug  # palaiž light + dark
# Vizuāli verificē: visi teksti lasāmi abos režīmos, ikonas redzamas

Pēc visu migrāciju

# Atrod atlikušos lietojumus
grep -r "CaNavigatorApp\." lib/ --include="*.dart" | wc -l

# Mērķis: 0 vai tikai backwards-compatibility re-export `lib/main.dart` 109-117

Tad lib/main.dart CaNavigatorApp.bgDark u.c. statiskās konstantes var dzēst pavisam, jo neviena vieta tās vairs nelieto.


Sprint 9 ieteicamais batch (1d): ekrāni #1-3 (onboarding + monitored_properties + settings_screen) + W4-W5 (marker_popup + status_bar). Šie ir visvairāk redzamie un dod 90% lietotāja vērtību. Pārējos atstāj Sprint 10.