feat(statistiques): implémentation frontend statistiques de progression (ticket #82)
Lots F1+F2 : écran progression_screen.dart, intégration home/history/navigation, tests associés (193 tests suite complète, 4 échecs préexistants sans rapport confirmés). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -16,6 +16,7 @@ final class HistoryListScreen extends StatefulWidget {
|
||||
this.mediaUseCases,
|
||||
this.stepUseCases,
|
||||
this.performanceReferenceUseCase,
|
||||
this.onOpenProgression,
|
||||
super.key,
|
||||
});
|
||||
|
||||
@ -26,6 +27,7 @@ final class HistoryListScreen extends StatefulWidget {
|
||||
final ExercisePerformanceReferenceUseCase? performanceReferenceUseCase;
|
||||
final CloseWorkoutSessionUseCase closeUseCase;
|
||||
final MediaUseCases? mediaUseCases;
|
||||
final VoidCallback? onOpenProgression;
|
||||
|
||||
@override
|
||||
State<HistoryListScreen> createState() => _HistoryListScreenState();
|
||||
@ -43,7 +45,16 @@ final class _HistoryListScreenState extends State<HistoryListScreen> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(title: const Text('Historique')),
|
||||
appBar: AppBar(
|
||||
title: const Text('Historique'),
|
||||
actions: [
|
||||
if (widget.onOpenProgression != null)
|
||||
TextButton(
|
||||
onPressed: widget.onOpenProgression,
|
||||
child: const Text('Progression'),
|
||||
),
|
||||
],
|
||||
),
|
||||
body: FutureBuilder<List<WorkoutHistory>>(
|
||||
future: _histories,
|
||||
builder: (context, snapshot) {
|
||||
|
||||
@ -5,6 +5,7 @@ import '../domain/domain.dart';
|
||||
import 'exercise_library_screen.dart';
|
||||
import 'history_screen.dart';
|
||||
import 'profile_screen.dart';
|
||||
import 'progression_screen.dart';
|
||||
import 'program_screen.dart';
|
||||
import 'theme.dart';
|
||||
import 'workout_execution_screen.dart';
|
||||
@ -185,10 +186,20 @@ final class _HomeScreenState extends State<HomeScreen> with RouteAware {
|
||||
widget.bootstrap.exercisePerformanceReferenceUseCase,
|
||||
closeUseCase: widget.bootstrap.closeWorkoutSessionUseCase,
|
||||
mediaUseCases: widget.bootstrap.mediaUseCases,
|
||||
onOpenProgression: () => _openProgression(context),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
ListTile(
|
||||
leading: const Icon(Icons.show_chart),
|
||||
title: const Text('Progression'),
|
||||
subtitle: const Text(
|
||||
'Volume, régularité et évolution par exercice',
|
||||
),
|
||||
trailing: const Icon(Icons.chevron_right),
|
||||
onTap: () => _openProgression(context),
|
||||
),
|
||||
ListTile(
|
||||
leading: FutureBuilder<UserAccountSession?>(
|
||||
future: widget.bootstrap.authUseCases.currentSession(),
|
||||
@ -225,6 +236,24 @@ final class _HomeScreenState extends State<HomeScreen> with RouteAware {
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> _openProgression(BuildContext context) {
|
||||
return Navigator.of(context).push(
|
||||
MaterialPageRoute(
|
||||
builder: (context) => ProgressionScreen(
|
||||
progressionStatsUseCase: widget.bootstrap.progressionStatsUseCase,
|
||||
historyUseCases: widget.bootstrap.workoutHistoryUseCases,
|
||||
workoutTemplateUseCases: widget.bootstrap.workoutTemplateUseCases,
|
||||
activeUseCases: widget.bootstrap.activeWorkoutSessionUseCases,
|
||||
stepUseCases: widget.bootstrap.activeExerciseStepUseCases,
|
||||
performanceReferenceUseCase:
|
||||
widget.bootstrap.exercisePerformanceReferenceUseCase,
|
||||
closeUseCase: widget.bootstrap.closeWorkoutSessionUseCase,
|
||||
mediaUseCases: widget.bootstrap.mediaUseCases,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> _resume(ActiveWorkoutSession session) async {
|
||||
await Navigator.of(context).push(
|
||||
MaterialPageRoute(
|
||||
|
||||
@ -5,6 +5,7 @@ export 'exercise_library_screen.dart';
|
||||
export 'history_screen.dart';
|
||||
export 'home_screen.dart';
|
||||
export 'profile_screen.dart';
|
||||
export 'progression_screen.dart';
|
||||
export 'program_screen.dart';
|
||||
export 'share_inbox_screen.dart';
|
||||
export 'share_screen.dart';
|
||||
|
||||
1055
lib/presentation/progression_screen.dart
Normal file
1055
lib/presentation/progression_screen.dart
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user