33 lines
1.2 KiB
Dart
33 lines
1.2 KiB
Dart
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
|
import 'package:trainhub_flutter/injection.dart';
|
|
import 'package:trainhub_flutter/domain/repositories/program_repository.dart';
|
|
import 'package:trainhub_flutter/presentation/home/home_state.dart';
|
|
|
|
part 'home_controller.g.dart';
|
|
|
|
@riverpod
|
|
class HomeController extends _$HomeController {
|
|
@override
|
|
Future<HomeState> build() async {
|
|
final ProgramRepository programRepo = getIt<ProgramRepository>();
|
|
final programs = await programRepo.getAllPrograms();
|
|
if (programs.isEmpty) return const HomeState();
|
|
final activeProgram = programs.first;
|
|
final workouts = await programRepo.getWorkouts(activeProgram.id);
|
|
final completed = workouts.where((w) => w.completed).toList();
|
|
final next = workouts.where((w) => !w.completed).firstOrNull;
|
|
return HomeState(
|
|
activeProgramName: activeProgram.name,
|
|
completedWorkouts: completed.length,
|
|
totalWorkouts: workouts.length,
|
|
nextWorkoutName: next?.name,
|
|
recentActivity: completed.reversed.take(5).toList(),
|
|
);
|
|
}
|
|
|
|
Future<void> refresh() async {
|
|
state = const AsyncValue.loading();
|
|
state = await AsyncValue.guard(() => build());
|
|
}
|
|
}
|