From 68e8721cdb02c5f8622504b18e57e1cb6eb934c0 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Sun, 7 Sep 2025 15:32:19 +0200 Subject: [PATCH] Refresh routine data on load when starting the gym mode This prevents errors when the user created or deleted a workout session for the current routine over the web interface See #876 --- lib/widgets/routines/forms/session.dart | 10 ++++++++++ lib/widgets/routines/gym_mode/gym_mode.dart | 8 ++++++++ 2 files changed, 18 insertions(+) diff --git a/lib/widgets/routines/forms/session.dart b/lib/widgets/routines/forms/session.dart index 4bb6d6cd..c48c8621 100644 --- a/lib/widgets/routines/forms/session.dart +++ b/lib/widgets/routines/forms/session.dart @@ -18,6 +18,7 @@ import 'package:clock/clock.dart'; import 'package:flutter/material.dart'; +import 'package:logging/logging.dart'; import 'package:provider/provider.dart'; import 'package:wger/exceptions/http_exception.dart'; import 'package:wger/helpers/consts.dart'; @@ -28,6 +29,7 @@ import 'package:wger/models/workouts/session.dart'; import 'package:wger/providers/routines.dart'; class SessionForm extends StatefulWidget { + final _logger = Logger('SessionForm'); final WorkoutSession _session; final int _routineId; final Function()? _onSaved; @@ -215,11 +217,18 @@ class _SessionFormState extends State { } _form.currentState!.save(); + // Reset any previous error message + setState(() { + errorMessage = const SizedBox.shrink(); + }); + // Save the entry on the server try { if (widget._session.id == null) { + widget._logger.fine('Adding new session'); await routinesProvider.addSession(widget._session, widget._routineId); } else { + widget._logger.fine('Editing existing session with id ${widget._session.id}'); await routinesProvider.editSession(widget._session); } @@ -231,6 +240,7 @@ class _SessionFormState extends State { widget._onSaved!(); } } on WgerHttpException catch (error) { + widget._logger.warning('Could not save session: $error'); if (context.mounted) { setState(() { errorMessage = FormHttpErrorsWidget(error); diff --git a/lib/widgets/routines/gym_mode/gym_mode.dart b/lib/widgets/routines/gym_mode/gym_mode.dart index 3a82895f..ca53e163 100644 --- a/lib/widgets/routines/gym_mode/gym_mode.dart +++ b/lib/widgets/routines/gym_mode/gym_mode.dart @@ -72,6 +72,14 @@ class _GymModeState extends ConsumerState { } Future _loadGymState() async { + // Re-fetch the current routine data to ensure we have the latest session + // data since it is possible that the user created or deleted it from the + // web interface. + await context + .read() + .fetchAndSetRoutineFull(widget._dayDataGym.day!.routineId); + widget._logger.fine('Refreshed routine data'); + final validUntil = ref.read(gymStateProvider).validUntil; final currentPage = ref.read(gymStateProvider).currentPage; final savedDayId = ref.read(gymStateProvider).dayId;