WT 1.1.25+2 training log search
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
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_plan.dart';
|
||||
import 'package:aitrainer_app/model/training_result.dart';
|
||||
import 'package:aitrainer_app/repository/exercise_repository.dart';
|
||||
import 'package:aitrainer_app/repository/training_plan_repository.dart';
|
||||
import 'package:aitrainer_app/util/app_language.dart';
|
||||
import 'package:aitrainer_app/util/enums.dart';
|
||||
import 'package:aitrainer_app/util/track.dart';
|
||||
@@ -20,27 +22,48 @@ class TrainingLogBloc extends Bloc<TrainingLogEvent, TrainingLogState> {
|
||||
on<TrainingLogLoad>(_onLoad);
|
||||
on<TrainingLogDelete>(_onDelete);
|
||||
on<TrainingResultEvent>(_onResult);
|
||||
on<TrainingLogSearch>(_onSearch);
|
||||
}
|
||||
|
||||
final List<TrainingResult> _results = [];
|
||||
get results => this._results;
|
||||
|
||||
bool search = false;
|
||||
int exerciseTypeIdSearched = 0;
|
||||
|
||||
@override
|
||||
Future<void> close() {
|
||||
return super.close();
|
||||
}
|
||||
|
||||
void _onLoad(TrainingLogLoad event, Emitter<TrainingLogState> emit) async {
|
||||
emit(TrainingLogLoading());
|
||||
await Cache().setActivityDonePrefs(ActivityDone.isExerciseLogSeen);
|
||||
_results.clear();
|
||||
_results.addAll(getTrainingResults());
|
||||
Track().track(TrackingEvent.exercise_log_open);
|
||||
emit(TrainingLogReady());
|
||||
}
|
||||
|
||||
void _onDelete(TrainingLogDelete event, Emitter<TrainingLogState> emit) async {
|
||||
emit(TrainingLogLoading());
|
||||
exerciseRepository.exerciseList!.remove(event.exercise);
|
||||
await exerciseRepository.deleteExercise(event.exercise);
|
||||
Track().track(TrackingEvent.exercise_log_delete);
|
||||
emit(TrainingLogReady());
|
||||
}
|
||||
|
||||
void _onSearch(TrainingLogSearch event, Emitter<TrainingLogState> emit) async {
|
||||
emit(TrainingLogLoading());
|
||||
exerciseTypeIdSearched = event.exerciseTypeId;
|
||||
search = true;
|
||||
_results.clear();
|
||||
_results.addAll(getTrainingResults());
|
||||
emit(TrainingLogReady());
|
||||
}
|
||||
|
||||
void _onResult(TrainingResultEvent event, Emitter<TrainingLogState> emit) async {
|
||||
emit(TrainingLogLoading());
|
||||
Track().track(TrackingEvent.exercise_log_result);
|
||||
emit(TrainingLogReady());
|
||||
}
|
||||
@@ -48,23 +71,57 @@ class TrainingLogBloc extends Bloc<TrainingLogEvent, TrainingLogState> {
|
||||
List<TrainingResult> getTrainingResults() {
|
||||
exerciseRepository.getExerciseList();
|
||||
exerciseRepository.sortByDate();
|
||||
final TrainingPlanRepository trainingPlanRepository = TrainingPlanRepository();
|
||||
|
||||
final List<TrainingResult> trainings = <TrainingResult>[];
|
||||
if (exerciseRepository.exerciseLogList == null) {
|
||||
return trainings;
|
||||
}
|
||||
bool isEnglish = AppLanguage().appLocal == Locale('en');
|
||||
int trainingPlanOrigId = 0;
|
||||
exerciseRepository.exerciseLogList!.sort((a, b) {
|
||||
return a.dateAdd!.compareTo(b.dateAdd!) > 0 ? 1 : -1;
|
||||
});
|
||||
exerciseRepository.exerciseLogList!.forEach((exercise) {
|
||||
final ExerciseType? exerciseType = exerciseRepository.getExerciseTypeById(exercise.exerciseTypeId!);
|
||||
final String exerciseName = isEnglish ? exerciseType!.name : exerciseType!.nameTranslation;
|
||||
final trainingPlanId = exercise.trainingPlanDetailsId;
|
||||
final DateTime startTraining = DateTime(
|
||||
exercise.dateAdd!.year, exercise.dateAdd!.month, exercise.dateAdd!.day, exercise.dateAdd!.hour, exercise.dateAdd!.minute - 5, 0);
|
||||
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);
|
||||
: DateTime(exercise.dateAdd!.year, exercise.dateAdd!.month, exercise.dateAdd!.day, exercise.dateAdd!.hour,
|
||||
exercise.dateAdd!.minute + 10, 0);
|
||||
if (trainingPlanId != null && trainingPlanId != trainingPlanOrigId) {
|
||||
trainingPlanOrigId = trainingPlanId;
|
||||
TrainingPlan? plan = trainingPlanRepository.getTrainingPlanById(trainingPlanId);
|
||||
final String? trainingName = plan != null
|
||||
? isEnglish
|
||||
? plan.name
|
||||
: plan.nameTranslations[AppLanguage().appLocal.toString()]
|
||||
: "Training";
|
||||
trainings.add(TrainingResult(
|
||||
exercise: null,
|
||||
eventName: trainingName != null ? trainingName : "",
|
||||
from: startTraining,
|
||||
to: DateTime(exercise.dateAdd!.year, exercise.dateAdd!.month, exercise.dateAdd!.day, exercise.dateAdd!.hour + 2,
|
||||
exercise.dateAdd!.minute, 0),
|
||||
background: Colors.orange[800]!,
|
||||
isAllDay: false,
|
||||
isTest: false,
|
||||
isExercise: false,
|
||||
summary: null,
|
||||
));
|
||||
}
|
||||
final ExerciseType? exerciseType = exerciseRepository.getExerciseTypeById(exercise.exerciseTypeId!);
|
||||
final String exerciseName = isEnglish ? exerciseType!.name : exerciseType!.nameTranslation;
|
||||
|
||||
Color color = exercise.trainingPlanDetailsId == null ? Colors.blue : Colors.orange;
|
||||
if (exerciseTypeIdSearched == exercise.exerciseTypeId) {
|
||||
color = Colors.redAccent;
|
||||
}
|
||||
|
||||
trainings.add(TrainingResult(
|
||||
exercise: exercise,
|
||||
eventName: exerciseName,
|
||||
@@ -73,9 +130,13 @@ class TrainingLogBloc extends Bloc<TrainingLogEvent, TrainingLogState> {
|
||||
background: color,
|
||||
isAllDay: false,
|
||||
isTest: exercise.trainingPlanDetailsId == null ? true : false,
|
||||
isExercise: true,
|
||||
summary: exercise.summary,
|
||||
));
|
||||
});
|
||||
trainings.sort((a, b) {
|
||||
return a.from.compareTo(b.from) > 0 ? -1 : 1;
|
||||
});
|
||||
return trainings;
|
||||
}
|
||||
}
|
||||
@@ -102,6 +163,7 @@ class TrainingDataSource extends CalendarDataSource {
|
||||
|
||||
@override
|
||||
Color getColor(int index) {
|
||||
//print("Color ${appointments![index].eventName} - ${appointments![index].background}");
|
||||
return appointments![index].background;
|
||||
}
|
||||
|
||||
|
||||
@@ -27,6 +27,14 @@ class TrainingResultEvent extends TrainingLogEvent {
|
||||
List<Object> get props => [exercise];
|
||||
}
|
||||
|
||||
class TrainingLogSearch extends TrainingLogEvent {
|
||||
final int exerciseTypeId;
|
||||
const TrainingLogSearch({required this.exerciseTypeId});
|
||||
|
||||
@override
|
||||
List<Object> get props => [exerciseTypeId];
|
||||
}
|
||||
|
||||
class TrainingLogChange extends TrainingLogEvent {
|
||||
const TrainingLogChange();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user