fix(ui): bandeau de reprise de séance en cours (ticket #32)

Ajoute/corrige le bandeau de reprise sur home_screen.dart, avec les
ajustements de bootstrap applicatif nécessaires, et sa couverture de
tests. flutter analyze propre, 45/45 tests verts, build APK debug
validé. Ticket laissé en QA : validation manuelle sur APK par
l'utilisateur avant clôture.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-18 09:52:40 +02:00
parent 40a543d450
commit 212418e062
4 changed files with 470 additions and 5 deletions

View File

@ -9,6 +9,8 @@ import 'theme.dart';
import 'workout_execution_screen.dart';
import 'workout_template_screen.dart';
final homeRouteObserver = RouteObserver<ModalRoute<void>>();
final class HomeScreen extends StatefulWidget {
const HomeScreen({
required this.bootstrap,
@ -17,7 +19,7 @@ final class HomeScreen extends StatefulWidget {
super.key,
});
final AppBootstrap bootstrap;
final AppDependencies bootstrap;
final ThemeMode themeMode;
final ValueChanged<ThemeMode>? onThemeModeChanged;
@ -25,13 +27,40 @@ final class HomeScreen extends StatefulWidget {
State<HomeScreen> createState() => _HomeScreenState();
}
final class _HomeScreenState extends State<HomeScreen> {
final class _HomeScreenState extends State<HomeScreen> with RouteAware {
late Future<ActiveWorkoutSession?> _openSession;
ModalRoute<void>? _route;
@override
void initState() {
super.initState();
_openSession = widget.bootstrap.activeWorkoutSessionUseCases.findOpen();
_openSession = _findOpenSession();
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
final route = ModalRoute.of<void>(context);
if (route == null || identical(route, _route)) {
return;
}
final previousRoute = _route;
if (previousRoute != null) {
homeRouteObserver.unsubscribe(this);
}
_route = route;
homeRouteObserver.subscribe(this, route);
}
@override
void dispose() {
homeRouteObserver.unsubscribe(this);
super.dispose();
}
@override
void didPopNext() {
_reloadOpenSession();
}
@override
@ -163,8 +192,16 @@ final class _HomeScreenState extends State<HomeScreen> {
),
);
if (!mounted) return;
_reloadOpenSession();
}
Future<ActiveWorkoutSession?> _findOpenSession() {
return widget.bootstrap.activeWorkoutSessionUseCases.findOpen();
}
void _reloadOpenSession() {
setState(() {
_openSession = widget.bootstrap.activeWorkoutSessionUseCases.findOpen();
_openSession = _findOpenSession();
});
}
}