Skip to content

Commit 8acde9a

Browse files
committed
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.
1 parent 8294d66 commit 8acde9a

File tree

3 files changed

+21
-11
lines changed

3 files changed

+21
-11
lines changed

lib/providers/gym_state.dart

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import 'package:flutter/material.dart';
12
import 'package:flutter_riverpod/flutter_riverpod.dart';
23
import 'package:logging/logging.dart';
34
import 'package:wger/models/exercises/exercise.dart';
@@ -14,15 +15,18 @@ class GymState {
1415
final bool showExercisePages;
1516
final int currentPage;
1617
final int? dayId;
18+
late TimeOfDay startTime;
1719
late DateTime validUntil;
1820

1921
GymState(
2022
{this.exercisePages = const {},
2123
this.showExercisePages = true,
2224
this.currentPage = 0,
2325
this.dayId,
24-
DateTime? validUntil}) {
26+
DateTime? validUntil,
27+
TimeOfDay? startTime}) {
2528
this.validUntil = validUntil ?? DateTime.now().add(DEFAULT_DURATION);
29+
this.startTime = startTime ?? TimeOfDay.now();
2630
}
2731

2832
GymState copyWith({
@@ -31,13 +35,15 @@ class GymState {
3135
int? currentPage,
3236
int? dayId,
3337
DateTime? validUntil,
38+
TimeOfDay? startTime,
3439
}) {
3540
return GymState(
3641
exercisePages: exercisePages ?? this.exercisePages,
3742
showExercisePages: showExercisePages ?? this.showExercisePages,
3843
currentPage: currentPage ?? this.currentPage,
3944
dayId: dayId ?? this.dayId,
4045
validUntil: validUntil ?? this.validUntil.add(DEFAULT_DURATION),
46+
startTime: startTime ?? this.startTime,
4147
);
4248
}
4349

@@ -49,6 +55,7 @@ class GymState {
4955
'exercisePages: ${exercisePages.length} exercises, '
5056
'dayId: $dayId, '
5157
'validUntil: $validUntil '
58+
'startTime: $startTime, '
5259
')';
5360
}
5461
}
@@ -86,6 +93,7 @@ class GymStateNotifier extends StateNotifier<GymState> {
8693
currentPage: 0,
8794
dayId: null,
8895
validUntil: DateTime.now().add(DEFAULT_DURATION),
96+
startTime: TimeOfDay.now(),
8997
);
9098
}
9199
}

lib/widgets/routines/gym_mode/gym_mode.dart

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,9 @@ class GymMode extends ConsumerStatefulWidget {
3636
final DayData _dayDataGym;
3737
final DayData _dayDataDisplay;
3838
final int _iteration;
39-
late final TimeOfDay _start;
4039
final _logger = Logger('GymMode');
4140

42-
GymMode(this._dayDataGym, this._dayDataDisplay, this._iteration) {
43-
_start = TimeOfDay.now();
44-
}
41+
GymMode(this._dayDataGym, this._dayDataDisplay, this._iteration);
4542

4643
@override
4744
ConsumerState<GymMode> createState() => _GymModeState();
@@ -118,8 +115,8 @@ class _GymModeState extends ConsumerState<GymMode> {
118115

119116
List<Widget> getContent() {
120117
final state = ref.watch(gymStateProvider);
121-
final exerciseProvider = provider.Provider.of<ExercisesProvider>(context, listen: false);
122-
final workoutProvider = provider.Provider.of<RoutinesProvider>(context, listen: false);
118+
final exerciseProvider = context.read<ExercisesProvider>();
119+
final routinesProvider = context.read<RoutinesProvider>();
123120
var currentElement = 1;
124121
final List<Widget> out = [];
125122

@@ -144,7 +141,7 @@ class _GymModeState extends ConsumerState<GymMode> {
144141
config,
145142
slotData,
146143
exercise,
147-
workoutProvider.findById(widget._dayDataGym.day!.routineId),
144+
routinesProvider.findById(widget._dayDataGym.day!.routineId),
148145
ratioCompleted,
149146
state.exercisePages,
150147
widget._iteration,
@@ -192,10 +189,9 @@ class _GymModeState extends ConsumerState<GymMode> {
192189
StartPage(_controller, widget._dayDataDisplay, _exercisePages),
193190
...getContent(),
194191
SessionPage(
195-
provider.Provider.of<RoutinesProvider>(context, listen: false)
196-
.findById(widget._dayDataGym.day!.routineId),
192+
context.read<RoutinesProvider>().findById(widget._dayDataGym.day!.routineId),
197193
_controller,
198-
widget._start,
194+
ref.read(gymStateProvider).startTime,
199195
_exercisePages,
200196
),
201197
];

test/workout/gym_mode_screen_test.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import 'package:flutter_test/flutter_test.dart';
2222
import 'package:mockito/annotations.dart';
2323
import 'package:mockito/mockito.dart';
2424
import 'package:provider/provider.dart';
25+
import 'package:wger/helpers/json.dart';
2526
import 'package:wger/l10n/generated/app_localizations.dart';
2627
import 'package:wger/providers/base_provider.dart';
2728
import 'package:wger/providers/exercises.dart';
@@ -263,6 +264,11 @@ void main() {
263264
expect(find.byIcon(Icons.sentiment_very_dissatisfied), findsOneWidget);
264265
expect(find.byIcon(Icons.sentiment_neutral), findsOneWidget);
265266
expect(find.byIcon(Icons.sentiment_very_satisfied), findsOneWidget);
267+
expect(
268+
find.text(timeToString(TimeOfDay.now())!),
269+
findsNWidgets(2),
270+
reason: 'start and end time are the same',
271+
);
266272
expect(find.byIcon(Icons.chevron_left), findsOneWidget);
267273
expect(find.byIcon(Icons.close), findsOneWidget);
268274
expect(find.byIcon(Icons.chevron_right), findsNothing);

0 commit comments

Comments
 (0)