Initial commit
This commit is contained in:
32
lib/presentation/home/home_controller.dart
Normal file
32
lib/presentation/home/home_controller.dart
Normal file
@@ -0,0 +1,32 @@
|
||||
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());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user