Files
flutter/lib/models/workouts/set.dart
2021-04-06 20:41:44 +02:00

94 lines
2.2 KiB
Dart

import 'package:json_annotation/json_annotation.dart';
import 'package:wger/models/exercises/exercise.dart';
import 'package:wger/models/workouts/setting.dart';
part 'set.g.dart';
@JsonSerializable()
class Set {
static const DEFAULT_NR_SETS = 4;
@JsonKey(required: true)
int? id;
@JsonKey(required: true)
late int sets;
@JsonKey(required: false, name: 'exerciseday')
late int day;
@JsonKey(required: true)
int? order;
@JsonKey(ignore: true)
List<Exercise> exercisesObj = [];
@JsonKey(ignore: true)
List<int> exercisesIds = [];
@JsonKey(ignore: true)
List<Setting> settings = [];
/// Computed settings (instead of 4x10 this has [10, 10, 10, 10]), used for
/// the gym mode where the individual values are used
@JsonKey(ignore: true)
List<Setting> settingsComputed = [];
Set({
required this.day,
required this.sets,
this.order,
});
Set.withData({
this.id,
sets,
day,
order,
exercises,
settings,
settingsComputed,
}) {
this.sets = sets ?? DEFAULT_NR_SETS;
this.order = order ?? 1;
this.exercisesObj = exercises ?? [];
this.exercisesIds = exercisesObj.map((e) => e.id).toList();
this.settings = settings ?? [];
this.settingsComputed = settingsComputed ?? [];
if (day != null) {
this.day = day;
}
}
/// Return only one setting object per exercise, this makes rendering workout
/// plans easier and the gym mode uses the synthetic settings anyway.
List<Setting> get settingsFiltered {
List<Setting> out = [];
settings.forEach((setting) {
final foundSettings = out.where(
(element) => element.exerciseId == setting.exerciseId,
);
if (foundSettings.length == 0) {
out.add(setting);
}
});
return out;
}
void addExercise(Exercise exercise) {
exercisesObj.add(exercise);
exercisesIds.add(exercise.id);
}
void removeExercise(Exercise exercise) {
exercisesObj.removeWhere((e) => e.id == exercise.id);
exercisesIds.removeWhere((e) => e == exercise.id);
}
// Boilerplate
factory Set.fromJson(Map<String, dynamic> json) => _$SetFromJson(json);
Map<String, dynamic> toJson() => _$SetToJson(this);
}