Add startTime to GymState and update GymMode to use it

This keeps the start time, even if the user leaves the gym mode and returns
later, which is what we want anyway.
This commit is contained in:
Roland Geider
2025-04-17 16:34:42 +02:00
parent 8294d66b32
commit 8acde9adaa
3 changed files with 21 additions and 11 deletions

View File

@@ -1,3 +1,4 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:logging/logging.dart';
import 'package:wger/models/exercises/exercise.dart';
@@ -14,6 +15,7 @@ class GymState {
final bool showExercisePages;
final int currentPage;
final int? dayId;
late TimeOfDay startTime;
late DateTime validUntil;
GymState(
@@ -21,8 +23,10 @@ class GymState {
this.showExercisePages = true,
this.currentPage = 0,
this.dayId,
DateTime? validUntil}) {
DateTime? validUntil,
TimeOfDay? startTime}) {
this.validUntil = validUntil ?? DateTime.now().add(DEFAULT_DURATION);
this.startTime = startTime ?? TimeOfDay.now();
}
GymState copyWith({
@@ -31,6 +35,7 @@ class GymState {
int? currentPage,
int? dayId,
DateTime? validUntil,
TimeOfDay? startTime,
}) {
return GymState(
exercisePages: exercisePages ?? this.exercisePages,
@@ -38,6 +43,7 @@ class GymState {
currentPage: currentPage ?? this.currentPage,
dayId: dayId ?? this.dayId,
validUntil: validUntil ?? this.validUntil.add(DEFAULT_DURATION),
startTime: startTime ?? this.startTime,
);
}
@@ -49,6 +55,7 @@ class GymState {
'exercisePages: ${exercisePages.length} exercises, '
'dayId: $dayId, '
'validUntil: $validUntil '
'startTime: $startTime, '
')';
}
}
@@ -86,6 +93,7 @@ class GymStateNotifier extends StateNotifier<GymState> {
currentPage: 0,
dayId: null,
validUntil: DateTime.now().add(DEFAULT_DURATION),
startTime: TimeOfDay.now(),
);
}
}

View File

@@ -36,12 +36,9 @@ class GymMode extends ConsumerStatefulWidget {
final DayData _dayDataGym;
final DayData _dayDataDisplay;
final int _iteration;
late final TimeOfDay _start;
final _logger = Logger('GymMode');
GymMode(this._dayDataGym, this._dayDataDisplay, this._iteration) {
_start = TimeOfDay.now();
}
GymMode(this._dayDataGym, this._dayDataDisplay, this._iteration);
@override
ConsumerState<GymMode> createState() => _GymModeState();
@@ -118,8 +115,8 @@ class _GymModeState extends ConsumerState<GymMode> {
List<Widget> getContent() {
final state = ref.watch(gymStateProvider);
final exerciseProvider = provider.Provider.of<ExercisesProvider>(context, listen: false);
final workoutProvider = provider.Provider.of<RoutinesProvider>(context, listen: false);
final exerciseProvider = context.read<ExercisesProvider>();
final routinesProvider = context.read<RoutinesProvider>();
var currentElement = 1;
final List<Widget> out = [];
@@ -144,7 +141,7 @@ class _GymModeState extends ConsumerState<GymMode> {
config,
slotData,
exercise,
workoutProvider.findById(widget._dayDataGym.day!.routineId),
routinesProvider.findById(widget._dayDataGym.day!.routineId),
ratioCompleted,
state.exercisePages,
widget._iteration,
@@ -192,10 +189,9 @@ class _GymModeState extends ConsumerState<GymMode> {
StartPage(_controller, widget._dayDataDisplay, _exercisePages),
...getContent(),
SessionPage(
provider.Provider.of<RoutinesProvider>(context, listen: false)
.findById(widget._dayDataGym.day!.routineId),
context.read<RoutinesProvider>().findById(widget._dayDataGym.day!.routineId),
_controller,
widget._start,
ref.read(gymStateProvider).startTime,
_exercisePages,
),
];