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
This commit is contained in:
Roland Geider
2025-09-07 15:32:19 +02:00
parent 48d314f2a0
commit 68e8721cdb
2 changed files with 18 additions and 0 deletions

View File

@@ -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<SessionForm> {
}
_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<SessionForm> {
widget._onSaved!();
}
} on WgerHttpException catch (error) {
widget._logger.warning('Could not save session: $error');
if (context.mounted) {
setState(() {
errorMessage = FormHttpErrorsWidget(error);

View File

@@ -72,6 +72,14 @@ class _GymModeState extends ConsumerState<GymMode> {
}
Future<int> _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<RoutinesProvider>()
.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;