workouttest_app/lib/bloc/body_development/body_development_bloc.dart
Tibor Bossanyi (Freelancer) e59e225582 WT 1.1.26+4 radar chart 1
2022-04-16 21:55:59 +02:00

108 lines
3.6 KiB
Dart

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<BodyDevelopmentEvent, BodyDevelopmentState> {
final WorkoutTreeRepository workoutTreeRepository;
final ExerciseRepository exerciseRepository = ExerciseRepository();
List<String> legendsL3t = ['2 trainigs ago', '1 training ago', 'last training'];
List<String> legendsFmlm = ['First month', '1 month ago', 'last month'];
List<String> legendsL3m = ['2 months ago', '1 month ago', 'last month'];
List<String> legends = [];
List<int> radarTicks = [];
List<String> radarFeatures = [];
List<List<int>> radarData = [];
DiagramGroup group = DiagramGroup.sumMass;
DiagramDateFilterGroup filter = DiagramDateFilterGroup.l3t;
@override
BodyDevelopmentBloc({required this.workoutTreeRepository}) : super(BodyDevelopmentInitial()) {
getData();
on<BodyDevelopmentChangeDate>(_onDateFilterChange);
on<BodyDevelopmentChangeGroup>(_onGroupChange);
}
List<MaterialColor> 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<void> 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<BodyDevelopmentState> emit) {
emit(BodyDevelopmentLoading());
this.filter = event.filter;
getData();
emit(BodyDevelopmentReady());
}
void _onGroupChange(BodyDevelopmentChangeGroup event, Emitter<BodyDevelopmentState> emit) {
emit(BodyDevelopmentLoading());
this.group = event.group;
getData();
emit(BodyDevelopmentReady());
}
}