Pāriet uz saturu

Mobile app

Flutter Android client. Entry point: lib/main.dart. Package: lv.ca. Versija pārvalda pubspec.yaml version:.

Direktoriju struktūra (lib/)

Direktorija Saturs
screens/ Top-level routes — map, settings, onboarding, news, skices, offline areas, properties
services/ 66 servisi, ko sadalu zemāk pa domēniem
models/ Tīras data klases — ca_model, skice_model, heritage_model, forest_infra_model, geofence_settings, map_marker_model, custom_wms_layer
widgets/ Atkārtoti izmantojami UI komponenti, ieskaitot widgets/object_sheets/ ar bottom-sheet variantiem identify flow'am
theme/ Krāsu/spacing/tipogrāfijas tokeni. SoT: theme/app_colors.dart
utils/ Tīras palīgfunkcijas — projections.dart (LKS-92 ↔ WGS84), geometry_*, formatters, identify_tolerance, display_expression, screen_size
data/ Bundled administratīvie dati (latvia_admin.dart)
assets/ Konfigurācijas, lokalizācijas, dati, palīdzība, ziņas, juridiskie dokumenti

Boot secība — parallel startup

main.dart startē šādus 7 boot-time servisus paralēli caur Future.wait:

  1. EasyLocalization — lokalizāciju ielāde (assets/translations/{lv,en,de,fi,ru}.json)
  2. AppDataMigrator — SharedPreferences shēmas atjaunināšana
  3. ServiceConfigassets/config/services.json ielāde + server refresh
  4. ThemeService — saglabātā light/dark izvēle
  5. FieldModeService — sun-readable mode toggle stāvoklis
  6. ConsentService — GDPR opt-in stāvokļi
  7. TelemetryService — analytics opt-in

Boot laiks: ~50-150 ms (limited by slowest service, ne summa).

Pēc runApp, fire-and-forget startē:

  • DeeplinkService.init() — deeplink listener
  • NewsService.load() — pirmā ziņas ielāde
  • SentryConfig.init() — crash reporting (ja DSN compile-time iesetēts)

Servisu katalogs (66 servisi pa kategorijām)

Datu avoti (15)

Serviss Mērķis
vmd_service VMD public API → CA polygon (decision number → WKT)
cadastre_service VZD kadastra meklēšana + WFS snap punkti
lad_service LAD lauku bloki, deklarētie lauki
lad_meta_service LAD termiņi un atskaišu periodi
forest_info_service VMD MVR meža informācija (suga, vecums, augstums)
forest_infra_service LVM ceļi, tilti, drenāža
forest_classifiers Cirtes veidu klasifikators
ozols_service DAP Ozols ArcGIS — mikroliegumi, ĪADT, biotopi, sugu atradnes
heritage_service OSM kultūras pieminekļi
environmental_data_service LVĢMC ūdens objekti, NKMP
parish_forestry_service LV admin → virsmežniecība/mežniecība mapping
weather_service LVĢMC laika apstākļi
custom_wms_service Lietotāja pievienoti WMS slāņi
lvm_layers LVM GEO WMS slāņu katalogs (ortofoto, kadastrs, MVR, infrastruktūra)
multi_layer_identify_service "Tap on map" → pieprasījumi visiem aktīvajiem slāņiem

GPS un atrašanās vieta (4)

Serviss Mērķis
background_gps_service Foreground service Android — turpina GPS stream'u kad ekrāns nodzisis
geofence_service Point-in-polygon 2s tick; brīdina, kad lietotājs ārpus skices vai cirsmas
kalman_smoother GPS noise filter — smooth pozīciju ar Kalman filter
track_recording_service GPX track ieraksts + saglabāšana

Tīkls un sinhronizācija (5)

Serviss Mērķis
connectivity_service Offline → online switching, auto-retry queued operations
http_client Centralizēts HTTP klients ar timeout, retry, bad-cert tolerance
server_service Device registration + heartbeat uz klm-vzd-service
sync_queue_service Offline aktivitāšu rinda, dispatch pie connectivity
package_service App version info + update checking

Krātuve un cache (7)

Serviss Mērķis
storage_service SharedPreferences wrapper ar tipsafe API
drawing_storage_service Lietotāja zīmējumi (poligoni, līnijas, punkti)
skice_storage_service Skices + caurmēra mērījumu sesijas
saved_properties_service Saglabāti īpašumi notifikāciju abonēšanai
offline_cache_service CA modeļu cache + sinhronizācija ar serveri
offline_maps_service LVM ortofoto tile cache izvēlētos apgabalos
cached_tile_provider flutter_map TileProvider ar LRU cache (50 MB cap)

Skices operācijas (7)

