import 'package:aitrainer_app/model/exercise.dart'; import 'package:aitrainer_app/util/enums.dart'; import 'package:intl/intl.dart'; import 'dart:async'; import 'package:aitrainer_app/bloc/development_diagram/development_diagram_bloc.dart'; import 'package:aitrainer_app/repository/exercise_repository.dart'; import 'package:aitrainer_app/repository/workout_tree_repository.dart'; import 'package:aitrainer_app/util/app_language.dart'; import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter/material.dart'; part 'body_development_event.dart'; part 'body_development_state.dart'; enum DiagramDateFilterGroup { l3m, fm_lm, l3t, yearly } class BodyDevelopmentBloc extends Bloc { final WorkoutTreeRepository workoutTreeRepository; final ExerciseRepository exerciseRepository = ExerciseRepository(); List legendsL3t = ['2 trainigs ago', '1 training ago', 'last training']; List legendsFmlm = ['First month', '1 month ago', 'last month']; List legendsL3m = ['2 months ago', '1 month ago', 'last month']; List legends = []; List radarTicks = []; List radarFeatures = []; List> radarData = []; DiagramGroup group = DiagramGroup.sumMass; DiagramDateFilterGroup filter = DiagramDateFilterGroup.l3t; @override BodyDevelopmentBloc({required this.workoutTreeRepository}) : super(BodyDevelopmentInitial()) { getData(); on(_onDateFilterChange); on(_onGroupChange); } List defaultGraphColors = [ Colors.green, Colors.blue, Colors.red, Colors.orange, ]; void getExerciseData() { workoutTreeRepository.sortedTree.clear(); workoutTreeRepository.sortByMuscleType(); int index = 0; this.workoutTreeRepository.sortedTree.forEach((name, list) { print("name: $name"); list.forEach((element) { exerciseRepository.exerciseList = exerciseRepository.getExercisesByExerciseTypeId(element.exerciseTypeId); exerciseRepository.sortByDate(); }); index++; }); } Future getData() async { this.getExerciseData(); radarTicks = [20, 40, 60, 80, 100, 120, 140, 160]; radarData = [ [80, 95, 45, 67, 83, 40, 56, 78], [82, 90, 56, 77, 82, 40, 50, 87], [26, 112, 58, 70, 130, 49, 52, 127], ]; switch (this.filter) { case DiagramDateFilterGroup.l3t: legends = legendsL3t; break; case DiagramDateFilterGroup.l3m: legends = legendsL3m; break; case DiagramDateFilterGroup.fm_lm: legends = legendsFmlm; break; case DiagramDateFilterGroup.yearly: var date = DateTime.now(); legends = [ DateFormat(DateFormat.YEAR, AppLanguage().appLocal.toString()).format(date.subtract(Duration(days: 365 * 2))), DateFormat(DateFormat.YEAR, AppLanguage().appLocal.toString()).format(date.subtract(Duration(days: 365))), DateFormat(DateFormat.YEAR, AppLanguage().appLocal.toString()).format(date) ]; break; default: legends = legendsL3t; } } void _onDateFilterChange(BodyDevelopmentChangeDate event, Emitter emit) { emit(BodyDevelopmentLoading()); this.filter = event.filter; getData(); emit(BodyDevelopmentReady()); } void _onGroupChange(BodyDevelopmentChangeGroup event, Emitter emit) { emit(BodyDevelopmentLoading()); this.group = event.group; getData(); emit(BodyDevelopmentReady()); } }