mirror of
https://github.com/wger-project/flutter.git
synced 2026-02-18 23:42:00 +01:00
94 lines
2.2 KiB
Dart
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);
|
|
}
|