import 'package:aves/model/activity/activity_track.dart'; import 'package:aves/widgets/activity/utils/activity_formatters.dart'; import 'package:flutter/material.dart'; void showActivityRecalculateDialog({ required BuildContext context, required ActivityTrack activity, }) { final fileDistance = activity.fileDistanceMeters ?? activity.distanceMeters; final fileElevation = activity.fileElevationGainMeters ?? activity.elevationGainMeters; final recomputedDistance = ActivityFormatters.computeDistanceFromTrack(activity); final recomputedElevation = activity.computedElevationGainMeters ?? ActivityFormatters.readDiagnosticDouble( activity.diagnostics, 'computedElevationGainMeters', ); showDialog( context: context, builder: (context) { return AlertDialog( title: const Text('Confronto ricalcolo'), content: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(activity.displayName), const SizedBox(height: 12), _CompareLine( label: 'Distanza file', value: ActivityFormatters.distance(fileDistance), ), _CompareLine( label: 'Distanza ricalcolata', value: ActivityFormatters.distance(recomputedDistance), ), _CompareLine( label: 'Differenza distanza', value: ActivityFormatters.distanceDelta( recomputedDistance, fileDistance, ), ), const Divider(height: 24), _CompareLine( label: 'D+ file', value: ActivityFormatters.elevation(fileElevation), ), _CompareLine( label: 'D+ ricalcolato', value: recomputedElevation == null ? 'non disponibile dai punti salvati' : ActivityFormatters.elevation(recomputedElevation), ), _CompareLine( label: 'Differenza D+', value: recomputedElevation == null ? '-' : ActivityFormatters.elevationDelta( recomputedElevation, fileElevation, ), ), if (recomputedElevation == null) ...[ const SizedBox(height: 12), const Text( 'Nota: per ricalcolare il D+ servono le quote dei singoli punti. ' 'Con il modello attuale la lista contiene solo LatLng; per FIT, GPX e TCX uso il valore calcolato dal parser quando disponibile.', style: TextStyle(fontSize: 12), ), ], ], ), actions: [ TextButton( onPressed: () => Navigator.of(context).pop(), child: const Text('Chiudi'), ), ], ); }, ); } class _CompareLine extends StatelessWidget { final String label; final String value; const _CompareLine({ required this.label, required this.value, }); @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.symmetric(vertical: 2), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Flexible(child: Text(label)), const SizedBox(width: 16), Text( value, style: const TextStyle(fontWeight: FontWeight.w600), ), ], ), ); } }