workouttest_app/lib/bloc/training_log/training_log_bloc.dart
2021-11-21 15:11:03 +01:00

113 lines
3.9 KiB
Dart

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<TrainingLogEvent, TrainingLogState> {
final ExerciseRepository exerciseRepository = ExerciseRepository();
TrainingLogBloc() : super(TrainingLogInitial()) {
on<TrainingLogLoad>(_onLoad);
on<TrainingLogDelete>(_onDelete);
on<TrainingResultEvent>(_onResult);
}
@override
Future<void> close() {
return super.close();
}
void _onLoad(TrainingLogLoad event, Emitter<TrainingLogState> emit) async {
await Cache().setActivityDonePrefs(ActivityDone.isExerciseLogSeen);
Track().track(TrackingEvent.exercise_log_open);
emit(TrainingLogReady());
}
void _onDelete(TrainingLogDelete event, Emitter<TrainingLogState> 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<TrainingLogState> emit) async {
Track().track(TrackingEvent.exercise_log_result);
emit(TrainingLogReady());
}
List<TrainingResult> getTrainingResults() {
exerciseRepository.getExerciseList();
exerciseRepository.sortByDate();
final List<TrainingResult> trainings = <TrainingResult>[];
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<TrainingResult> 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;
}
}