From 8acde9adaac047d98e01a7818cb8dcda9fa506fc Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Thu, 17 Apr 2025 16:34:42 +0200 Subject: [PATCH] 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. --- lib/providers/gym_state.dart | 10 +++++++++- lib/widgets/routines/gym_mode/gym_mode.dart | 16 ++++++---------- test/workout/gym_mode_screen_test.dart | 6 ++++++ 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/lib/providers/gym_state.dart b/lib/providers/gym_state.dart index 53b0788e..e18935ed 100644 --- a/lib/providers/gym_state.dart +++ b/lib/providers/gym_state.dart @@ -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 { currentPage: 0, dayId: null, validUntil: DateTime.now().add(DEFAULT_DURATION), + startTime: TimeOfDay.now(), ); } } diff --git a/lib/widgets/routines/gym_mode/gym_mode.dart b/lib/widgets/routines/gym_mode/gym_mode.dart index 4c61a8e7..baf1ba2d 100644 --- a/lib/widgets/routines/gym_mode/gym_mode.dart +++ b/lib/widgets/routines/gym_mode/gym_mode.dart @@ -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 createState() => _GymModeState(); @@ -118,8 +115,8 @@ class _GymModeState extends ConsumerState { List getContent() { final state = ref.watch(gymStateProvider); - final exerciseProvider = provider.Provider.of(context, listen: false); - final workoutProvider = provider.Provider.of(context, listen: false); + final exerciseProvider = context.read(); + final routinesProvider = context.read(); var currentElement = 1; final List out = []; @@ -144,7 +141,7 @@ class _GymModeState extends ConsumerState { 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 { StartPage(_controller, widget._dayDataDisplay, _exercisePages), ...getContent(), SessionPage( - provider.Provider.of(context, listen: false) - .findById(widget._dayDataGym.day!.routineId), + context.read().findById(widget._dayDataGym.day!.routineId), _controller, - widget._start, + ref.read(gymStateProvider).startTime, _exercisePages, ), ]; diff --git a/test/workout/gym_mode_screen_test.dart b/test/workout/gym_mode_screen_test.dart index 6c420890..6668b9a0 100644 --- a/test/workout/gym_mode_screen_test.dart +++ b/test/workout/gym_mode_screen_test.dart @@ -22,6 +22,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:provider/provider.dart'; +import 'package:wger/helpers/json.dart'; import 'package:wger/l10n/generated/app_localizations.dart'; import 'package:wger/providers/base_provider.dart'; import 'package:wger/providers/exercises.dart'; @@ -263,6 +264,11 @@ void main() { expect(find.byIcon(Icons.sentiment_very_dissatisfied), findsOneWidget); expect(find.byIcon(Icons.sentiment_neutral), findsOneWidget); expect(find.byIcon(Icons.sentiment_very_satisfied), findsOneWidget); + expect( + find.text(timeToString(TimeOfDay.now())!), + findsNWidgets(2), + reason: 'start and end time are the same', + ); expect(find.byIcon(Icons.chevron_left), findsOneWidget); expect(find.byIcon(Icons.close), findsOneWidget); expect(find.byIcon(Icons.chevron_right), findsNothing);