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.