mirror of
https://github.com/wger-project/flutter.git
synced 2026-02-18 00:17:48 +01:00
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:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user