Certo Fabio. Ad oggi, per la parte **Activity**, dovremmo avere questa struttura principale. ## File Activity attuali ```text lib/widgets/activity/ ├── activity_files_page.dart ├── activity_auto_sync_controller.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 ``` *** ## Cosa fa ogni file ### `activity_files_page.dart` È ancora il file principale della pagina Activity. Contiene: ```text - caricamento attività DB - scan manuale - auto sync - scelta cartella Activity - apertura file manuale GPX/TCX/FIT - gestione navbar Activity - gestione viste: - activities - sports - albums - preferiti - rename activity - apertura mappa - dialog dettagli DB - dialog ricalcolo ``` È ancora grande, ma molto meno di prima. *** ### `activity_auto_sync_controller.dart` Gestisce la sincronizzazione automatica: ```text - scan su apertura pagina - scan quando app torna in foreground - scan dopo selezione cartella ``` *** ### `activity_list_tile.dart` Contiene le righe della lista attività: ```dart ActivityEntryListTile ActivityTrackListTile ``` Quindi gestisce la UI di: ```text - activity salvata nel DB - activity aperta manualmente - cuore preferiti - menu azioni - ricalcolo - info DB - rename ``` *** ### `activity_map_page.dart` È la pagina mappa dell’attività. Serve quando tocchi una activity: ```dart _openActivity(activity) ``` *** ### `activity_sport_groups_view.dart` È la nuova pagina/griglia Sport. Contiene: ```dart ActivitySportGroup ActivitySportGroupsView ``` Serve per mostrare: ```text Corsa Bici Camminata Senza sport ``` con thumbnail e numero attività. *** ### `activity_album_groups_view.dart` È la nuova pagina/griglia Album attività. Contiene: ```dart ActivityAlbumGroup ActivityAlbumGroupsView ``` Serve per mostrare album/cartelle attività tipo: ```text Activity main Garmin Zepp Strava ``` con thumbnail e numero attività. *** ### `preview/activity_entry_preview.dart` Contiene la preview grafica per attività DB: ```dart ActivityEntryPreview _ActivityEntryPreviewPainter ``` Usa: ```dart List ``` per disegnare la traccia salvata nel DB. *** ### `preview/activity_track_preview.dart` Contiene la preview grafica per attività aperte manualmente: ```dart ActivityTrackPreview _ActivityTrackPreviewPainter ``` Usa: ```dart ActivityTrack ``` per disegnare la traccia direttamente dal file aperto. *** ### `utils/activity_formatters.dart` Contiene formatter e calcoli comuni: ```dart ActivityFormatters ``` Con metodi tipo: ```dart ActivityFormatters.distance(...) ActivityFormatters.entryElevation(...) ActivityFormatters.entryDate(...) ActivityFormatters.entryDuration(...) ActivityFormatters.computeDistanceFromTrack(...) ActivityFormatters.readDiagnosticDouble(...) ActivityFormatters.isExpectedActivityRoot(...) ``` *** ## Prossimo file che conviene creare Il prossimo split utile è: ```text lib/widgets/activity/dialogs/activity_recalculate_dialog.dart ``` Per spostare fuori da `activity_files_page.dart`: ```dart _showRecalculateDialog _CompareLine ``` Poi subito dopo: ```text lib/widgets/activity/dialogs/activity_db_fields_dialog.dart ``` Per spostare: ```dart _showActivityDbFieldsDialog _activityEntryDbRows _DbFieldLine ``` Così `activity_files_page.dart` si alleggerisce parecchio.