calculateCaloriesAndTime method

Map<String, dynamic> calculateCaloriesAndTime()

Implementation

Map<String, dynamic> calculateCaloriesAndTime() {
  final int caloriesToLoseOrGain;
  final double weightDifference = targetWeight - currentWeight;
  int daysToGoal = 0;
  int dailyCalories;

  if (goal == Goal.lose_weight) {
    caloriesToLoseOrGain = -500; // Safe deficit
    daysToGoal =
        ((weightDifference.abs() * 7700) / caloriesToLoseOrGain.abs())
            .ceil(); // 1 kg = 7700 kcal
    dailyCalories = (bmr + caloriesToLoseOrGain).toInt();
    if (dailyCalories < 1200) {
      // Don't go below 1200 kcal/day
      dailyCalories = 1200;
    }
  } else if (goal == Goal.gain_weight) {
    caloriesToLoseOrGain = 500; // Safe surplus
    daysToGoal = ((weightDifference.abs() * 7700) / caloriesToLoseOrGain)
        .ceil(); // 1 kg = 7700 kcal
    dailyCalories = (bmr + caloriesToLoseOrGain).toInt();
    if (dailyCalories > 3500) {
      // Don't go above 3500 kcal/day
      dailyCalories = 3500;
    }
  } else {
    caloriesToLoseOrGain = 0;
    dailyCalories = bmr.toInt();
  }

  return {
    'calories': dailyCalories,
    'timeTaken': daysToGoal,
  };
}