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);