feat(ui): écran Exécution de séance

Ajoute l'écran d'exécution de séance (presentation/workout_execution_screen.dart),
avec les ajustements application/domaine/repositories nécessaires et la
navigation depuis l'accueil et l'écran séance-modèle. flutter analyze
propre, 15/15 tests verts, build APK debug validé.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-17 19:08:23 +02:00
parent 6bc09fe1ca
commit bfd727a6a2
9 changed files with 1159 additions and 8 deletions

View File

@ -4,16 +4,21 @@ import 'package:flutter/material.dart';
import '../application/application.dart';
import '../domain/domain.dart';
import 'workout_execution_screen.dart';
final class WorkoutTemplateListScreen extends StatefulWidget {
const WorkoutTemplateListScreen({
required this.workoutTemplateUseCases,
required this.programUseCases,
required this.activeUseCases,
required this.closeUseCase,
super.key,
});
final WorkoutTemplateUseCases workoutTemplateUseCases;
final ProgramUseCases programUseCases;
final ActiveWorkoutSessionUseCases activeUseCases;
final CloseWorkoutSessionUseCase closeUseCase;
@override
State<WorkoutTemplateListScreen> createState() =>
@ -65,7 +70,10 @@ final class _WorkoutTemplateListScreenState
trailing: Wrap(
spacing: 8,
children: [
TextButton(onPressed: () {}, child: const Text('Lancer')),
TextButton(
onPressed: () => _start(template),
child: const Text('Lancer'),
),
const Icon(Icons.chevron_right),
],
),
@ -99,6 +107,22 @@ final class _WorkoutTemplateListScreenState
_reload();
}
}
Future<void> _start(WorkoutTemplate template) async {
final session = await widget.activeUseCases.startFromTemplate(
template.metadata.id,
);
if (!mounted) return;
await Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => WorkoutExecutionScreen(
initialSession: session,
activeUseCases: widget.activeUseCases,
closeUseCase: widget.closeUseCase,
),
),
);
}
}
final class WorkoutTemplateFormScreen extends StatefulWidget {