WT1.1.10+1 Compact Test Edit

This commit is contained in:
bossanyit
2021-03-09 15:49:15 +01:00
parent 9c84714822
commit 2e0d7fc37d
26 changed files with 656 additions and 40 deletions
+5
View File
@@ -173,6 +173,11 @@ class MenuBloc extends Bloc<MenuEvent, MenuState> with Trans, Logging {
ability = ExerciseAbility.endurance;
break;
case "Cardio":
ability = ExerciseAbility.running;
break;
case "Test Center":
ability = ExerciseAbility.mini_test;
break;
case "My Body":
ability = ExerciseAbility.none;
break;
@@ -0,0 +1,83 @@
import 'dart:async';
import 'dart:collection';
import 'package:aitrainer_app/bloc/menu/menu_bloc.dart';
import 'package:aitrainer_app/model/cache.dart';
import 'package:aitrainer_app/model/exercise_ability.dart';
import 'package:aitrainer_app/model/exercise_plan.dart';
import 'package:aitrainer_app/model/exercise_plan_detail.dart';
import 'package:aitrainer_app/model/exercise_plan_template.dart';
import 'package:aitrainer_app/model/exercise_type.dart';
import 'package:aitrainer_app/repository/workout_tree_repository.dart';
import 'package:aitrainer_app/service/exercise_plan_service.dart';
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
part 'test_set_edit_event.dart';
part 'test_set_edit_state.dart';
class TestSetEditBloc extends Bloc<TestSetEditEvent, TestSetEditState> {
final String templateName;
final WorkoutTreeRepository workoutTreeRepository;
final MenuBloc menuBloc;
final List<ExerciseType> _exerciseTypes = List();
final HashMap<int, ExerciseType> _exercisePlanDetails = HashMap();
TestSetEditBloc({this.templateName, this.workoutTreeRepository, this.menuBloc}) : super(TestSetEditInitial()) {
if (Cache().exercisePlanTemplates.isNotEmpty) {
Cache().exercisePlanTemplates.forEach((element) {
final ExercisePlanTemplate template = element as ExercisePlanTemplate;
if (template.name == templateName) {
template.exerciseTypes.forEach((id) {
final ExerciseType exerciseType = Cache().getExerciseTypeById(id);
_exerciseTypes.add(exerciseType);
_exercisePlanDetails[exerciseType.exerciseTypeId] = exerciseType;
});
}
});
}
}
@override
Stream<TestSetEditState> mapEventToState(TestSetEditEvent event) async* {
try {
if (event is TestSetEditChangeExerciseType) {
final List<ExerciseType> alternatives = workoutTreeRepository.getExerciseTypeAlternatives(event.exerciseTypeId);
final ExerciseType exerciseType = Cache().getExerciseTypeById(event.exerciseTypeId);
if (event.index > alternatives.length) {
/// skip
_exercisePlanDetails[exerciseType.exerciseTypeId] = null;
} else if (event.index == 0) {
_exercisePlanDetails[exerciseType.exerciseTypeId] = exerciseType;
} else {
final changedExerciseType = alternatives[event.index - 1];
_exercisePlanDetails[exerciseType.exerciseTypeId] = changedExerciseType;
}
} else if (event is TestSetEditSubmit) {
yield TestSetEditLoading();
ExercisePlan exercisePlan = ExercisePlan(templateName, Cache().userLoggedIn.customerId);
exercisePlan.private = true;
exercisePlan.type = ExerciseAbility.mini_test.toString();
exercisePlan.dateAdd = DateTime.now();
ExercisePlan savedExercisePlan = await ExercisePlanApi().saveExercisePlan(exercisePlan);
List<ExercisePlanDetail> details = List();
for (var entry in _exercisePlanDetails.entries) {
if (entry.value != null) {
ExercisePlanDetail exercisePlanDetail = ExercisePlanDetail(entry.value.exerciseTypeId);
exercisePlanDetail.exercisePlanId = savedExercisePlan.exercisePlanId;
exercisePlanDetail.serie = 1;
ExercisePlanDetail savedDetail = await ExercisePlanApi().saveExercisePlanDetail(exercisePlanDetail);
details.add(savedDetail);
}
}
Cache().saveActiveExercisePlan(exercisePlan, details);
yield TestSetEditSaved();
}
} on Exception catch (e) {
yield TestSetEditError(message: e.toString());
}
}
List get exerciseTypes => this._exerciseTypes;
}
@@ -0,0 +1,33 @@
part of 'test_set_edit_bloc.dart';
abstract class TestSetEditEvent extends Equatable {
const TestSetEditEvent();
@override
List<Object> get props => [];
}
class TestSetEditLoad extends TestSetEditEvent {
const TestSetEditLoad();
}
class TestSetEditChangeExerciseType extends TestSetEditEvent {
final int index;
final int exerciseTypeId;
const TestSetEditChangeExerciseType({this.index, this.exerciseTypeId});
@override
List<Object> get props => [index, exerciseTypeId];
}
class TestSetEditSkipExerciseType extends TestSetEditEvent {
final int exerciseTypeId;
const TestSetEditSkipExerciseType({this.exerciseTypeId});
@override
List<Object> get props => [exerciseTypeId];
}
class TestSetEditSubmit extends TestSetEditEvent {
const TestSetEditSubmit();
}
@@ -0,0 +1,32 @@
part of 'test_set_edit_bloc.dart';
abstract class TestSetEditState extends Equatable {
const TestSetEditState();
@override
List<Object> get props => [];
}
class TestSetEditInitial extends TestSetEditState {
const TestSetEditInitial();
}
class TestSetEditReady extends TestSetEditState {
const TestSetEditReady();
}
class TestSetEditSaved extends TestSetEditState {
const TestSetEditSaved();
}
class TestSetEditLoading extends TestSetEditState {
const TestSetEditLoading();
}
class TestSetEditError extends TestSetEditState {
final String message;
const TestSetEditError({this.message});
@override
List<Object> get props => [message];
}