completeSet method
Implementation
Future<void> completeSet({
required int exerciseIndex,
required int setIndex,
required double weight,
required int reps,
required int rir,
Duration? setDuration,
Duration? pauseDuration, //Fehlt noch,
}) async {
if (_state == null || _plan == null) return;
final currentEx = _plan!.exercises[exerciseIndex];
final newSet = PerformedSet(
exerciseIndex: exerciseIndex,
setIndex: setIndex,
actualWeight: weight,
actualReps: reps,
rir: rir,
pause: pauseDuration,
duration: setDuration,
completedAt: DateTime.now(),
);
final existingExercise = _state!.performed.firstWhere(
(e) => e.exerciseIndex == exerciseIndex,
orElse:
() => PerformedExercise(
exerciseIndex: exerciseIndex,
exerciseName: currentEx.name,
sets: const [],
),
);
final updatedSets = [
// falls schon einer mit gleichem setIndex vorhanden ist, behalten (kein Duplikat)
for (final s in existingExercise.sets) s,
if (!existingExercise.sets.any((s) => s.setIndex == setIndex)) newSet,
];
final updatedExercise = PerformedExercise(
exerciseIndex: existingExercise.exerciseIndex,
exerciseName:
existingExercise.exerciseName.isEmpty
? currentEx.name
: existingExercise.exerciseName,
sets: updatedSets,
);
final updatedPerformed = [
for (final e in _state!.performed)
if (e.exerciseIndex == exerciseIndex) updatedExercise else e,
if (!_state!.performed.any((e) => e.exerciseIndex == exerciseIndex))
updatedExercise,
];
_state = _state!.copyWith(
performed: updatedPerformed,
setIndex: setIndex + 1,
updatedAt: DateTime.now(),
);
await _persist();
notifyListeners();
}