WT 1.1.25+1 training log
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
part of 'training_log_bloc.dart';
|
||||
|
||||
abstract class TrainingLogEvent extends Equatable {
|
||||
const TrainingLogEvent();
|
||||
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
class TrainingLogLoad extends TrainingLogEvent {
|
||||
const TrainingLogLoad();
|
||||
}
|
||||
|
||||
class TrainingLogDelete extends TrainingLogEvent {
|
||||
final Exercise exercise;
|
||||
const TrainingLogDelete({required this.exercise});
|
||||
|
||||
@override
|
||||
List<Object> get props => [exercise];
|
||||
}
|
||||
|
||||
class TrainingResultEvent extends TrainingLogEvent {
|
||||
final Exercise exercise;
|
||||
const TrainingResultEvent({required this.exercise});
|
||||
|
||||
@override
|
||||
List<Object> get props => [exercise];
|
||||
}
|
||||
|
||||
class TrainingLogChange extends TrainingLogEvent {
|
||||
const TrainingLogChange();
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
part of 'training_log_bloc.dart';
|
||||
|
||||
abstract class TrainingLogState extends Equatable {
|
||||
const TrainingLogState();
|
||||
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
class TrainingLogInitial extends TrainingLogState {
|
||||
const TrainingLogInitial();
|
||||
}
|
||||
|
||||
class TrainingLogLoading extends TrainingLogState {
|
||||
const TrainingLogLoading();
|
||||
}
|
||||
|
||||
class TrainingLogReady extends TrainingLogState {
|
||||
const TrainingLogReady();
|
||||
}
|
||||
|
||||
class TrainingLogError extends TrainingLogState {
|
||||
final String message;
|
||||
const TrainingLogError({required this.message});
|
||||
|
||||
@override
|
||||
List<Object> get props => [message];
|
||||
}
|
||||
Reference in New Issue
Block a user