Files
trainhub-flutter/lib/presentation/trainings/trainings_controller.dart
Kazimierz Ciołek f943e89430 Some refactors
2026-02-19 14:16:03 +01:00

65 lines
1.8 KiB
Dart

import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:trainhub_flutter/injection.dart';
import 'package:trainhub_flutter/domain/entities/exercise.dart';
import 'package:trainhub_flutter/domain/entities/training_plan.dart';
import 'package:trainhub_flutter/domain/repositories/exercise_repository.dart';
import 'package:trainhub_flutter/domain/repositories/training_plan_repository.dart';
import 'package:trainhub_flutter/presentation/trainings/trainings_state.dart';
part 'trainings_controller.g.dart';
@riverpod
class TrainingsController extends _$TrainingsController {
late TrainingPlanRepository _planRepo;
late ExerciseRepository _exerciseRepo;
@override
Future<TrainingsState> build() async {
_planRepo = getIt<TrainingPlanRepository>();
_exerciseRepo = getIt<ExerciseRepository>();
final plans = await _planRepo.getAll();
final exercises = await _exerciseRepo.getAll();
return TrainingsState(plans: plans, exercises: exercises);
}
Future<TrainingPlanEntity> createPlan(String name) async {
final plan = await _planRepo.create(name);
await _reload();
return plan;
}
Future<void> deletePlan(String id) async {
await _planRepo.delete(id);
await _reload();
}
Future<void> addExercise({
required String name,
String? instructions,
String? tags,
String? videoUrl,
}) async {
await _exerciseRepo.create(
name: name,
instructions: instructions,
tags: tags,
videoUrl: videoUrl,
);
await _reload();
}
Future<void> updateExercise(ExerciseEntity exercise) async {
await _exerciseRepo.update(exercise);
await _reload();
}
Future<void> deleteExercise(String id) async {
await _exerciseRepo.delete(id);
await _reload();
}
Future<void> _reload() async {
state = await AsyncValue.guard(() => build());
}
}