screen-locker/stronglift_replacement/workout_app/lib/models/exercise_result.dart
Krzysztof kuhy Rudnicki d8062a601f feat: overhaul workout app with progress tracking and UX improvements
- Remove automatic rest timer after each set
- Add inline threshold controls (success/fail streaks) on each exercise card
  during an active workout
- Settings: auto-save on change with 600 ms debounce; replace Save button
  with Reset to defaults
- Fix weight display asymmetry in settings (fixed 72 px width, centred)
- Progress screen (renamed from History): per-exercise view shows streak
  counters, weight chart (kg Y-axis, date X-axis, rolling-2 avg for total
  volume), exercise-filtered calendar, and per-exercise session tiles
- Total view shows rolling-2-session average volume chart + full calendar
  + all-session list
- Add WorkoutCalendar widget with monthly navigation
- Store warmupDone in ExerciseResult JSON; surface warmup per session tile

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-06 11:39:25 +02:00

31 lines
830 B
Dart

/// All set results for one exercise in a workout session.
library;
import 'package:workout_app/models/exercise.dart';
import 'package:workout_app/models/set_result.dart';
class ExerciseResult {
const ExerciseResult({
required this.exercise,
required this.sets,
this.warmupDone = false,
});
final Exercise exercise;
final List<SetResult> sets;
final bool warmupDone;
/// True when every set was fully completed.
bool get succeeded => sets.isNotEmpty && sets.every((s) => s.succeeded);
Map<String, dynamic> toJson() => {
'name': exercise.name,
'targetSets': exercise.sets,
'targetReps': exercise.reps,
'targetWeight': exercise.weight,
'warmupDone': warmupDone,
'sets': sets.map((s) => s.toJson()).toList(),
'succeeded': succeeded,
};
}