import 'package:aitrainer_app/model/cache.dart'; import 'package:aitrainer_app/model/exercise.dart'; import 'package:aitrainer_app/model/exercise_type.dart'; import 'package:aitrainer_app/model/training_result.dart'; import 'package:aitrainer_app/repository/exercise_repository.dart'; import 'package:aitrainer_app/util/app_language.dart'; import 'package:aitrainer_app/util/enums.dart'; import 'package:aitrainer_app/util/track.dart'; import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter/material.dart'; import 'package:syncfusion_flutter_calendar/calendar.dart'; part 'training_log_event.dart'; part 'training_log_state.dart'; class TrainingLogBloc extends Bloc { final ExerciseRepository exerciseRepository = ExerciseRepository(); TrainingLogBloc() : super(TrainingLogInitial()) { on(_onLoad); on(_onDelete); on(_onResult); } @override Future close() { return super.close(); } void _onLoad(TrainingLogLoad event, Emitter emit) async { await Cache().setActivityDonePrefs(ActivityDone.isExerciseLogSeen); Track().track(TrackingEvent.exercise_log_open); emit(TrainingLogReady()); } void _onDelete(TrainingLogDelete event, Emitter emit) async { exerciseRepository.exerciseList!.remove(event.exercise); await exerciseRepository.deleteExercise(event.exercise); Track().track(TrackingEvent.exercise_log_delete); emit(TrainingLogReady()); } void _onResult(TrainingResultEvent event, Emitter emit) async { Track().track(TrackingEvent.exercise_log_result); emit(TrainingLogReady()); } List getTrainingResults() { exerciseRepository.getExerciseList(); exerciseRepository.sortByDate(); final List trainings = []; if (exerciseRepository.exerciseLogList == null) { return trainings; } bool isEnglish = AppLanguage().appLocal == Locale('en'); exerciseRepository.exerciseLogList!.forEach((exercise) { final ExerciseType? exerciseType = exerciseRepository.getExerciseTypeById(exercise.exerciseTypeId!); final String exerciseName = isEnglish ? exerciseType!.name : exerciseType!.nameTranslation; final DateTime start = DateTime( exercise.dateAdd!.year, exercise.dateAdd!.month, exercise.dateAdd!.day, exercise.dateAdd!.hour, exercise.dateAdd!.minute, 0); final DateTime end = exercise.trainingPlanDetailsId == null ? DateTime(exercise.dateAdd!.year, exercise.dateAdd!.month, exercise.dateAdd!.day, exercise.dateAdd!.hour, exercise.dateAdd!.minute + 2, 0) : DateTime(exercise.dateAdd!.year, exercise.dateAdd!.month, exercise.dateAdd!.day, exercise.dateAdd!.hour + 2, exercise.dateAdd!.minute, 0); Color color = exercise.trainingPlanDetailsId == null ? Colors.blue : Colors.orange; trainings.add(TrainingResult( exercise: exercise, eventName: exerciseName, from: start, to: end, background: color, isAllDay: false, isTest: exercise.trainingPlanDetailsId == null ? true : false, summary: exercise.summary, )); }); return trainings; } } class TrainingDataSource extends CalendarDataSource { TrainingDataSource(List source) { appointments = source; } @override DateTime getStartTime(int index) { return appointments![index].from; } @override DateTime getEndTime(int index) { return appointments![index].to; } @override String getSubject(int index) { return appointments![index].eventName; } @override Color getColor(int index) { return appointments![index].background; } @override bool isAllDay(int index) { return appointments![index].isAllDay; } }