111 lines
3.5 KiB
Dart
111 lines
3.5 KiB
Dart
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<void>(
|
|
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),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|