Serviss Mērķis
skice_kml_service Skices → KML eksports/imports
skice_geojson_service Skices → GeoJSON eksports
skice_shp_service Skices → Shapefile eksports
skice_pdf_service Skices → PDF rendering ar krāsām, mērogu, kompasu
polygon_clip_service Sutherland-Hodgman polygon clipping (snap pie kadastra)
snap_boundary_service Kadastra robežu snap, virsotnes prioritāte pār malām
measurement_service Polygon platība, perimetrs, virsotnes count

Identify, search un navigācija (3)

Serviss Mērķis
identify_service WFS GetFeatureInfo viena slāņa identify
search_service Adrešu + kadastra Nr meklēšana caur VAR + VZD
navigation_service Google Maps / Waze launchers ar koordinātēm

Komercija (3)

Serviss Mērķis
stripe_checkout_service Stripe checkout link ģenerēšana caur backend
subscription_service Stripe subscription status no backend
subscription_monitoring_service ntfy notifikāciju abonēšana īpašumiem (apgrūtinājumi)
Serviss Mērķis
telemetry_service Custom event tracking (Q14 telemetry) ar opt-in
gdpr_service GDPR data export + dzēšana
consent_service Opt-in stāvokļi (telemetry, crash report, property notifications)
sentry_config Sentry SDK init + breadcrumb size control + beforeSend opt-in gate

Notifikācijas (2)

Serviss Mērķis
notification_subscriber ntfy SSE klients lokālajām Android notifikācijām
news_service App news feed (assets/news/)

UI un izvēles (5)

Serviss Mērķis
theme_service Light/dark/system tēmas izvēle ar persist
field_mode_service Sun-readable režīms — palielināts kontrasts uz saules
visibility_service Slēptie objekti ("Slēpt skici" funkcija)
layer_favorites_service Lietotāja favorītu slāņi quick toggle
onboarding_service First-run onboarding stāvoklis

Media (2)

Serviss Mērķis
media_capture Foto/video uzņemšana cirsmas dokumentēšanai
media_service Media failu saglabāšana, sasaiste ar skicēm

Infrastruktūra (9)

Serviss Mērķis
app_data_migrator SharedPreferences shēmas versijas migrācija
deeplink_service cageo:// shēma + share-link parsēšana
error_messages Lokalizēti kļūdu ziņojumi
geo_service GPS atļauju pārvalde
kml_service Vispārējais KML parse/serialize
service_config Server-side service URLs override no /api/services-config
service_factory Servisu lazy-init factory
service_metadata Servisu describing metadata UI rādīšanai
ca_status_service CA statuss (active, expired, removed)

Crash reporting (Sentry)

DSN tiek padots build-time: --dart-define=SENTRY_DSN=.... Bez DSN, init ir no-op.

Release builds caur scripts/build_release.sh:

SENTRY_DSN=https://...@sentry.io/... bash scripts/build_release.sh

Trīs vārti, lai event sasniegtu Sentry:

  1. DSN compile-time iesetēts (String.fromEnvironment('SENTRY_DSN') nav tukšs)
  2. SentryFlutter.init veiksmīgi izpildīts boot laikā
  3. Settings → "Atļaut anonīmus crash report" ir ON (GDPR opt-in)

Visi trīs jābūt true, citādi beforeSend callback drop'o event.

Build un install

# Setup (vienreiz)
flutter pub get

# Static analysis (CI strikta)
flutter analyze --no-fatal-infos --no-fatal-warnings

# Testi
flutter test test/services test/models --reporter expanded

# Debug build (ikdienai)
flutter build apk --debug
flutter install -d <DEVICE_ID> --debug

# Release ar Sentry
SENTRY_DSN="https://...@sentry.io/..." bash scripts/build_release.sh
flutter install -d <DEVICE_ID> --release

Pirms katra build: palielini pubspec.yaml version: (patch=bugfix, minor=feature, major=breaking).

Konfigurācijas pārvalde

  • Bundled assets/config/services.json — minimālā config šippots ar APK
  • Server override/api/services-config atgriež jaunāku versiju, ja eksistē; cache uz SharedPreferences
  • Tīkla mainīšana bez release — atjaunini geo-backend/data/services.json, restart Flask

Atkarības

Atvērt pubspec.yaml pilnam sarakstam. Galvenās:

  • flutter_map + latlong2 — karte, ne Mapbox/Google
  • geolocator — GPS
  • proj4dart — koordinātu transformācija LKS-92 ↔ WGS84
  • device_info_plus + android_id — device telemetry + stabils notif token
  • sentry_flutter — crash reporting
  • pdf + printing — skices PDF rendering
  • audio_waveforms — balss piezīmes cirsmā

Plašāk: CLAUDE.md un REFACTORING_PLAN.md.