import 'dart:async'; import 'package:aitrainer_app/model/cache.dart'; import 'package:aitrainer_app/model/workout_menu_tree.dart'; import 'package:aitrainer_app/repository/exercise_repository.dart'; import 'package:aitrainer_app/repository/workout_tree_repository.dart'; import 'package:aitrainer_app/util/trans.dart'; import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter/cupertino.dart'; import 'package:meta/meta.dart'; part 'menu_event.dart'; part 'menu_state.dart'; class MenuBloc extends Bloc with Trans { final WorkoutTreeRepository menuTreeRepository; final ExerciseRepository exerciseRepository = ExerciseRepository(); int parent; WorkoutMenuTree workoutItem; String infoTitle = ""; String infoText = ""; String infoText2 = ""; String infoText3 = ""; String infoLink = ""; int missingParent = 0; String missingTreeName = ""; BuildContext context; MenuBloc({this.menuTreeRepository}) : super(MenuInitial()) { parent = 0; } void setMenuInfo() { double percent = Cache().getPercentExercises(); if ( percent == -1 ) { exerciseRepository.getBaseExerciseFinishedPercent(); percent = Cache().getPercentExercises(); } if ( context == null ) return; percent = percent * 100; print("Percent " + percent.toString()); if ( percent == -1 || percent == 0) { infoTitle = t("Greetings!"); infoText = t("The purpose is to measure you physical condition") + " " + t("The suggested order of the exercises: chest - biceps - triceps - back - shoulders - core - tigh - calf."); infoText2 = t("I suggest begin your tests with a"); infoText3 = t("Go to the menu Strength - One Rep Max - Chest, and select your favourite exercise."); infoLink = t("Bring me there"); } else if ( percent > 0 && percent < 20) { infoTitle = t("Nice! This is a good start"); } else if ( percent > 20 && percent < 40) { infoTitle = t("Go on!") + " " + t("You are on track"); } else if ( percent > 60 && percent < 80) { infoTitle = t("Persistence!") + " " + t("Not so much left"); } else if ( percent > 80 && percent < 100) { infoTitle = t("Almost!") + " " + t("You have only 1-2 exercise left to finish!"); } menuTreeRepository.sortByMuscleType(); missingTreeName = exerciseRepository.nextMissingBaseExercise(menuTreeRepository.sortedTree); print("Missing " + missingTreeName); if ( percent > 0) { infoText = t("Please continue your tests with a") + " '" + missingTreeName + "' " + t("exercise!"); infoLink = t("Bring me there"); } } void setContext(BuildContext context) { this.context = context; } @override Stream mapEventToState( MenuEvent event, ) async* { try { if ( event is MenuCreate ) { yield MenuLoading(); await menuTreeRepository.createTree(); setMenuInfo(); yield MenuReady(); } else if (event is MenuRecreateTree) { // ie. at language changes await menuTreeRepository.createTree(); yield MenuReady(); } else if (event is MenuTreeDown) { // get child menus or exercises yield MenuLoading(); parent = event.parent; workoutItem = event.item; //print("menuitem " + workoutItem.id.toString() + " parent "+workoutItem.parent.toString()); menuTreeRepository.getBranch(event.parent); yield MenuReady(); } else if (event is MenuTreeUp) { yield MenuLoading(); // get parent menus or exercises parent = event.parent; workoutItem = menuTreeRepository.getParentItem(parent); if ( workoutItem != null) { //print("UP menuitem " + workoutItem.id.toString() + " parent " + workoutItem.parent.toString()); menuTreeRepository.getBranch(workoutItem.parent); } yield MenuReady(); } else if (event is MenuTreeJump) { yield MenuLoading(); parent = event.parent; workoutItem = menuTreeRepository.getParentItem(parent); if ( workoutItem != null) { //print("JUMP menuitem " + workoutItem.id.toString() + " parent " + workoutItem.parent.toString()); menuTreeRepository.getBranch(workoutItem.parent); } yield MenuReady(); } else if (event is MenuClickExercise) { yield MenuLoading(); // get exercise page yield MenuReady(); } } on Exception catch(ex) { yield MenuError(message: ex.toString()); } } }