Aves_mio0.88/activity1.md
2026-10-03 12:51:15 +02:00

6.4 KiB

Sì Fabio, corretto: quelli fanno parte della feature Activity, ma sono in cartelle diverse perché non sono tutti widget.

La struttura completa oggi va vista divisa per livelli:

1. Parser / utils
2. Modello dati
3. DB / bootstrap / scan
4. UI Activity
5. Preview / componenti UI
6. Dialog / formatter

Struttura Activity attuale completa

Parser e utility file attività

lib/utils/activity_file_parser.dart
lib/utils/fit_activity_parser.dart
lib/utils/gpx_activity_parser.dart
lib/utils/tcx_activity_parser.dart

Questi gestiscono:

- riconoscere file GPX / TCX / FIT
- leggere bytes file
- estrarre tracce GPS
- estrarre sport, distanza, quote, durata, metadata
- produrre ActivityTrack

Modelli Activity

lib/model/activity/activity_track.dart
lib/model/activity/activity_entry.dart
lib/model/activity/activity_preview_point.dart

Oggi dovresti avere anche:

lib/model/activity/activity_scan_service.dart
lib/model/activity/activity_library_bootstrap.dart

Quindi la parte model Activity completa è circa:

lib/model/activity/
├── activity_entry.dart
├── activity_library_bootstrap.dart
├── activity_preview_point.dart
├── activity_scan_service.dart
└── activity_track.dart

Ruoli:

activity_track.dart
  modello in memoria quando apro/parso un file attività

activity_entry.dart
  modello persistito nel DB

activity_preview_point.dart
  punti semplificati per thumbnail attività

activity_scan_service.dart
  scansione cartella SAF, parsing, inserimento/aggiornamento DB

activity_library_bootstrap.dart
  inizializzazione/bootstrap libreria attività

UI Activity principale

lib/widgets/activity/activity_files_page.dart
lib/widgets/activity/activity_map_page.dart
lib/widgets/activity/activity_auto_sync_controller.dart

Ruoli:

activity_files_page.dart
  pagina principale Activity, ora gestisce lista, sport, album, preferiti

activity_map_page.dart
  mappa della singola attività

activity_auto_sync_controller.dart
  scheduling scan automatico

Componenti UI estratti

lib/widgets/activity/activity_list_tile.dart
lib/widgets/activity/activity_sport_groups_view.dart
lib/widgets/activity/activity_album_groups_view.dart

Ruoli:

activity_list_tile.dart
  righe lista attività DB e attività aperte manualmente

activity_sport_groups_view.dart
  griglia/card Sport tipo Album

activity_album_groups_view.dart
  griglia/card Album attività

Preview thumbnail Activity

lib/widgets/activity/preview/activity_entry_preview.dart
lib/widgets/activity/preview/activity_track_preview.dart

Ruoli:

activity_entry_preview.dart
  disegna thumbnail da ActivityPreviewPoint salvati nel DB

activity_track_preview.dart
  disegna thumbnail da ActivityTrack aperto manualmente

Utility UI Activity

lib/widgets/activity/utils/activity_formatters.dart

Ruolo:

- format distanza
- format quota
- format data
- format durata
- delta distanza
- delta quota
- calcolo distanza traccia
- lettura diagnostics
- path validation Activity root

Quindi la mappa completa consigliata ora è questa

lib/
├── utils/
│   ├── activity_file_parser.dart
│   ├── fit_activity_parser.dart
│   ├── gpx_activity_parser.dart
│   └── tcx_activity_parser.dart
│
├── model/
│   └── activity/
│       ├── activity_entry.dart
│       ├── activity_library_bootstrap.dart
│       ├── activity_preview_point.dart
│       ├── activity_scan_service.dart
│       └── activity_track.dart
│
└── widgets/
    └── activity/
        ├── activity_auto_sync_controller.dart
        ├── activity_files_page.dart
        ├── activity_list_tile.dart
        ├── activity_map_page.dart
        ├── activity_sport_groups_view.dart
        ├── activity_album_groups_view.dart
        │
        ├── preview/
        │   ├── activity_entry_preview.dart
        │   └── activity_track_preview.dart
        │
        └── utils/
            └── activity_formatters.dart

Prossimi file che conviene creare

Per ridurre ancora activity_files_page.dart, io creerei questi:

lib/widgets/activity/dialogs/activity_recalculate_dialog.dart
lib/widgets/activity/dialogs/activity_db_fields_dialog.dart

E magari dopo:

lib/widgets/activity/controllers/activity_groups_loader.dart

oppure:

lib/model/activity/activity_grouping.dart

per togliere da activity_files_page.dart la logica di:

_loadSportGroups
_loadAlbumGroups

Refactor consigliato prossimo

Io farei questo ordine:

Step 4 — Spostare dialog ricalcolo

Nuovo file:

lib/widgets/activity/dialogs/activity_recalculate_dialog.dart

Dentro spostiamo:

_showRecalculateDialog
_CompareLine

Trasformandolo in funzione pubblica:

void showActivityRecalculateDialog({
  required BuildContext context,
  required ActivityTrack activity,
});

Step 5 — Spostare dialog dettagli DB

Nuovo file:

lib/widgets/activity/dialogs/activity_db_fields_dialog.dart

Dentro spostiamo:

_showActivityDbFieldsDialog
_activityEntryDbRows
_DbFieldLine

Trasformandolo in funzione pubblica:

Future<void> showActivityDbFieldsDialog({
  required BuildContext context,
  required ActivityEntry entry,
});

Step 6 — Spostare grouping Sport/Album

Nuovo file possibile:

lib/model/activity/activity_groups.dart

Con:

ActivitySportGroup buildSportGroups(...)
ActivityAlbumGroup buildAlbumGroups(...)

Oppure lasciamo i model group vicino ai widget per ora.


In pratica

Sì, hai ragione: nella lista Activity vanno considerati anche questi file:

lib/utils/activity_file_parser.dart
lib/utils/fit_activity_parser.dart
lib/utils/tcx_activity_parser.dart
lib/utils/gpx_activity_parser.dart
lib/model/activity/activity_track.dart
lib/widgets/activity/activity_map_page.dart
lib/widgets/activity/activity_files_page.dart
lib/model/activity/activity_library_bootstrap.dart

E adesso anche tutti quelli nuovi che abbiamo creato.

Il prossimo miglior passo è spostare i dialog fuori da activity_files_page.dart, perché sono ancora uno dei blocchi più grossi rimasti.