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.