double estimateCalories({
required HealthWorkoutActivityType type,
required Duration duration,
required double weightKg,
}) {
// MET values (Metabolic Equivalent of Task)
final metValues = {
HealthWorkoutActivityType.WALKING: 3.5,
HealthWorkoutActivityType.RUNNING: 9.8,
HealthWorkoutActivityType.CYCLING: 7.5,
HealthWorkoutActivityType.SWIMMING_OPEN_WATER: 8.0,
HealthWorkoutActivityType.YOGA: 2.5,
// Add more as needed
};
final met = metValues[type] ?? 5.0; // Default to moderate intensity
final hours = duration.inMinutes / 60.0;
// Calories = MET × weight (kg) × duration (hours)
return met * weightKg * hours;
}
// Usage
final duration = workoutEnd.difference(workoutStart);
final estimatedCalories = estimateCalories(
type: HealthWorkoutActivityType.RUNNING,
duration: duration,
weightKg: 70.0,
);
await health.writeWorkoutData(
activityType: HealthWorkoutActivityType.RUNNING,
start: workoutStart,
end: workoutEnd,
totalDistance: 5000.0,
totalEnergyBurned: estimatedCalories,
);