diff --git a/lib/main.dart b/lib/main.dart index 26147932..b8bfb1d7 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -28,11 +28,9 @@ import 'package:wger/helpers/shared_preferences.dart'; import 'package:wger/l10n/generated/app_localizations.dart'; import 'package:wger/providers/add_exercise.dart'; import 'package:wger/providers/base_provider.dart'; -import 'package:wger/providers/exercise_state_notifier.dart'; import 'package:wger/providers/gallery.dart'; import 'package:wger/providers/measurement.dart'; import 'package:wger/providers/nutrition.dart'; -import 'package:wger/providers/routines.dart'; import 'package:wger/providers/user.dart'; import 'package:wger/providers/wger_base_riverpod.dart'; import 'package:wger/screens/add_exercise_screen.dart'; @@ -65,8 +63,6 @@ import 'package:wger/widgets/core/log_overview.dart'; import 'package:wger/widgets/core/settings.dart'; import 'helpers/logs.dart'; -import 'models/workouts/repetition_unit.dart'; -import 'models/workouts/weight_unit.dart'; import 'providers/auth.dart'; void _setupLogging() { @@ -140,7 +136,8 @@ class MainApp extends StatelessWidget { Widget _getHomeScreen(AuthProvider auth) { switch (auth.state) { case AuthState.loggedIn: - return HomeTabsScreen(); + return const EagerInitialization(); + // return HomeTabsScreen(); case AuthState.updateRequired: return const UpdateAppScreen(); default: @@ -159,18 +156,6 @@ class MainApp extends StatelessWidget { return MultiProvider( providers: [ ChangeNotifierProvider(create: (ctx) => AuthProvider()), - ChangeNotifierProxyProvider( - create: (context) => RoutinesProvider( - WgerBaseProvider(Provider.of(context, listen: false)), - exercises: [], - ), - update: (context, auth, previous) => - previous ?? - RoutinesProvider( - WgerBaseProvider(auth), - exercises: [], - ), - ), ChangeNotifierProxyProvider( create: (context) => NutritionPlansProvider( WgerBaseProvider(Provider.of(context, listen: false)), @@ -218,21 +203,6 @@ class MainApp extends StatelessWidget { ], child: riverpod.Consumer( builder: (rpCtx, ref, _) { - final exerciseState = ref.watch(exerciseStateProvider); - final exercises = exerciseState.exercises; - - final repetitionUnitsAsync = ref.watch(routineRepetitionUnitProvider); - final repetitionUnits = repetitionUnitsAsync.value ?? []; - - final weightUnitsAsync = ref.watch(routineWeightUnitProvider); - final weightUnits = weightUnitsAsync.value ?? []; - - WidgetsBinding.instance.addPostFrameCallback((_) { - Provider.of(ctx, listen: false).exercises = exercises; - Provider.of(ctx, listen: false).repetitionUnits = - repetitionUnits; - Provider.of(ctx, listen: false).weightUnits = weightUnits; - }); return MaterialApp( title: 'wger', navigatorKey: navigatorKey, diff --git a/lib/models/workouts/log.dart b/lib/models/workouts/log.dart index fd853612..2adb315f 100644 --- a/lib/models/workouts/log.dart +++ b/lib/models/workouts/log.dart @@ -108,7 +108,7 @@ class Log { Log.empty(); - Log.fromSetConfigData(SetConfigData data) { + Log.fromSetConfigData(SetConfigData data, {int? routineId, this.iteration}) { date = DateTime.now(); sessionId = null; slotEntryId = data.slotEntryId; @@ -124,6 +124,10 @@ class Log { rir = data.rir; rirTarget = data.rir; + + if (routineId != null) { + this.routineId = routineId; + } } WorkoutLogTableCompanion toCompanion({bool includeId = false}) { @@ -208,9 +212,6 @@ class Log { int get hashCode => Object.hash(exerciseId, weight, weightUnitId, repetitions, repetitionsUnitId, rir); - //@override - //int get hashCode => super.hashCode; - @override String toString() { return 'Log(id: $id, ex: $exerciseId, weightU: $weightUnitId, w: $weight, repU: $repetitionsUnitId, rep: $repetitions, rir: $rir)'; diff --git a/lib/models/workouts/routine.dart b/lib/models/workouts/routine.dart index bd90d6bb..31d5335f 100644 --- a/lib/models/workouts/routine.dart +++ b/lib/models/workouts/routine.dart @@ -22,7 +22,7 @@ import 'package:wger/helpers/json.dart'; import 'package:wger/models/workouts/day.dart'; import 'package:wger/models/workouts/day_data.dart'; import 'package:wger/models/workouts/log.dart'; -import 'package:wger/models/workouts/session_api.dart'; +import 'package:wger/models/workouts/session.dart'; part 'routine.g.dart'; @@ -70,7 +70,7 @@ class Routine { List dayDataGym = []; @JsonKey(required: false, includeToJson: false, defaultValue: []) - List sessions = []; + List sessions = []; Routine({ this.id, diff --git a/lib/models/workouts/routine.g.dart b/lib/models/workouts/routine.g.dart index 49152d29..7ee886f5 100644 --- a/lib/models/workouts/routine.g.dart +++ b/lib/models/workouts/routine.g.dart @@ -34,7 +34,7 @@ Routine _$RoutineFromJson(Map json) { const [], sessions: (json['sessions'] as List?) - ?.map((e) => WorkoutSessionApi.fromJson(e as Map)) + ?.map((e) => WorkoutSession.fromJson(e as Map)) .toList() ?? [], ); diff --git a/lib/models/workouts/session.dart b/lib/models/workouts/session.dart index c54fb870..35e72917 100644 --- a/lib/models/workouts/session.dart +++ b/lib/models/workouts/session.dart @@ -21,6 +21,7 @@ import 'package:flutter/material.dart'; import 'package:json_annotation/json_annotation.dart'; import 'package:wger/database/powersync/database.dart'; import 'package:wger/helpers/json.dart'; +import 'package:wger/models/exercises/exercise.dart'; import 'package:wger/models/workouts/log.dart'; part 'session.g.dart'; @@ -45,7 +46,7 @@ class WorkoutSession { late int impression; @JsonKey(required: false, defaultValue: '') - late String notes; + late String? notes; @JsonKey(required: true, name: 'time_start', toJson: timeToString, fromJson: stringToTimeNull) late TimeOfDay? timeStart; @@ -83,6 +84,14 @@ class WorkoutSession { ); } + List get exercises { + final Set exerciseSet = {}; + for (final log in logs) { + exerciseSet.add(log.exercise); + } + return exerciseSet.toList(); + } + // Boilerplate factory WorkoutSession.fromJson(Map json) => _$WorkoutSessionFromJson(json); diff --git a/lib/models/workouts/session_api.dart b/lib/models/workouts/session_api.dart deleted file mode 100644 index ca0e2bd3..00000000 --- a/lib/models/workouts/session_api.dart +++ /dev/null @@ -1,52 +0,0 @@ -/* - * This file is part of wger Workout Manager . - * Copyright (C) 2020, 2021 wger Team - * - * wger Workout Manager is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import 'package:json_annotation/json_annotation.dart'; -import 'package:wger/models/exercises/exercise.dart'; -import 'package:wger/models/workouts/log.dart'; -import 'package:wger/models/workouts/session.dart'; - -part 'session_api.g.dart'; - -@JsonSerializable() -class WorkoutSessionApi { - @JsonKey(required: true, name: 'session') - late WorkoutSession session; - - @JsonKey(required: false, includeToJson: false, defaultValue: []) - List logs = []; - - WorkoutSessionApi({required this.session, this.logs = const []}); - - /// Returns all different exercises in the session - /// - /// This is used to display the exercises in the session - List get exercises { - final Set exerciseSet = {}; - for (final log in logs) { - exerciseSet.add(log.exercise); - } - return exerciseSet.toList(); - } - - // Boilerplate - factory WorkoutSessionApi.fromJson(Map json) => - _$WorkoutSessionApiFromJson(json); - - Map toJson() => _$WorkoutSessionApiToJson(this); -} diff --git a/lib/models/workouts/session_api.g.dart b/lib/models/workouts/session_api.g.dart deleted file mode 100644 index 1e75cdcd..00000000 --- a/lib/models/workouts/session_api.g.dart +++ /dev/null @@ -1,23 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'session_api.dart'; - -// ************************************************************************** -// JsonSerializableGenerator -// ************************************************************************** - -WorkoutSessionApi _$WorkoutSessionApiFromJson(Map json) { - $checkKeys(json, requiredKeys: const ['session']); - return WorkoutSessionApi( - session: WorkoutSession.fromJson(json['session'] as Map), - logs: - (json['logs'] as List?) - ?.map((e) => Log.fromJson(e as Map)) - .toList() ?? - [], - ); -} - -Map _$WorkoutSessionApiToJson(WorkoutSessionApi instance) => { - 'session': instance.session, -}; diff --git a/lib/providers/exercise_state_notifier.dart b/lib/providers/exercise_state_notifier.dart index f277f575..ecc7c132 100644 --- a/lib/providers/exercise_state_notifier.dart +++ b/lib/providers/exercise_state_notifier.dart @@ -69,7 +69,8 @@ final class ExerciseStateNotifier extends _$ExerciseStateNotifier { final equipment = equipmentAsync.asData!.value; final categories = categoriesAsync.asData!.value; _logger.finer( - 'All data loaded: ${exercises.length} exercises, ' + 'All data loaded: ' + '${exercises.length} exercises, ' '${equipment.length} equipment, ' '${categories.length} categories', ); diff --git a/lib/providers/exercise_state_notifier.g.dart b/lib/providers/exercise_state_notifier.g.dart index ba1516ed..4abeb903 100644 --- a/lib/providers/exercise_state_notifier.g.dart +++ b/lib/providers/exercise_state_notifier.g.dart @@ -74,7 +74,7 @@ final class ExerciseStateNotifierProvider } } -String _$exerciseStateNotifierHash() => r'95653998a71d77da4e390260738a95767bb1aae1'; +String _$exerciseStateNotifierHash() => r'12f372c78ec4f950da9a081fd4b3a6ef6a0d2ab8'; abstract class _$ExerciseStateNotifier extends $Notifier { ExerciseState build(); diff --git a/lib/providers/routines.dart b/lib/providers/routines.dart index 6d4b777c..0c20b57a 100644 --- a/lib/providers/routines.dart +++ b/lib/providers/routines.dart @@ -16,6 +16,8 @@ * along with this program. If not, see . */ +import 'dart:async'; + import 'package:flutter/foundation.dart'; import 'package:logging/logging.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; @@ -29,11 +31,13 @@ import 'package:wger/models/workouts/day_data.dart'; import 'package:wger/models/workouts/repetition_unit.dart'; import 'package:wger/models/workouts/routine.dart'; import 'package:wger/models/workouts/session.dart'; -import 'package:wger/models/workouts/session_api.dart'; import 'package:wger/models/workouts/slot.dart'; import 'package:wger/models/workouts/slot_entry.dart'; import 'package:wger/models/workouts/weight_unit.dart'; import 'package:wger/providers/base_provider.dart'; +import 'package:wger/providers/exercise_data.dart'; +import 'package:wger/providers/wger_base_riverpod.dart'; +import 'package:wger/providers/workout_session.dart'; part 'routines.g.dart'; @@ -49,6 +53,49 @@ Stream> routineRepetitionUnit(Ref ref) { return db.select(db.routineRepetitionUnitTable).watch(); } +@riverpod +RoutinesProvider routinesChangeNotifier(Ref ref) { + final logger = Logger('RoutinesChangeProvider'); + logger.fine('Creating routinesChangeNotifier notifier'); + + final base = ref.read(wgerBaseProvider); + final provider = RoutinesProvider(base); + + ref.listen>>(routineWeightUnitProvider, (_, next) { + final data = next.asData?.value; + if (data != null) { + logger.finer('Setting ${data.length} weight units'); + provider.weightUnits = data; + } + }); + + ref.listen>>(routineRepetitionUnitProvider, (_, next) { + final data = next.asData?.value; + if (data != null) { + logger.finer('Setting ${data.length} repetition units'); + provider.repetitionUnits = data; + } + }); + + ref.listen>>(exercisesProvider, (_, next) { + final data = next.asData?.value; + if (data != null) { + logger.finer('Setting ${data.length} exercises'); + provider.exercises = data; + } + }); + + ref.listen>>(workoutSessionProvider, (_, next) { + final data = next.asData?.value; + if (data != null) { + logger.finer('Setting ${data.length} sessions'); + provider.sessions = data; + } + }); + + return provider; +} + class RoutinesProvider with ChangeNotifier { final _logger = Logger('RoutinesProvider'); @@ -77,6 +124,7 @@ class RoutinesProvider with ChangeNotifier { final WgerBaseProvider baseProvider; List _routines = []; List _exercises = []; + List _sessions = []; List _weightUnits = []; List _repetitionUnits = []; @@ -86,14 +134,20 @@ class RoutinesProvider with ChangeNotifier { List? weightUnits, List? repetitionUnits, List? exercises, + List? sessions, }) { _routines = entries ?? []; _weightUnits = weightUnits ?? []; _repetitionUnits = repetitionUnits ?? []; _exercises = exercises ?? []; + _sessions = sessions ?? []; } Exercise _getExerciseById(int id) { + // if (ref != null) { + // final exercises = ref!.read(exercisesProvider); + // return exercises.firstWhere((element) => element.id == id); + // } return _exercises.firstWhere((element) => element.id == id); } @@ -107,7 +161,7 @@ class RoutinesProvider with ChangeNotifier { notifyListeners(); } - RepetitionUnit getRepetitionUnitById(int? id) => + RepetitionUnit _getRepetitionUnitById(int? id) => _repetitionUnits.firstWhere((element) => element.id == id); set weightUnits(List units) { @@ -119,7 +173,19 @@ class RoutinesProvider with ChangeNotifier { return [..._weightUnits]; } - WeightUnit getWeightUnitById(int? id) => _weightUnits.firstWhere((element) => element.id == id); + WeightUnit _getWeightUnitById(int? id) => _weightUnits.firstWhere((element) => element.id == id); + + set sessions(List sessions) { + _logger.finer('Setting ${sessions.length} sessions'); + _sessions = sessions; + } + + List get sessions { + return [..._sessions]; + } + + List getSessionsForRoutine(int id) => + _sessions.where((s) => s.routineId == id).toList(); /// Returns the current active nutritional plan. At the moment this is just /// the latest, but this might change in the future. @@ -207,22 +273,14 @@ class RoutinesProvider with ChangeNotifier { notifyListeners(); } - Future setExercisesAndUnits(List entries, {Map? exercises}) async { - exercises ??= {}; - + Future setExercisesAndUnits(List entries) async { for (final entry in entries) { for (final slot in entry.slots) { for (final setConfig in slot.setConfigs) { final exerciseId = setConfig.exerciseId; - if (!exercises.containsKey(exerciseId)) { - _logger.fine('Fetching exercise $exerciseId for routine set config'); - exercises[exerciseId] = _getExerciseById(exerciseId); - } - setConfig.exercise = exercises[exerciseId]!; - - setConfig.repetitionsUnit = getRepetitionUnitById(setConfig.repetitionsUnitId); - - setConfig.weightUnit = getWeightUnitById(setConfig.weightUnitId); + setConfig.exercise = _getExerciseById(exerciseId); + setConfig.repetitionsUnit = _getRepetitionUnitById(setConfig.repetitionsUnitId); + setConfig.weightUnit = _getWeightUnitById(setConfig.weightUnitId); } } } @@ -267,55 +325,47 @@ class RoutinesProvider with ChangeNotifier { objectMethod: _routinesDateSequenceGymSubpath, ), ), - baseProvider.fetch( - baseProvider.makeUrl( - _routinesUrlPath, - id: routineId, - objectMethod: _routinesLogsSubpath, - ), - ), + // baseProvider.fetch( + // baseProvider.makeUrl( + // _routinesUrlPath, + // id: routineId, + // objectMethod: _routinesLogsSubpath, + // ), + // ), ]); final routine = Routine.fromJson(results[0] as Map); final dayData = results[1] as List; final dayDataGym = results[2] as List; - final sessionData = results[3] as List; + // final sessionData = results[3] as List; /* * Set exercise, repetition and weight unit objects * * note that setExercisesAndUnits modifies the list in-place */ - - /// Temporary cache to avoid fetching the same exercise multiple times - final Map exercises = {}; - final dayDataEntriesDisplay = dayData.map((entry) => DayData.fromJson(entry)).toList(); - await setExercisesAndUnits(dayDataEntriesDisplay, exercises: exercises); + await setExercisesAndUnits(dayDataEntriesDisplay); final dayDataEntriesGym = dayDataGym.map((entry) => DayData.fromJson(entry)).toList(); - await setExercisesAndUnits(dayDataEntriesGym, exercises: exercises); + await setExercisesAndUnits(dayDataEntriesGym); - final sessionDataEntries = sessionData - .map((entry) => WorkoutSessionApi.fromJson(entry)) - .toList(); + // final sessionDataEntries = sessionData + // .map((entry) => WorkoutSessionApi.fromJson(entry)) + // .toList(); for (final day in routine.days) { for (final slot in day.slots) { for (final slotEntry in slot.entries) { final exerciseId = slotEntry.exerciseId; - if (!exercises.containsKey(exerciseId)) { - print(exerciseId); - exercises[exerciseId] = _getExerciseById(exerciseId); - } - slotEntry.exerciseObj = exercises[exerciseId]!; + slotEntry.exerciseObj = _getExerciseById(exerciseId); if (slotEntry.repetitionUnitId != null) { - slotEntry.repetitionUnitObj = getRepetitionUnitById(slotEntry.repetitionUnitId); + slotEntry.repetitionUnitObj = _getRepetitionUnitById(slotEntry.repetitionUnitId); } if (slotEntry.weightUnitId != null) { - slotEntry.weightUnitObj = getWeightUnitById(slotEntry.weightUnitId); + slotEntry.weightUnitObj = _getWeightUnitById(slotEntry.weightUnitId); } } } @@ -325,24 +375,7 @@ class RoutinesProvider with ChangeNotifier { routine.dayDataGym = dayDataEntriesGym; // Logs - routine.sessions = List.of(sessionDataEntries); - for (final session in routine.sessions) { - for (final log in session.logs) { - if (log.weightUnitId != null) { - log.weightUnit = getWeightUnitById(log.weightUnitId); - } - - if (log.repetitionsUnitId != null) { - log.repetitionUnit = getRepetitionUnitById(log.repetitionsUnitId); - } - - if (!exercises.containsKey(log.exerciseId)) { - exercises[log.exerciseId] = _getExerciseById(log.exerciseId); - } - - log.exerciseBase = exercises[log.exerciseId]!; - } - } + routine.sessions = getSessionsForRoutine(routine.id!); // ... and done final routineIndex = _routines.indexWhere((r) => r.id == routineId); @@ -593,20 +626,20 @@ class RoutinesProvider with ChangeNotifier { return sessions; } - Future addSession(WorkoutSession session, int? routineId) async { - final data = await baseProvider.post( - session.toJson(), - baseProvider.makeUrl(_sessionUrlPath), - ); - final newSession = WorkoutSession.fromJson(data); - - if (routineId != null) { - final routine = findById(routineId); - routine.sessions.add(WorkoutSessionApi(session: newSession)); - } - + Future addSession(WorkoutSession session, int? routineId) async { + // final data = await baseProvider.post( + // session.toJson(), + // baseProvider.makeUrl(_sessionUrlPath), + // ); + // final newSession = WorkoutSession.fromJson(data); + // + // if (routineId != null) { + // final routine = findById(routineId); + // routine.sessions.add(WorkoutSessionApi(session: newSession)); + // } + // notifyListeners(); - return newSession; + // return newSession; } Future editSession(WorkoutSession session) async { diff --git a/lib/providers/routines.g.dart b/lib/providers/routines.g.dart index d8628e5a..cc0d2420 100644 --- a/lib/providers/routines.g.dart +++ b/lib/providers/routines.g.dart @@ -86,3 +86,44 @@ final class RoutineRepetitionUnitProvider } String _$routineRepetitionUnitHash() => r'7754a0197c3fed27feea2c6d33d5e5a5e1deab45'; + +@ProviderFor(routinesChangeNotifier) +const routinesChangeProvider = RoutinesChangeNotifierProvider._(); + +final class RoutinesChangeNotifierProvider + extends $FunctionalProvider + with $Provider { + const RoutinesChangeNotifierProvider._() + : super( + from: null, + argument: null, + retry: null, + name: r'routinesChangeProvider', + isAutoDispose: true, + dependencies: null, + $allTransitiveDependencies: null, + ); + + @override + String debugGetCreateSourceHash() => _$routinesChangeNotifierHash(); + + @$internal + @override + $ProviderElement $createElement($ProviderPointer pointer) => + $ProviderElement(pointer); + + @override + RoutinesProvider create(Ref ref) { + return routinesChangeNotifier(ref); + } + + /// {@macro riverpod.override_with_value} + Override overrideWithValue(RoutinesProvider value) { + return $ProviderOverride( + origin: this, + providerOverride: $SyncValueProvider(value), + ); + } +} + +String _$routinesChangeNotifierHash() => r'95f7de1ed7184387ffbe4f8ba6e697a311ea02e1'; diff --git a/lib/providers/workout_logs.dart b/lib/providers/workout_logs.dart index 14b07870..593a6596 100644 --- a/lib/providers/workout_logs.dart +++ b/lib/providers/workout_logs.dart @@ -26,19 +26,12 @@ part 'workout_logs.g.dart'; @riverpod final class WorkoutLogNotifier extends _$WorkoutLogNotifier { - final _log = Logger('WorkoutLogNotifier'); + final _logger = Logger('WorkoutLogNotifier'); late final WorkoutLogRepository _repo; @override Stream> build() { _repo = ref.read(workoutLogRepositoryProvider); - - // final state = BodyWeightState(); - // repo.watchAllDrift(database).listen((entries) { - // state.setItems(entries); - // }); - // return state; - return _repo.watchAllDrift(); } diff --git a/lib/providers/workout_logs.g.dart b/lib/providers/workout_logs.g.dart index 413e637c..96962e07 100644 --- a/lib/providers/workout_logs.g.dart +++ b/lib/providers/workout_logs.g.dart @@ -33,7 +33,7 @@ final class WorkoutLogNotifierProvider WorkoutLogNotifier create() => WorkoutLogNotifier(); } -String _$workoutLogNotifierHash() => r'8ec76c8d9c72c6bc482952763d048c5df110bd6e'; +String _$workoutLogNotifierHash() => r'532917be5ce98bf849b8a16b401d89e934483e67'; abstract class _$WorkoutLogNotifier extends $StreamNotifier> { Stream> build(); diff --git a/lib/providers/workout_session.dart b/lib/providers/workout_session.dart index ad66b6ae..d60b83f4 100644 --- a/lib/providers/workout_session.dart +++ b/lib/providers/workout_session.dart @@ -18,30 +18,34 @@ import 'package:logging/logging.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; -import 'package:wger/models/workouts/log.dart'; import 'package:wger/models/workouts/session.dart'; import 'package:wger/providers/workout_session_repository.dart'; part 'workout_session.g.dart'; +@riverpod +Future sessionStateReady(Ref ref) { + return Future.wait([ + ref.watch(workoutSessionProvider.future), + ]); +} + @riverpod final class WorkoutSessionNotifier extends _$WorkoutSessionNotifier { - final _log = Logger('WorkoutSessionNotifier'); + final _logger = Logger('WorkoutSessionNotifier'); late final WorkoutSessionRepository _repo; @override Stream> build() { _repo = ref.read(workoutSessionRepositoryProvider); - - // final state = BodyWeightState(); - // repo.watchAllDrift(database).listen((entries) { - // state.setItems(entries); - // }); - // return state; - return _repo.watchAllDrift(); } + Stream> getForRoutine(int routineId) { + _repo = ref.read(workoutSessionRepositoryProvider); + return _repo.watchRoutineDrift(routineId); + } + Future deleteEntry(String id) async { await _repo.deleteLocalDrift(id); } diff --git a/lib/providers/workout_session.g.dart b/lib/providers/workout_session.g.dart index 0e360bbc..0723adfc 100644 --- a/lib/providers/workout_session.g.dart +++ b/lib/providers/workout_session.g.dart @@ -9,6 +9,39 @@ part of 'workout_session.dart'; // GENERATED CODE - DO NOT MODIFY BY HAND // ignore_for_file: type=lint, type=warning +@ProviderFor(sessionStateReady) +const sessionStateReadyProvider = SessionStateReadyProvider._(); + +final class SessionStateReadyProvider + extends $FunctionalProvider, void, FutureOr> + with $FutureModifier, $FutureProvider { + const SessionStateReadyProvider._() + : super( + from: null, + argument: null, + retry: null, + name: r'sessionStateReadyProvider', + isAutoDispose: true, + dependencies: null, + $allTransitiveDependencies: null, + ); + + @override + String debugGetCreateSourceHash() => _$sessionStateReadyHash(); + + @$internal + @override + $FutureProviderElement $createElement($ProviderPointer pointer) => + $FutureProviderElement(pointer); + + @override + FutureOr create(Ref ref) { + return sessionStateReady(ref); + } +} + +String _$sessionStateReadyHash() => r'18a6a7239149a753760d90c35cfcb739aec8a631'; + @ProviderFor(WorkoutSessionNotifier) const workoutSessionProvider = WorkoutSessionNotifierProvider._(); @@ -33,7 +66,7 @@ final class WorkoutSessionNotifierProvider WorkoutSessionNotifier create() => WorkoutSessionNotifier(); } -String _$workoutSessionNotifierHash() => r'2d2a67179eb60855d6985af73429e39db4f80886'; +String _$workoutSessionNotifierHash() => r'4f908a32939049d7be63bc346bd88275ec38e014'; abstract class _$WorkoutSessionNotifier extends $StreamNotifier> { Stream> build(); diff --git a/lib/providers/workout_session_repository.dart b/lib/providers/workout_session_repository.dart index d84bb3b9..64a720f4 100644 --- a/lib/providers/workout_session_repository.dart +++ b/lib/providers/workout_session_repository.dart @@ -26,23 +26,36 @@ import 'package:logging/logging.dart'; import 'package:wger/models/workouts/session.dart'; import '../database/powersync/database.dart'; +import 'exercise_state_notifier.dart'; final workoutSessionRepositoryProvider = Provider((ref) { final db = ref.read(driftPowerSyncDatabase); - return WorkoutSessionRepository(db); + return WorkoutSessionRepository(db, ref); }); class WorkoutSessionRepository { final _logger = Logger('WorkoutSessionRepository'); final DriftPowersyncDatabase _db; + final Ref _ref; - WorkoutSessionRepository(this._db); + WorkoutSessionRepository(this._db, this._ref); Stream> watchAllDrift() { _logger.finer('Watching all local workout session entries'); final query = _db.select(_db.workoutSessionTable) - ..orderBy([(t) => OrderingTerm(expression: t.date, mode: OrderingMode.desc)]); + ..orderBy( + [(t) => OrderingTerm(expression: t.date, mode: OrderingMode.desc)], + ); + return query.watch(); + // final joined = _buildJoinedQuery(); + // return joined.watch().map((rows) => _mapRowsToSessions(rows)); + } + + Stream> watchRoutineDrift(int routineId) { + _logger.finer('Watching local workout session entries for routine $routineId'); + final joined = _buildJoinedQuery(routineId: routineId); + return joined.watch().map((rows) => _mapRowsToSessions(rows)); } Future deleteLocalDrift(String id) async { @@ -60,4 +73,56 @@ class WorkoutSessionRepository { _logger.finer('Adding local workout session entry ${session.date}'); await _db.into(_db.workoutSessionTable).insert(session.toCompanion()); } + + JoinedSelectStatement _buildJoinedQuery({int? routineId}) { + final base = _db.select(_db.workoutSessionTable) + ..orderBy([(t) => OrderingTerm(expression: t.date, mode: OrderingMode.desc)]); + + if (routineId != null) { + base.where((t) => t.routineId.equals(routineId)); + } + + return base.join([ + leftOuterJoin( + _db.workoutSessionTable, + _db.workoutLogTable.routineId.equalsExp(_db.workoutSessionTable.routineId), + ), + leftOuterJoin( + _db.routineRepetitionUnitTable, + _db.routineRepetitionUnitTable.id.equalsExp(_db.workoutLogTable.repetitionsUnitId), + ), + leftOuterJoin( + _db.routineWeightUnitTable, + _db.routineWeightUnitTable.id.equalsExp(_db.workoutLogTable.weightUnitId), + ), + ]); + } + + List _mapRowsToSessions(List rows) { + final exercisesHelper = _ref.read(exerciseStateProvider.notifier); + + final Map map = {}; + + for (final row in rows) { + final session = row.readTable(_db.workoutSessionTable); + final log = row.readTableOrNull(_db.workoutLogTable); + final repetitionUnit = row.readTableOrNull(_db.routineRepetitionUnitTable); + final weightUnit = row.readTableOrNull(_db.routineWeightUnitTable); + + final entry = map.putIfAbsent(session.id!, () => session); + + if (log != null) { + log.repetitionUnit = repetitionUnit; + log.weightUnit = weightUnit; + log.exerciseBase = exercisesHelper.getById(log.exerciseId); + + final exists = entry.logs.any((l) => l.id == log.id); + if (!exists) { + entry.logs.add(log); + } + } + } + + return map.values.toList(); + } } diff --git a/lib/screens/gym_mode.dart b/lib/screens/gym_mode.dart index 8e28b527..7d1551d1 100644 --- a/lib/screens/gym_mode.dart +++ b/lib/screens/gym_mode.dart @@ -17,7 +17,7 @@ */ import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:wger/providers/routines.dart'; import 'package:wger/widgets/routines/gym_mode/gym_mode.dart'; @@ -29,17 +29,17 @@ class GymModeArguments { const GymModeArguments(this.routineId, this.dayId, this.iteration); } -class GymModeScreen extends StatelessWidget { +class GymModeScreen extends ConsumerWidget { const GymModeScreen(); static const routeName = '/gym-mode'; @override - Widget build(BuildContext context) { + Widget build(BuildContext context, WidgetRef ref) { final args = ModalRoute.of(context)!.settings.arguments as GymModeArguments; - final routinesProvider = context.read(); - final routine = routinesProvider.findById(args.routineId); + final routineProvider = ref.read(routinesChangeProvider); + final routine = routineProvider.findById(args.routineId); final dayDataDisplay = routine.dayData.firstWhere( (e) => e.iteration == args.iteration && e.day?.id == args.dayId, ); @@ -51,9 +51,7 @@ class GymModeScreen extends StatelessWidget { // backgroundColor: Theme.of(context).cardColor, // primary: false, body: SafeArea( - child: Consumer( - builder: (context, value, child) => GymMode(dayDataGym, dayDataDisplay, args.iteration), - ), + child: GymMode(dayDataGym, dayDataDisplay, args.iteration), ), ); } diff --git a/lib/screens/home_tabs_screen.dart b/lib/screens/home_tabs_screen.dart index 79777a9c..23892d1c 100644 --- a/lib/screens/home_tabs_screen.dart +++ b/lib/screens/home_tabs_screen.dart @@ -31,12 +31,26 @@ import 'package:wger/providers/measurement.dart'; import 'package:wger/providers/nutrition.dart'; import 'package:wger/providers/routines.dart'; import 'package:wger/providers/user.dart'; +import 'package:wger/providers/workout_session.dart'; import 'package:wger/screens/dashboard.dart'; import 'package:wger/screens/gallery_screen.dart'; import 'package:wger/screens/nutritional_plans_screen.dart'; import 'package:wger/screens/routine_list_screen.dart'; import 'package:wger/screens/weight_screen.dart'; +class EagerInitialization extends riverpod.ConsumerWidget { + const EagerInitialization(); + + @override + Widget build(BuildContext context, riverpod.WidgetRef ref) { + // TODO: do we need all of these here? + ref.watch(exerciseStateProvider); + ref.watch(workoutSessionProvider); + ref.watch(routinesChangeProvider); + return HomeTabsScreen(); + } +} + class HomeTabsScreen extends riverpod.ConsumerStatefulWidget { final _logger = Logger('HomeTabsScreen'); @@ -76,14 +90,12 @@ class _HomeTabsScreenState extends riverpod.ConsumerState const GalleryScreen(), ]; - bool _exerciseListenerInitialized = false; - /// Load initial data from the server Future _loadEntries() async { final authProvider = context.read(); if (!authProvider.dataInit) { - final routinesProvider = context.read(); + final routinesProvider = ref.read(routinesChangeProvider); final nutritionPlansProvider = context.read(); final galleryProvider = context.read(); final measurementProvider = context.read(); @@ -97,7 +109,9 @@ class _HomeTabsScreenState extends riverpod.ConsumerState userProvider.fetchAndSetProfile(), nutritionPlansProvider.fetchIngredientsFromCache(), ]); + // await ref.read(routineWeightUnitProvider.future); await ref.read(exerciseStateReadyProvider.future); + await ref.read(sessionStateReadyProvider.future); ref.read(weightEntryProvider()); // @@ -110,8 +124,6 @@ class _HomeTabsScreenState extends riverpod.ConsumerState // routinesProvider.fetchAndSetAllRoutinesFull(), measurementProvider.fetchAndSetAllCategoriesAndEntries(), ]); - // fetch weights separately using Riverpod notifier - // await ref.read(bodyWeightStateProvider(authProvider).notifier).fetchAndSetEntries(); // // Current nutritional plan @@ -125,8 +137,9 @@ class _HomeTabsScreenState extends riverpod.ConsumerState // Current routine widget._logger.info('Loading current routine'); if (routinesProvider.currentRoutine != null) { - final planId = routinesProvider.currentRoutine!.id!; - await routinesProvider.fetchAndSetRoutineFull(planId); + final routineId = routinesProvider.currentRoutine!.id!; + widget._logger.finer('Current routine ID: $routineId'); + await routinesProvider.fetchAndSetRoutineFull(routinesProvider.currentRoutine!.id!); } } @@ -135,12 +148,6 @@ class _HomeTabsScreenState extends riverpod.ConsumerState @override Widget build(BuildContext context) { - // Note that listen needs to happen on the build method. We use - if (!_exerciseListenerInitialized) { - ref.listen(exerciseStateProvider, (_, _) {}); - _exerciseListenerInitialized = true; - } - return FutureBuilder( future: _initialData, builder: (context, snapshot) { diff --git a/lib/screens/routine_edit_screen.dart b/lib/screens/routine_edit_screen.dart index a858a509..8fdbde13 100644 --- a/lib/screens/routine_edit_screen.dart +++ b/lib/screens/routine_edit_screen.dart @@ -17,20 +17,20 @@ */ import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:wger/providers/routines.dart'; import 'package:wger/widgets/core/app_bar.dart'; import 'package:wger/widgets/routines/routine_edit.dart'; -class RoutineEditScreen extends StatelessWidget { +class RoutineEditScreen extends ConsumerWidget { const RoutineEditScreen(); static const routeName = '/routine-edit'; @override - Widget build(BuildContext context) { + Widget build(BuildContext context, WidgetRef ref) { final routineId = ModalRoute.of(context)!.settings.arguments as int; - final routine = Provider.of(context).findById(routineId); + final routine = ref.read(routinesChangeProvider).findById(routineId); return Scaffold( appBar: EmptyAppBar(routine.name), diff --git a/lib/screens/routine_list_screen.dart b/lib/screens/routine_list_screen.dart index 32f7aef6..f45cd0bb 100644 --- a/lib/screens/routine_list_screen.dart +++ b/lib/screens/routine_list_screen.dart @@ -18,11 +18,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart' as riverpod; -import 'package:provider/provider.dart'; import 'package:wger/l10n/generated/app_localizations.dart'; import 'package:wger/models/workouts/routine.dart'; import 'package:wger/providers/network_provider.dart'; -import 'package:wger/providers/routines.dart'; import 'package:wger/screens/form_screen.dart'; import 'package:wger/widgets/routines/app_bar.dart'; import 'package:wger/widgets/routines/forms/routine.dart'; @@ -56,9 +54,7 @@ class RoutineListScreen extends riverpod.ConsumerWidget { : null, child: const Icon(Icons.add, color: Colors.white), ), - body: Consumer( - builder: (context, workoutProvider, child) => RoutinesList(workoutProvider), - ), + body: const RoutinesList(), ); } } diff --git a/lib/screens/routine_logs_screen.dart b/lib/screens/routine_logs_screen.dart index ab97ebe4..377f61c5 100644 --- a/lib/screens/routine_logs_screen.dart +++ b/lib/screens/routine_logs_screen.dart @@ -17,20 +17,20 @@ */ import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:wger/providers/routines.dart'; import 'package:wger/widgets/core/app_bar.dart'; import 'package:wger/widgets/routines/workout_logs.dart'; -class WorkoutLogsScreen extends StatelessWidget { +class WorkoutLogsScreen extends ConsumerWidget { const WorkoutLogsScreen(); static const routeName = '/workout-logs'; @override - Widget build(BuildContext context) { + Widget build(BuildContext context, WidgetRef ref) { final routineId = ModalRoute.of(context)!.settings.arguments as int; - final routine = Provider.of(context).findById(routineId); + final routine = ref.read(routinesChangeProvider).findById(routineId); return Scaffold( appBar: EmptyAppBar(routine.name), diff --git a/lib/screens/routine_screen.dart b/lib/screens/routine_screen.dart index eb355c9e..c0d5f617 100644 --- a/lib/screens/routine_screen.dart +++ b/lib/screens/routine_screen.dart @@ -1,6 +1,6 @@ /* * This file is part of wger Workout Manager . - * Copyright (C) 2020, 2021 wger Team + * Copyright (C) 2020, 2025 wger Team * * wger Workout Manager is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by @@ -17,29 +17,27 @@ */ import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:wger/providers/routines.dart'; import 'package:wger/widgets/routines/app_bar.dart'; import 'package:wger/widgets/routines/routine_detail.dart'; -class RoutineScreen extends StatelessWidget { +class RoutineScreen extends ConsumerWidget { const RoutineScreen({super.key}); static const routeName = '/routine-detail'; @override - Widget build(BuildContext context) { + Widget build(BuildContext context, WidgetRef ref) { final routineId = ModalRoute.of(context)!.settings.arguments as int; - final routineProvider = context.read(); + final routineProvider = ref.read(routinesChangeProvider); final routine = routineProvider.findById(routineId); return Scaffold( appBar: RoutineDetailAppBar(routine), body: SingleChildScrollView( - child: Consumer( - builder: (context, value, child) => RoutineDetail(routine), - ), + child: RoutineDetail(routine), ), ); } diff --git a/lib/widgets/core/app_bar.dart b/lib/widgets/core/app_bar.dart index f4699de2..7c58306d 100644 --- a/lib/widgets/core/app_bar.dart +++ b/lib/widgets/core/app_bar.dart @@ -132,7 +132,7 @@ class MainAppBar extends ConsumerWidget implements PreferredSizeWidget { onTap: () { final auth = context.read(); auth.logout(); - context.read().clear(); + ref.read(routinesChangeProvider).clear(); context.read().clear(); // ref.read(bodyWeightStateProvider.notifier).clear(); context.read().clear(); diff --git a/lib/widgets/dashboard/calendar.dart b/lib/widgets/dashboard/calendar.dart index 1b239424..4f57f55e 100644 --- a/lib/widgets/dashboard/calendar.dart +++ b/lib/widgets/dashboard/calendar.dart @@ -25,6 +25,7 @@ import 'package:wger/helpers/consts.dart'; import 'package:wger/helpers/date.dart'; import 'package:wger/helpers/json.dart'; import 'package:wger/l10n/generated/app_localizations.dart'; +import 'package:wger/models/body_weight/weight_entry.dart'; import 'package:wger/providers/body_weight.dart'; import 'package:wger/providers/measurement.dart'; import 'package:wger/providers/nutrition.dart'; @@ -61,8 +62,8 @@ class _DashboardCalendarWidgetState extends riverpod.ConsumerState> _events; late final ValueNotifier> _selectedEvents; - RangeSelectionMode _rangeSelectionMode = - RangeSelectionMode.toggledOff; // Can be toggled on/off by longpressing a date + // Can be toggled on/off by longpressing a date + RangeSelectionMode _rangeSelectionMode = RangeSelectionMode.toggledOff; DateTime _focusedDay = DateTime.now(); DateTime? _selectedDay; DateTime? _rangeStart; @@ -98,20 +99,29 @@ class _DashboardCalendarWidgetState extends riverpod.ConsumerState> newEvents = >{}; + // Process weight entries - final entries = ref.watch(weightEntryProvider()).asData?.value ?? []; + List entries = []; + try { + entries = await ref.read(weightEntryProvider().future); + } catch (_) { + entries = ref.watch(weightEntryProvider()).asData?.value ?? []; + } for (final entry in entries) { final date = DateFormatLists.format(entry.date); - if (!_events.containsKey(date)) { - _events[date] = []; + if (!newEvents.containsKey(date)) { + newEvents[date] = []; } // Add events to lists - _events[date]?.add(Event(EventType.weight, '${numberFormat.format(entry.weight)} kg')); + newEvents[date]?.add(Event(EventType.weight, '${numberFormat.format(entry.weight)} kg')); } // Process measurements @@ -120,11 +130,11 @@ class _DashboardCalendarWidgetState extends riverpod.ConsumerState(); - await routinesProvider.fetchSessionData().then((sessions) { - for (final session in sessions) { - final date = DateFormatLists.format(session.date); - if (!_events.containsKey(date)) { - _events[date] = []; - } - var time = ''; - time = '(${timeToString(session.timeStart)} - ${timeToString(session.timeEnd)})'; - - // Add events to lists - _events[date]?.add( - Event(EventType.session, '${i18n.impression}: ${session.impressionAsString} $time'), - ); + final routinesProvider = ref.read(routinesChangeProvider); + for (final session in routinesProvider.sessions) { + final date = DateFormatLists.format(session.date); + if (!newEvents.containsKey(date)) { + newEvents[date] = []; } - }); + var time = ''; + if (session.timeStart != null && session.timeEnd != null) { + time = '(${timeToString(session.timeStart)} - ${timeToString(session.timeEnd)})'; + } + + // Add events to lists + newEvents[date]?.add( + Event(EventType.session, '${i18n.impression}: ${session.impressionAsString} $time'), + ); + } if (!mounted) { return; } @@ -162,19 +172,22 @@ class _DashboardCalendarWidgetState extends riverpod.ConsumerState _DashboardRoutineWidgetState(); } -class _DashboardRoutineWidgetState extends State { +class _DashboardRoutineWidgetState extends ConsumerState { var _showDetail = false; bool _hasContent = false; @override Widget build(BuildContext context) { - final routine = context.watch().currentRoutine; - _hasContent = routine != null; final dateFormat = DateFormat.yMd(Localizations.localeOf(context).languageCode); + final routine = ref.watch(routinesChangeProvider).currentRoutine; + _hasContent = routine != null; return Card( child: Column( diff --git a/lib/widgets/routines/app_bar.dart b/lib/widgets/routines/app_bar.dart index a6df177d..f28a84d6 100644 --- a/lib/widgets/routines/app_bar.dart +++ b/lib/widgets/routines/app_bar.dart @@ -18,7 +18,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:provider/provider.dart'; import 'package:wger/l10n/generated/app_localizations.dart'; import 'package:wger/models/workouts/routine.dart'; import 'package:wger/providers/network_provider.dart'; @@ -89,7 +88,7 @@ class RoutineDetailAppBar extends ConsumerWidget implements PreferredSizeWidget @override Widget build(BuildContext context, WidgetRef ref) { final i18n = AppLocalizations.of(context); - final provider = context.read(); + final provider = ref.read(routinesChangeProvider); final isOnline = ref.watch(networkStatusProvider); return AppBar( diff --git a/lib/widgets/routines/forms/day.dart b/lib/widgets/routines/forms/day.dart index a0ae3c25..2521cecd 100644 --- a/lib/widgets/routines/forms/day.dart +++ b/lib/widgets/routines/forms/day.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:wger/exceptions/http_exception.dart'; import 'package:wger/helpers/consts.dart'; import 'package:wger/helpers/errors.dart'; @@ -9,7 +9,7 @@ import 'package:wger/providers/routines.dart'; import 'package:wger/widgets/core/progress_indicator.dart'; import 'package:wger/widgets/routines/forms/slot.dart'; -class ReorderableDaysList extends StatefulWidget { +class ReorderableDaysList extends ConsumerStatefulWidget { final int routineId; final List days; final int? selectedDayId; @@ -23,6 +23,13 @@ class ReorderableDaysList extends StatefulWidget { required this.onDaySelected, }); + @override + ConsumerState createState() => _ReorderableDaysListState(); +} + +class _ReorderableDaysListState extends ConsumerState { + Widget errorMessage = const SizedBox.shrink(); + void _showDeleteConfirmationDialog(BuildContext context, Day day) { final i18n = AppLocalizations.of(context); @@ -41,8 +48,8 @@ class ReorderableDaysList extends StatefulWidget { ), TextButton( onPressed: () async { - days.remove(day); - await context.read().deleteDay(day.id!); + widget.days.remove(day); + await ref.read(routinesChangeProvider).deleteDay(day.id!); Navigator.of(context).pop(); }, child: const Text('Delete'), @@ -53,17 +60,10 @@ class ReorderableDaysList extends StatefulWidget { ); } - @override - State createState() => _ReorderableDaysListState(); -} - -class _ReorderableDaysListState extends State { - Widget errorMessage = const SizedBox.shrink(); - @override Widget build(BuildContext context) { final i18n = AppLocalizations.of(context); - final provider = context.read(); + final provider = ref.read(routinesChangeProvider); return Column( children: [ @@ -102,7 +102,7 @@ class _ReorderableDaysListState extends State { ), IconButton( icon: const Icon(Icons.delete), - onPressed: () => widget._showDeleteConfirmationDialog(context, day), + onPressed: () => _showDeleteConfirmationDialog(context, day), ), ], ), @@ -165,7 +165,7 @@ class _ReorderableDaysListState extends State { } } -class DayFormWidget extends StatefulWidget { +class DayFormWidget extends ConsumerStatefulWidget { late final Day day; DayFormWidget({required Day day, super.key}) { @@ -176,7 +176,7 @@ class DayFormWidget extends StatefulWidget { _DayFormWidgetState createState() => _DayFormWidgetState(); } -class _DayFormWidgetState extends State { +class _DayFormWidgetState extends ConsumerState { Widget errorMessage = const SizedBox.shrink(); final descriptionController = TextEditingController(); @@ -324,10 +324,7 @@ class _DayFormWidgetState extends State { setState(() => isSaving = true); try { - await Provider.of( - context, - listen: false, - ).editDay(widget.day); + await ref.read(routinesChangeProvider).editDay(widget.day); if (context.mounted) { setState(() { errorMessage = const SizedBox.shrink(); diff --git a/lib/widgets/routines/forms/routine.dart b/lib/widgets/routines/forms/routine.dart index bbdc9bb2..c307578e 100644 --- a/lib/widgets/routines/forms/routine.dart +++ b/lib/widgets/routines/forms/routine.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:intl/intl.dart'; -import 'package:provider/provider.dart'; import 'package:wger/exceptions/http_exception.dart'; import 'package:wger/helpers/consts.dart'; import 'package:wger/helpers/errors.dart'; @@ -10,17 +10,17 @@ import 'package:wger/providers/routines.dart'; import 'package:wger/screens/routine_edit_screen.dart'; import 'package:wger/widgets/core/progress_indicator.dart'; -class RoutineForm extends StatefulWidget { +class RoutineForm extends ConsumerStatefulWidget { final Routine _routine; final bool useListView; const RoutineForm(this._routine, {this.useListView = false}); @override - State createState() => _RoutineFormState(); + _RoutineFormState createState() => _RoutineFormState(); } -class _RoutineFormState extends State { +class _RoutineFormState extends ConsumerState { final _form = GlobalKey(); Widget errorMessage = const SizedBox.shrink(); @@ -216,7 +216,7 @@ class _RoutineFormState extends State { // Save to DB try { - final routinesProvider = context.read(); + final routinesProvider = ref.read(routinesChangeProvider); if (widget._routine.id != null) { await routinesProvider.editRoutine(widget._routine); diff --git a/lib/widgets/routines/forms/session.dart b/lib/widgets/routines/forms/session.dart index 191f3615..2d566e80 100644 --- a/lib/widgets/routines/forms/session.dart +++ b/lib/widgets/routines/forms/session.dart @@ -18,8 +18,8 @@ import 'package:clock/clock.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:logging/logging.dart'; -import 'package:provider/provider.dart'; import 'package:wger/exceptions/http_exception.dart'; import 'package:wger/helpers/consts.dart'; import 'package:wger/helpers/errors.dart'; @@ -28,7 +28,7 @@ import 'package:wger/l10n/generated/app_localizations.dart'; import 'package:wger/models/workouts/session.dart'; import 'package:wger/providers/routines.dart'; -class SessionForm extends StatefulWidget { +class SessionForm extends ConsumerStatefulWidget { final _logger = Logger('SessionForm'); final WorkoutSession _session; final int? _routineId; @@ -53,7 +53,7 @@ class SessionForm extends StatefulWidget { _SessionFormState createState() => _SessionFormState(); } -class _SessionFormState extends State { +class _SessionFormState extends ConsumerState { Widget errorMessage = const SizedBox.shrink(); final _form = GlobalKey(); @@ -75,8 +75,7 @@ class _SessionFormState extends State { timeEndController.text = widget._session.timeEnd == null ? '' : timeToString(widget._session.timeEnd)!; - notesController.text = widget._session.notes; - + notesController.text = widget._session.notes ?? ''; selectedImpression[widget._session.impression - 1] = true; } @@ -91,7 +90,7 @@ class _SessionFormState extends State { @override Widget build(BuildContext context) { - final routinesProvider = context.read(); + final routinesProvider = ref.read(routinesChangeProvider); return Form( key: _form, diff --git a/lib/widgets/routines/forms/slot.dart b/lib/widgets/routines/forms/slot.dart index 59ab4aa9..9085d644 100644 --- a/lib/widgets/routines/forms/slot.dart +++ b/lib/widgets/routines/forms/slot.dart @@ -17,7 +17,7 @@ */ import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:wger/exceptions/http_exception.dart'; import 'package:wger/helpers/errors.dart'; import 'package:wger/l10n/generated/app_localizations.dart'; @@ -30,7 +30,7 @@ import 'package:wger/widgets/exercises/autocompleter.dart'; import 'package:wger/widgets/routines/forms/slot_entry.dart'; import 'package:wger/widgets/routines/slot.dart'; -class SlotDetailWidget extends StatefulWidget { +class SlotDetailWidget extends ConsumerStatefulWidget { final Slot slot; final bool simpleMode; final int routineId; @@ -38,17 +38,17 @@ class SlotDetailWidget extends StatefulWidget { const SlotDetailWidget(this.slot, this.routineId, {this.simpleMode = true, super.key}); @override - State createState() => _SlotDetailWidgetState(); + _SlotDetailWidgetState createState() => _SlotDetailWidgetState(); } -class _SlotDetailWidgetState extends State { +class _SlotDetailWidgetState extends ConsumerState { bool _showExerciseSearchBox = false; Widget errorMessage = const SizedBox.shrink(); @override Widget build(BuildContext context) { final i18n = AppLocalizations.of(context); - final provider = context.read(); + final provider = ref.read(routinesChangeProvider); return Column( children: [ @@ -97,7 +97,7 @@ class _SlotDetailWidgetState extends State { } } -class ReorderableSlotList extends StatefulWidget { +class ReorderableSlotList extends ConsumerStatefulWidget { final List slots; final Day day; @@ -107,7 +107,7 @@ class ReorderableSlotList extends StatefulWidget { _SlotFormWidgetStateNg createState() => _SlotFormWidgetStateNg(); } -class _SlotFormWidgetStateNg extends State { +class _SlotFormWidgetStateNg extends ConsumerState { int? selectedSlotId; bool simpleMode = true; bool isAddingSlot = false; @@ -117,7 +117,7 @@ class _SlotFormWidgetStateNg extends State { @override Widget build(BuildContext context) { final i18n = AppLocalizations.of(context); - final provider = context.read(); + final provider = ref.read(routinesChangeProvider); final languageCode = Localizations.localeOf(context).languageCode; return Column( diff --git a/lib/widgets/routines/forms/slot_entry.dart b/lib/widgets/routines/forms/slot_entry.dart index 94ccd7f5..d5f0fb90 100644 --- a/lib/widgets/routines/forms/slot_entry.dart +++ b/lib/widgets/routines/forms/slot_entry.dart @@ -17,8 +17,8 @@ */ import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:intl/intl.dart'; -import 'package:provider/provider.dart'; import 'package:wger/exceptions/http_exception.dart'; import 'package:wger/helpers/consts.dart'; import 'package:wger/helpers/errors.dart'; @@ -34,7 +34,7 @@ import 'package:wger/widgets/routines/forms/rir.dart'; import 'package:wger/widgets/routines/forms/weight_unit.dart'; import 'package:wger/widgets/routines/slot.dart'; -class SlotEntryForm extends StatefulWidget { +class SlotEntryForm extends ConsumerStatefulWidget { final SlotEntry entry; final bool simpleMode; final int routineId; @@ -42,10 +42,10 @@ class SlotEntryForm extends StatefulWidget { const SlotEntryForm(this.entry, this.routineId, {this.simpleMode = true, super.key}); @override - State createState() => _SlotEntryFormState(); + _SlotEntryFormState createState() => _SlotEntryFormState(); } -class _SlotEntryFormState extends State { +class _SlotEntryFormState extends ConsumerState { bool isSaving = false; bool isDeleting = false; @@ -124,7 +124,7 @@ class _SlotEntryFormState extends State { final languageCode = Localizations.localeOf(context).languageCode; final numberFormat = NumberFormat.decimalPattern(Localizations.localeOf(context).toString()); - final provider = context.read(); + final provider = ref.read(routinesChangeProvider); return Form( key: _form, @@ -420,7 +420,7 @@ class _SlotEntryFormState extends State { } } -class SlotDetailWidget extends StatefulWidget { +class SlotDetailWidget extends ConsumerStatefulWidget { final Slot slot; final bool simpleMode; final int routineId; @@ -428,17 +428,17 @@ class SlotDetailWidget extends StatefulWidget { const SlotDetailWidget(this.slot, this.routineId, {this.simpleMode = true, super.key}); @override - State createState() => _SlotDetailWidgetState(); + _SlotDetailWidgetState createState() => _SlotDetailWidgetState(); } -class _SlotDetailWidgetState extends State { +class _SlotDetailWidgetState extends ConsumerState { bool _showExerciseSearchBox = false; Widget errorMessage = const SizedBox.shrink(); @override Widget build(BuildContext context) { final i18n = AppLocalizations.of(context); - final provider = context.read(); + final provider = ref.read(routinesChangeProvider); return Column( children: [ @@ -487,7 +487,7 @@ class _SlotDetailWidgetState extends State { } } -class ReorderableSlotList extends StatefulWidget { +class ReorderableSlotList extends ConsumerStatefulWidget { final List slots; final Day day; @@ -497,7 +497,7 @@ class ReorderableSlotList extends StatefulWidget { _SlotFormWidgetStateNg createState() => _SlotFormWidgetStateNg(); } -class _SlotFormWidgetStateNg extends State { +class _SlotFormWidgetStateNg extends ConsumerState { int? selectedSlotId; bool simpleMode = true; bool isAddingSlot = false; @@ -507,7 +507,7 @@ class _SlotFormWidgetStateNg extends State { @override Widget build(BuildContext context) { final i18n = AppLocalizations.of(context); - final provider = context.read(); + final provider = ref.read(routinesChangeProvider); final languageCode = Localizations.localeOf(context).languageCode; return Column( diff --git a/lib/widgets/routines/gym_mode/gym_mode.dart b/lib/widgets/routines/gym_mode/gym_mode.dart index a736c0ac..a99a0daa 100644 --- a/lib/widgets/routines/gym_mode/gym_mode.dart +++ b/lib/widgets/routines/gym_mode/gym_mode.dart @@ -20,7 +20,6 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:logging/logging.dart'; -import 'package:provider/provider.dart' as provider; import 'package:wger/models/exercises/exercise.dart'; import 'package:wger/models/workouts/day_data.dart'; import 'package:wger/providers/exercise_state_notifier.dart'; @@ -73,14 +72,6 @@ class _GymModeState extends ConsumerState { } Future _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().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; @@ -132,7 +123,7 @@ class _GymModeState extends ConsumerState { List getContent() { final state = ref.watch(gymStateProvider); final exercisesAsync = ref.read(exerciseStateProvider.notifier); - final routinesProvider = context.read(); + final routinesProvider = ref.watch(routinesChangeProvider); var currentElement = 1; final List out = []; @@ -213,11 +204,11 @@ class _GymModeState extends ConsumerState { StartPage(_controller, widget._dayDataDisplay, _exercisePages), ...getContent(), SessionPage( - context.read().findById(widget._dayDataGym.day!.routineId), + ref.read(routinesChangeProvider).findById(widget._dayDataGym.day!.routineId), _controller, ref.read(gymStateProvider).startTime, _exercisePages, - dayId: widget._dayDataGym.day!.id!, + dayId: widget._dayDataGym.day!.id, ), ]; diff --git a/lib/widgets/routines/gym_mode/log_page.dart b/lib/widgets/routines/gym_mode/log_page.dart index 2c446a2d..dba35d25 100644 --- a/lib/widgets/routines/gym_mode/log_page.dart +++ b/lib/widgets/routines/gym_mode/log_page.dart @@ -59,9 +59,7 @@ class LogPage extends ConsumerStatefulWidget { this._exercisePages, this._totalPages, int? iteration, - ) : _log = Log.fromSetConfigData(_configData) - ..routineId = _routine.id! - ..iteration = iteration; + ) : _log = Log.fromSetConfigData(_configData, routineId: _routine.id, iteration: iteration); @override _LogPageState createState() => _LogPageState(); @@ -127,10 +125,10 @@ class _LogPageState extends ConsumerState { Text(widget._slotData.comment, textAlign: TextAlign.center), const SizedBox(height: 10), Expanded( - child: (widget._routine.filterLogsByExercise(widget._exercise.id!).isNotEmpty) + child: (widget._routine.filterLogsByExercise(widget._exercise.id).isNotEmpty) ? LogsPastLogsWidget( log: widget._log, - pastLogs: widget._routine.filterLogsByExercise(widget._exercise.id!), + pastLogs: widget._routine.filterLogsByExercise(widget._exercise.id), onCopy: (pastLog) { _logFormKey.currentState?.copyFromPastLog(pastLog); }, diff --git a/lib/widgets/routines/gym_mode/session_page.dart b/lib/widgets/routines/gym_mode/session_page.dart index 45509156..ed7fa819 100644 --- a/lib/widgets/routines/gym_mode/session_page.dart +++ b/lib/widgets/routines/gym_mode/session_page.dart @@ -38,19 +38,17 @@ class SessionPage extends StatelessWidget { TimeOfDay start, this._exercisePages, { int? dayId, - }) : _session = _routine.sessions - .map((sessionApi) => sessionApi.session) - .firstWhere( - (session) => session.date.isSameDayAs(clock.now()), - orElse: () => WorkoutSession( - dayId: dayId, - routineId: _routine.id!, - impression: DEFAULT_IMPRESSION, - date: clock.now(), - timeStart: start, - timeEnd: TimeOfDay.fromDateTime(clock.now()), - ), - ); + }) : _session = _routine.sessions.firstWhere( + (session) => session.date.isSameDayAs(clock.now()), + orElse: () => WorkoutSession( + dayId: dayId, + routineId: _routine.id!, + impression: DEFAULT_IMPRESSION, + date: clock.now(), + timeStart: start, + timeEnd: TimeOfDay.fromDateTime(clock.now()), + ), + ); @override Widget build(BuildContext context) { @@ -65,7 +63,7 @@ class SessionPage extends StatelessWidget { Padding( padding: const EdgeInsets.symmetric(horizontal: 15), child: SessionForm( - _routine.id!, + _routine.id, onSaved: () => Navigator.of(context).pop(), session: _session, ), diff --git a/lib/widgets/routines/log.dart b/lib/widgets/routines/log.dart index ef698f3d..424aa105 100644 --- a/lib/widgets/routines/log.dart +++ b/lib/widgets/routines/log.dart @@ -101,7 +101,9 @@ class _SessionInfoState extends ConsumerState { _buildInfoRow( context, i18n.notes, - widget._session.notes.isNotEmpty ? widget._session.notes : '-/-', + (widget._session.notes != null && widget._session.notes!.isNotEmpty) + ? widget._session.notes! + : '-/-', ), ], ), @@ -174,15 +176,15 @@ class DayLogWidget extends ConsumerWidget { Widget build(BuildContext context, WidgetRef ref) { final isOnline = ref.watch(networkStatusProvider); - final sessionApi = _routine.sessions.firstWhere( - (sessionApi) => sessionApi.session.date.isSameDayAs(_date), + final session = _routine.sessions.firstWhere( + (sessionApi) => sessionApi.date.isSameDayAs(_date), ); - final exercises = sessionApi.exercises; + final exercises = session.exercises; return Card( child: Column( children: [ - SessionInfo(sessionApi.session), + SessionInfo(session), ...exercises.map((exercise) { final translation = exercise.getTranslation( Localizations.localeOf(context).languageCode, @@ -193,7 +195,7 @@ class DayLogWidget extends ConsumerWidget { translation.name, style: Theme.of(context).textTheme.titleMedium, ), - ...sessionApi.logs + ...session.logs .where((l) => l.exerciseId == exercise.id) .map( (log) => Row( diff --git a/lib/widgets/routines/routines_list.dart b/lib/widgets/routines/routines_list.dart index 2b8c9a0d..7f268c42 100644 --- a/lib/widgets/routines/routines_list.dart +++ b/lib/widgets/routines/routines_list.dart @@ -17,43 +17,39 @@ */ import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart' as riverpod; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:intl/intl.dart'; -import 'package:provider/provider.dart'; import 'package:wger/l10n/generated/app_localizations.dart'; import 'package:wger/providers/network_provider.dart'; import 'package:wger/providers/routines.dart'; import 'package:wger/screens/routine_screen.dart'; import 'package:wger/widgets/core/text_prompt.dart'; -class RoutinesList extends riverpod.ConsumerStatefulWidget { - final RoutinesProvider _routineProvider; - - const RoutinesList(this._routineProvider); +class RoutinesList extends ConsumerStatefulWidget { + const RoutinesList(); @override - riverpod.ConsumerState createState() => _RoutinesListState(); + ConsumerState createState() => _RoutinesListState(); } -class _RoutinesListState extends riverpod.ConsumerState { +class _RoutinesListState extends ConsumerState { int? _loadingRoutine; @override Widget build(BuildContext context) { final isOnline = ref.watch(networkStatusProvider); final dateFormat = DateFormat.yMd(Localizations.localeOf(context).languageCode); + final routineProvider = ref.read(routinesChangeProvider); return RefreshIndicator( - onRefresh: isOnline - ? () => widget._routineProvider.fetchAndSetAllRoutinesSparse() - : () async {}, - child: widget._routineProvider.items.isEmpty + onRefresh: isOnline ? () => routineProvider.fetchAndSetAllRoutinesSparse() : () async {}, + child: routineProvider.items.isEmpty ? const TextPrompt() : ListView.builder( padding: const EdgeInsets.all(10.0), - itemCount: widget._routineProvider.items.length, + itemCount: routineProvider.items.length, itemBuilder: (context, index) { - final currentRoutine = widget._routineProvider.items[index]; + final currentRoutine = routineProvider.items[index]; return Card( child: ListTile( @@ -62,7 +58,7 @@ class _RoutinesListState extends riverpod.ConsumerState { _loadingRoutine = currentRoutine.id; }); try { - await widget._routineProvider.fetchAndSetRoutineFull(currentRoutine.id!); + await routineProvider.fetchAndSetRoutineFull(currentRoutine.id!); } finally { if (mounted) { setState(() => _loadingRoutine = null); @@ -122,10 +118,7 @@ class _RoutinesListState extends riverpod.ConsumerState { ), onPressed: () { // Confirmed, delete the workout - Provider.of( - context, - listen: false, - ).deleteRoutine(currentRoutine.id!); + routineProvider.deleteRoutine(currentRoutine.id!); // Close the popup Navigator.of(contextDialog).pop(); diff --git a/lib/widgets/routines/workout_logs.dart b/lib/widgets/routines/workout_logs.dart index 66ab75aa..06537c55 100644 --- a/lib/widgets/routines/workout_logs.dart +++ b/lib/widgets/routines/workout_logs.dart @@ -95,9 +95,9 @@ class _WorkoutLogCalendarState extends State { } void loadEvents() { - for (final sessionApi in widget._routine.sessions) { - _events[DateFormatLists.format(sessionApi.session.date)] = [ - sessionApi.session.date, + for (final session in widget._routine.sessions) { + _events[DateFormatLists.format(session.date)] = [ + session.date, ]; } diff --git a/test/routine/day_form_test.mocks.dart b/test/routine/day_form_test.mocks.dart index 0832e190..9f9e3852 100644 --- a/test/routine/day_form_test.mocks.dart +++ b/test/routine/day_form_test.mocks.dart @@ -14,12 +14,12 @@ import 'package:wger/models/workouts/day.dart' as _i6; import 'package:wger/models/workouts/day_data.dart' as _i14; import 'package:wger/models/workouts/repetition_unit.dart' as _i4; import 'package:wger/models/workouts/routine.dart' as _i5; -import 'package:wger/models/workouts/session.dart' as _i10; +import 'package:wger/models/workouts/session.dart' as _i11; import 'package:wger/models/workouts/slot.dart' as _i7; import 'package:wger/models/workouts/slot_entry.dart' as _i8; import 'package:wger/models/workouts/weight_unit.dart' as _i3; import 'package:wger/providers/base_provider.dart' as _i2; -import 'package:wger/providers/routines.dart' as _i11; +import 'package:wger/providers/routines.dart' as _i10; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -69,15 +69,10 @@ class _FakeBaseConfig_7 extends _i1.SmartFake implements _i9.BaseConfig { _FakeBaseConfig_7(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); } -class _FakeWorkoutSession_8 extends _i1.SmartFake implements _i10.WorkoutSession { - _FakeWorkoutSession_8(Object parent, Invocation parentInvocation) - : super(parent, parentInvocation); -} - /// A class which mocks [RoutinesProvider]. /// /// See the documentation for Mockito's code generation for more information. -class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { +class MockRoutinesProvider extends _i1.Mock implements _i10.RoutinesProvider { MockRoutinesProvider() { _i1.throwOnMissingStub(this); } @@ -101,6 +96,14 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { ) as List<_i3.WeightUnit>); + @override + List<_i11.WorkoutSession> get sessions => + (super.noSuchMethod( + Invocation.getter(#sessions), + returnValue: <_i11.WorkoutSession>[], + ) + as List<_i11.WorkoutSession>); + @override List<_i5.Routine> get items => (super.noSuchMethod( @@ -163,31 +166,23 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { returnValueForMissingStub: null, ); + @override + set sessions(List<_i11.WorkoutSession>? sessions) => super.noSuchMethod( + Invocation.setter(#sessions, sessions), + returnValueForMissingStub: null, + ); + @override bool get hasListeners => (super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false) as bool); @override - _i4.RepetitionUnit getRepetitionUnitById(int? id) => + List<_i11.WorkoutSession> getSessionsForRoutine(int? id) => (super.noSuchMethod( - Invocation.method(#getRepetitionUnitById, [id]), - returnValue: _FakeRepetitionUnit_2( - this, - Invocation.method(#getRepetitionUnitById, [id]), - ), + Invocation.method(#getSessionsForRoutine, [id]), + returnValue: <_i11.WorkoutSession>[], ) - as _i4.RepetitionUnit); - - @override - _i3.WeightUnit getWeightUnitById(int? id) => - (super.noSuchMethod( - Invocation.method(#getWeightUnitById, [id]), - returnValue: _FakeWeightUnit_1( - this, - Invocation.method(#getWeightUnitById, [id]), - ), - ) - as _i3.WeightUnit); + as List<_i11.WorkoutSession>); @override void clear() => super.noSuchMethod( @@ -241,16 +236,9 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { as _i13.Future); @override - _i13.Future setExercisesAndUnits( - List<_i14.DayData>? entries, { - Map? exercises, - }) => + _i13.Future setExercisesAndUnits(List<_i14.DayData>? entries) => (super.noSuchMethod( - Invocation.method( - #setExercisesAndUnits, - [entries], - {#exercises: exercises}, - ), + Invocation.method(#setExercisesAndUnits, [entries]), returnValue: _i13.Future.value(), returnValueForMissingStub: _i13.Future.value(), ) @@ -484,33 +472,26 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { as _i13.Future); @override - _i13.Future> fetchSessionData() => + _i13.Future> fetchSessionData() => (super.noSuchMethod( Invocation.method(#fetchSessionData, []), - returnValue: _i13.Future>.value( - <_i10.WorkoutSession>[], + returnValue: _i13.Future>.value( + <_i11.WorkoutSession>[], ), ) - as _i13.Future>); + as _i13.Future>); @override - _i13.Future<_i10.WorkoutSession> addSession( - _i10.WorkoutSession? session, - int? routineId, - ) => + _i13.Future addSession(_i11.WorkoutSession? session, int? routineId) => (super.noSuchMethod( Invocation.method(#addSession, [session, routineId]), - returnValue: _i13.Future<_i10.WorkoutSession>.value( - _FakeWorkoutSession_8( - this, - Invocation.method(#addSession, [session, routineId]), - ), - ), + returnValue: _i13.Future.value(), + returnValueForMissingStub: _i13.Future.value(), ) - as _i13.Future<_i10.WorkoutSession>); + as _i13.Future); @override - _i13.Future editSession(_i10.WorkoutSession? session) => + _i13.Future editSession(_i11.WorkoutSession? session) => (super.noSuchMethod( Invocation.method(#editSession, [session]), returnValue: _i13.Future.value(), diff --git a/test/routine/forms/session_form_test.mocks.dart b/test/routine/forms/session_form_test.mocks.dart index 92a8c5df..986356bb 100644 --- a/test/routine/forms/session_form_test.mocks.dart +++ b/test/routine/forms/session_form_test.mocks.dart @@ -14,12 +14,12 @@ import 'package:wger/models/workouts/day.dart' as _i6; import 'package:wger/models/workouts/day_data.dart' as _i14; import 'package:wger/models/workouts/repetition_unit.dart' as _i4; import 'package:wger/models/workouts/routine.dart' as _i5; -import 'package:wger/models/workouts/session.dart' as _i10; +import 'package:wger/models/workouts/session.dart' as _i11; import 'package:wger/models/workouts/slot.dart' as _i7; import 'package:wger/models/workouts/slot_entry.dart' as _i8; import 'package:wger/models/workouts/weight_unit.dart' as _i3; import 'package:wger/providers/base_provider.dart' as _i2; -import 'package:wger/providers/routines.dart' as _i11; +import 'package:wger/providers/routines.dart' as _i10; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -69,15 +69,10 @@ class _FakeBaseConfig_7 extends _i1.SmartFake implements _i9.BaseConfig { _FakeBaseConfig_7(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); } -class _FakeWorkoutSession_8 extends _i1.SmartFake implements _i10.WorkoutSession { - _FakeWorkoutSession_8(Object parent, Invocation parentInvocation) - : super(parent, parentInvocation); -} - /// A class which mocks [RoutinesProvider]. /// /// See the documentation for Mockito's code generation for more information. -class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { +class MockRoutinesProvider extends _i1.Mock implements _i10.RoutinesProvider { MockRoutinesProvider() { _i1.throwOnMissingStub(this); } @@ -101,6 +96,14 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { ) as List<_i3.WeightUnit>); + @override + List<_i11.WorkoutSession> get sessions => + (super.noSuchMethod( + Invocation.getter(#sessions), + returnValue: <_i11.WorkoutSession>[], + ) + as List<_i11.WorkoutSession>); + @override List<_i5.Routine> get items => (super.noSuchMethod( @@ -163,31 +166,23 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { returnValueForMissingStub: null, ); + @override + set sessions(List<_i11.WorkoutSession>? sessions) => super.noSuchMethod( + Invocation.setter(#sessions, sessions), + returnValueForMissingStub: null, + ); + @override bool get hasListeners => (super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false) as bool); @override - _i4.RepetitionUnit getRepetitionUnitById(int? id) => + List<_i11.WorkoutSession> getSessionsForRoutine(int? id) => (super.noSuchMethod( - Invocation.method(#getRepetitionUnitById, [id]), - returnValue: _FakeRepetitionUnit_2( - this, - Invocation.method(#getRepetitionUnitById, [id]), - ), + Invocation.method(#getSessionsForRoutine, [id]), + returnValue: <_i11.WorkoutSession>[], ) - as _i4.RepetitionUnit); - - @override - _i3.WeightUnit getWeightUnitById(int? id) => - (super.noSuchMethod( - Invocation.method(#getWeightUnitById, [id]), - returnValue: _FakeWeightUnit_1( - this, - Invocation.method(#getWeightUnitById, [id]), - ), - ) - as _i3.WeightUnit); + as List<_i11.WorkoutSession>); @override void clear() => super.noSuchMethod( @@ -241,16 +236,9 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { as _i13.Future); @override - _i13.Future setExercisesAndUnits( - List<_i14.DayData>? entries, { - Map? exercises, - }) => + _i13.Future setExercisesAndUnits(List<_i14.DayData>? entries) => (super.noSuchMethod( - Invocation.method( - #setExercisesAndUnits, - [entries], - {#exercises: exercises}, - ), + Invocation.method(#setExercisesAndUnits, [entries]), returnValue: _i13.Future.value(), returnValueForMissingStub: _i13.Future.value(), ) @@ -484,33 +472,26 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { as _i13.Future); @override - _i13.Future> fetchSessionData() => + _i13.Future> fetchSessionData() => (super.noSuchMethod( Invocation.method(#fetchSessionData, []), - returnValue: _i13.Future>.value( - <_i10.WorkoutSession>[], + returnValue: _i13.Future>.value( + <_i11.WorkoutSession>[], ), ) - as _i13.Future>); + as _i13.Future>); @override - _i13.Future<_i10.WorkoutSession> addSession( - _i10.WorkoutSession? session, - int? routineId, - ) => + _i13.Future addSession(_i11.WorkoutSession? session, int? routineId) => (super.noSuchMethod( Invocation.method(#addSession, [session, routineId]), - returnValue: _i13.Future<_i10.WorkoutSession>.value( - _FakeWorkoutSession_8( - this, - Invocation.method(#addSession, [session, routineId]), - ), - ), + returnValue: _i13.Future.value(), + returnValueForMissingStub: _i13.Future.value(), ) - as _i13.Future<_i10.WorkoutSession>); + as _i13.Future); @override - _i13.Future editSession(_i10.WorkoutSession? session) => + _i13.Future editSession(_i11.WorkoutSession? session) => (super.noSuchMethod( Invocation.method(#editSession, [session]), returnValue: _i13.Future.value(), diff --git a/test/routine/gym_mode_screen_test.dart b/test/routine/gym_mode_screen_test.dart index 0a5d9bac..ca8b66e8 100644 --- a/test/routine/gym_mode_screen_test.dart +++ b/test/routine/gym_mode_screen_test.dart @@ -50,15 +50,9 @@ void main() { final key = GlobalKey(); final mockRoutinesProvider = MockRoutinesProvider(); - final testRoutine = getTestRoutine(); setUp(() { - when(mockRoutinesProvider.findById(any)).thenReturn(testRoutine); - when(mockRoutinesProvider.items).thenReturn([testRoutine]); - when( - mockRoutinesProvider.fetchAndSetRoutineFull(any), - ).thenAnswer((_) => Future.value(testRoutine)); - + when(mockRoutinesProvider.findById(any)).thenReturn(getTestRoutine()); SharedPreferencesAsyncPlatform.instance = InMemorySharedPreferencesAsync.empty(); }); diff --git a/test/routine/gym_mode_screen_test.mocks.dart b/test/routine/gym_mode_screen_test.mocks.dart index e2b05cba..f06c1ace 100644 --- a/test/routine/gym_mode_screen_test.mocks.dart +++ b/test/routine/gym_mode_screen_test.mocks.dart @@ -14,12 +14,12 @@ import 'package:wger/models/workouts/day.dart' as _i6; import 'package:wger/models/workouts/day_data.dart' as _i14; import 'package:wger/models/workouts/repetition_unit.dart' as _i4; import 'package:wger/models/workouts/routine.dart' as _i5; -import 'package:wger/models/workouts/session.dart' as _i10; +import 'package:wger/models/workouts/session.dart' as _i11; import 'package:wger/models/workouts/slot.dart' as _i7; import 'package:wger/models/workouts/slot_entry.dart' as _i8; import 'package:wger/models/workouts/weight_unit.dart' as _i3; import 'package:wger/providers/base_provider.dart' as _i2; -import 'package:wger/providers/routines.dart' as _i11; +import 'package:wger/providers/routines.dart' as _i10; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -69,15 +69,10 @@ class _FakeBaseConfig_7 extends _i1.SmartFake implements _i9.BaseConfig { _FakeBaseConfig_7(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); } -class _FakeWorkoutSession_8 extends _i1.SmartFake implements _i10.WorkoutSession { - _FakeWorkoutSession_8(Object parent, Invocation parentInvocation) - : super(parent, parentInvocation); -} - /// A class which mocks [RoutinesProvider]. /// /// See the documentation for Mockito's code generation for more information. -class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { +class MockRoutinesProvider extends _i1.Mock implements _i10.RoutinesProvider { MockRoutinesProvider() { _i1.throwOnMissingStub(this); } @@ -101,6 +96,14 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { ) as List<_i3.WeightUnit>); + @override + List<_i11.WorkoutSession> get sessions => + (super.noSuchMethod( + Invocation.getter(#sessions), + returnValue: <_i11.WorkoutSession>[], + ) + as List<_i11.WorkoutSession>); + @override List<_i5.Routine> get items => (super.noSuchMethod( @@ -163,31 +166,23 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { returnValueForMissingStub: null, ); + @override + set sessions(List<_i11.WorkoutSession>? sessions) => super.noSuchMethod( + Invocation.setter(#sessions, sessions), + returnValueForMissingStub: null, + ); + @override bool get hasListeners => (super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false) as bool); @override - _i4.RepetitionUnit getRepetitionUnitById(int? id) => + List<_i11.WorkoutSession> getSessionsForRoutine(int? id) => (super.noSuchMethod( - Invocation.method(#getRepetitionUnitById, [id]), - returnValue: _FakeRepetitionUnit_2( - this, - Invocation.method(#getRepetitionUnitById, [id]), - ), + Invocation.method(#getSessionsForRoutine, [id]), + returnValue: <_i11.WorkoutSession>[], ) - as _i4.RepetitionUnit); - - @override - _i3.WeightUnit getWeightUnitById(int? id) => - (super.noSuchMethod( - Invocation.method(#getWeightUnitById, [id]), - returnValue: _FakeWeightUnit_1( - this, - Invocation.method(#getWeightUnitById, [id]), - ), - ) - as _i3.WeightUnit); + as List<_i11.WorkoutSession>); @override void clear() => super.noSuchMethod( @@ -241,16 +236,9 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { as _i13.Future); @override - _i13.Future setExercisesAndUnits( - List<_i14.DayData>? entries, { - Map? exercises, - }) => + _i13.Future setExercisesAndUnits(List<_i14.DayData>? entries) => (super.noSuchMethod( - Invocation.method( - #setExercisesAndUnits, - [entries], - {#exercises: exercises}, - ), + Invocation.method(#setExercisesAndUnits, [entries]), returnValue: _i13.Future.value(), returnValueForMissingStub: _i13.Future.value(), ) @@ -484,33 +472,26 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { as _i13.Future); @override - _i13.Future> fetchSessionData() => + _i13.Future> fetchSessionData() => (super.noSuchMethod( Invocation.method(#fetchSessionData, []), - returnValue: _i13.Future>.value( - <_i10.WorkoutSession>[], + returnValue: _i13.Future>.value( + <_i11.WorkoutSession>[], ), ) - as _i13.Future>); + as _i13.Future>); @override - _i13.Future<_i10.WorkoutSession> addSession( - _i10.WorkoutSession? session, - int? routineId, - ) => + _i13.Future addSession(_i11.WorkoutSession? session, int? routineId) => (super.noSuchMethod( Invocation.method(#addSession, [session, routineId]), - returnValue: _i13.Future<_i10.WorkoutSession>.value( - _FakeWorkoutSession_8( - this, - Invocation.method(#addSession, [session, routineId]), - ), - ), + returnValue: _i13.Future.value(), + returnValueForMissingStub: _i13.Future.value(), ) - as _i13.Future<_i10.WorkoutSession>); + as _i13.Future); @override - _i13.Future editSession(_i10.WorkoutSession? session) => + _i13.Future editSession(_i11.WorkoutSession? session) => (super.noSuchMethod( Invocation.method(#editSession, [session]), returnValue: _i13.Future.value(), diff --git a/test/routine/gym_mode_session_screen_test.dart b/test/routine/gym_mode_session_screen_test.dart index ef645765..ce164a5a 100644 --- a/test/routine/gym_mode_session_screen_test.dart +++ b/test/routine/gym_mode_session_screen_test.dart @@ -41,7 +41,7 @@ void main() { testRoutine = getTestRoutine(); when(mockRoutinesProvider.editSession(any)).thenAnswer( - (_) => Future.value(testRoutine.sessions[0].session), + (_) => Future.value(testRoutine.sessions[0]), ); }); @@ -76,8 +76,8 @@ void main() { }); testWidgets('Test that data from session is loaded - null times', (WidgetTester tester) async { - testRoutine.sessions[0].session.timeStart = null; - testRoutine.sessions[0].session.timeEnd = null; + testRoutine.sessions[0].timeStart = null; + testRoutine.sessions[0].timeEnd = null; withClock(Clock.fixed(DateTime(2021, 5, 1)), () async { await tester.pumpWidget(renderSessionPage()); diff --git a/test/routine/gym_mode_session_screen_test.mocks.dart b/test/routine/gym_mode_session_screen_test.mocks.dart index 9e215e8e..d67eda7b 100644 --- a/test/routine/gym_mode_session_screen_test.mocks.dart +++ b/test/routine/gym_mode_session_screen_test.mocks.dart @@ -14,12 +14,12 @@ import 'package:wger/models/workouts/day.dart' as _i6; import 'package:wger/models/workouts/day_data.dart' as _i14; import 'package:wger/models/workouts/repetition_unit.dart' as _i4; import 'package:wger/models/workouts/routine.dart' as _i5; -import 'package:wger/models/workouts/session.dart' as _i10; +import 'package:wger/models/workouts/session.dart' as _i11; import 'package:wger/models/workouts/slot.dart' as _i7; import 'package:wger/models/workouts/slot_entry.dart' as _i8; import 'package:wger/models/workouts/weight_unit.dart' as _i3; import 'package:wger/providers/base_provider.dart' as _i2; -import 'package:wger/providers/routines.dart' as _i11; +import 'package:wger/providers/routines.dart' as _i10; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -69,15 +69,10 @@ class _FakeBaseConfig_7 extends _i1.SmartFake implements _i9.BaseConfig { _FakeBaseConfig_7(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); } -class _FakeWorkoutSession_8 extends _i1.SmartFake implements _i10.WorkoutSession { - _FakeWorkoutSession_8(Object parent, Invocation parentInvocation) - : super(parent, parentInvocation); -} - /// A class which mocks [RoutinesProvider]. /// /// See the documentation for Mockito's code generation for more information. -class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { +class MockRoutinesProvider extends _i1.Mock implements _i10.RoutinesProvider { MockRoutinesProvider() { _i1.throwOnMissingStub(this); } @@ -101,6 +96,14 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { ) as List<_i3.WeightUnit>); + @override + List<_i11.WorkoutSession> get sessions => + (super.noSuchMethod( + Invocation.getter(#sessions), + returnValue: <_i11.WorkoutSession>[], + ) + as List<_i11.WorkoutSession>); + @override List<_i5.Routine> get items => (super.noSuchMethod( @@ -163,31 +166,23 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { returnValueForMissingStub: null, ); + @override + set sessions(List<_i11.WorkoutSession>? sessions) => super.noSuchMethod( + Invocation.setter(#sessions, sessions), + returnValueForMissingStub: null, + ); + @override bool get hasListeners => (super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false) as bool); @override - _i4.RepetitionUnit getRepetitionUnitById(int? id) => + List<_i11.WorkoutSession> getSessionsForRoutine(int? id) => (super.noSuchMethod( - Invocation.method(#getRepetitionUnitById, [id]), - returnValue: _FakeRepetitionUnit_2( - this, - Invocation.method(#getRepetitionUnitById, [id]), - ), + Invocation.method(#getSessionsForRoutine, [id]), + returnValue: <_i11.WorkoutSession>[], ) - as _i4.RepetitionUnit); - - @override - _i3.WeightUnit getWeightUnitById(int? id) => - (super.noSuchMethod( - Invocation.method(#getWeightUnitById, [id]), - returnValue: _FakeWeightUnit_1( - this, - Invocation.method(#getWeightUnitById, [id]), - ), - ) - as _i3.WeightUnit); + as List<_i11.WorkoutSession>); @override void clear() => super.noSuchMethod( @@ -241,16 +236,9 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { as _i13.Future); @override - _i13.Future setExercisesAndUnits( - List<_i14.DayData>? entries, { - Map? exercises, - }) => + _i13.Future setExercisesAndUnits(List<_i14.DayData>? entries) => (super.noSuchMethod( - Invocation.method( - #setExercisesAndUnits, - [entries], - {#exercises: exercises}, - ), + Invocation.method(#setExercisesAndUnits, [entries]), returnValue: _i13.Future.value(), returnValueForMissingStub: _i13.Future.value(), ) @@ -484,33 +472,26 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { as _i13.Future); @override - _i13.Future> fetchSessionData() => + _i13.Future> fetchSessionData() => (super.noSuchMethod( Invocation.method(#fetchSessionData, []), - returnValue: _i13.Future>.value( - <_i10.WorkoutSession>[], + returnValue: _i13.Future>.value( + <_i11.WorkoutSession>[], ), ) - as _i13.Future>); + as _i13.Future>); @override - _i13.Future<_i10.WorkoutSession> addSession( - _i10.WorkoutSession? session, - int? routineId, - ) => + _i13.Future addSession(_i11.WorkoutSession? session, int? routineId) => (super.noSuchMethod( Invocation.method(#addSession, [session, routineId]), - returnValue: _i13.Future<_i10.WorkoutSession>.value( - _FakeWorkoutSession_8( - this, - Invocation.method(#addSession, [session, routineId]), - ), - ), + returnValue: _i13.Future.value(), + returnValueForMissingStub: _i13.Future.value(), ) - as _i13.Future<_i10.WorkoutSession>); + as _i13.Future); @override - _i13.Future editSession(_i10.WorkoutSession? session) => + _i13.Future editSession(_i11.WorkoutSession? session) => (super.noSuchMethod( Invocation.method(#editSession, [session]), returnValue: _i13.Future.value(), diff --git a/test/routine/routine_edit_screen_test.mocks.dart b/test/routine/routine_edit_screen_test.mocks.dart index f4436bf6..84daa595 100644 --- a/test/routine/routine_edit_screen_test.mocks.dart +++ b/test/routine/routine_edit_screen_test.mocks.dart @@ -14,12 +14,12 @@ import 'package:wger/models/workouts/day.dart' as _i6; import 'package:wger/models/workouts/day_data.dart' as _i14; import 'package:wger/models/workouts/repetition_unit.dart' as _i4; import 'package:wger/models/workouts/routine.dart' as _i5; -import 'package:wger/models/workouts/session.dart' as _i10; +import 'package:wger/models/workouts/session.dart' as _i11; import 'package:wger/models/workouts/slot.dart' as _i7; import 'package:wger/models/workouts/slot_entry.dart' as _i8; import 'package:wger/models/workouts/weight_unit.dart' as _i3; import 'package:wger/providers/base_provider.dart' as _i2; -import 'package:wger/providers/routines.dart' as _i11; +import 'package:wger/providers/routines.dart' as _i10; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -69,15 +69,10 @@ class _FakeBaseConfig_7 extends _i1.SmartFake implements _i9.BaseConfig { _FakeBaseConfig_7(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); } -class _FakeWorkoutSession_8 extends _i1.SmartFake implements _i10.WorkoutSession { - _FakeWorkoutSession_8(Object parent, Invocation parentInvocation) - : super(parent, parentInvocation); -} - /// A class which mocks [RoutinesProvider]. /// /// See the documentation for Mockito's code generation for more information. -class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { +class MockRoutinesProvider extends _i1.Mock implements _i10.RoutinesProvider { MockRoutinesProvider() { _i1.throwOnMissingStub(this); } @@ -101,6 +96,14 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { ) as List<_i3.WeightUnit>); + @override + List<_i11.WorkoutSession> get sessions => + (super.noSuchMethod( + Invocation.getter(#sessions), + returnValue: <_i11.WorkoutSession>[], + ) + as List<_i11.WorkoutSession>); + @override List<_i5.Routine> get items => (super.noSuchMethod( @@ -163,31 +166,23 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { returnValueForMissingStub: null, ); + @override + set sessions(List<_i11.WorkoutSession>? sessions) => super.noSuchMethod( + Invocation.setter(#sessions, sessions), + returnValueForMissingStub: null, + ); + @override bool get hasListeners => (super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false) as bool); @override - _i4.RepetitionUnit getRepetitionUnitById(int? id) => + List<_i11.WorkoutSession> getSessionsForRoutine(int? id) => (super.noSuchMethod( - Invocation.method(#getRepetitionUnitById, [id]), - returnValue: _FakeRepetitionUnit_2( - this, - Invocation.method(#getRepetitionUnitById, [id]), - ), + Invocation.method(#getSessionsForRoutine, [id]), + returnValue: <_i11.WorkoutSession>[], ) - as _i4.RepetitionUnit); - - @override - _i3.WeightUnit getWeightUnitById(int? id) => - (super.noSuchMethod( - Invocation.method(#getWeightUnitById, [id]), - returnValue: _FakeWeightUnit_1( - this, - Invocation.method(#getWeightUnitById, [id]), - ), - ) - as _i3.WeightUnit); + as List<_i11.WorkoutSession>); @override void clear() => super.noSuchMethod( @@ -241,16 +236,9 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { as _i13.Future); @override - _i13.Future setExercisesAndUnits( - List<_i14.DayData>? entries, { - Map? exercises, - }) => + _i13.Future setExercisesAndUnits(List<_i14.DayData>? entries) => (super.noSuchMethod( - Invocation.method( - #setExercisesAndUnits, - [entries], - {#exercises: exercises}, - ), + Invocation.method(#setExercisesAndUnits, [entries]), returnValue: _i13.Future.value(), returnValueForMissingStub: _i13.Future.value(), ) @@ -484,33 +472,26 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { as _i13.Future); @override - _i13.Future> fetchSessionData() => + _i13.Future> fetchSessionData() => (super.noSuchMethod( Invocation.method(#fetchSessionData, []), - returnValue: _i13.Future>.value( - <_i10.WorkoutSession>[], + returnValue: _i13.Future>.value( + <_i11.WorkoutSession>[], ), ) - as _i13.Future>); + as _i13.Future>); @override - _i13.Future<_i10.WorkoutSession> addSession( - _i10.WorkoutSession? session, - int? routineId, - ) => + _i13.Future addSession(_i11.WorkoutSession? session, int? routineId) => (super.noSuchMethod( Invocation.method(#addSession, [session, routineId]), - returnValue: _i13.Future<_i10.WorkoutSession>.value( - _FakeWorkoutSession_8( - this, - Invocation.method(#addSession, [session, routineId]), - ), - ), + returnValue: _i13.Future.value(), + returnValueForMissingStub: _i13.Future.value(), ) - as _i13.Future<_i10.WorkoutSession>); + as _i13.Future); @override - _i13.Future editSession(_i10.WorkoutSession? session) => + _i13.Future editSession(_i11.WorkoutSession? session) => (super.noSuchMethod( Invocation.method(#editSession, [session]), returnValue: _i13.Future.value(), diff --git a/test/routine/routine_edit_test.mocks.dart b/test/routine/routine_edit_test.mocks.dart index 713b3b1d..a21a34da 100644 --- a/test/routine/routine_edit_test.mocks.dart +++ b/test/routine/routine_edit_test.mocks.dart @@ -14,12 +14,12 @@ import 'package:wger/models/workouts/day.dart' as _i6; import 'package:wger/models/workouts/day_data.dart' as _i14; import 'package:wger/models/workouts/repetition_unit.dart' as _i4; import 'package:wger/models/workouts/routine.dart' as _i5; -import 'package:wger/models/workouts/session.dart' as _i10; +import 'package:wger/models/workouts/session.dart' as _i11; import 'package:wger/models/workouts/slot.dart' as _i7; import 'package:wger/models/workouts/slot_entry.dart' as _i8; import 'package:wger/models/workouts/weight_unit.dart' as _i3; import 'package:wger/providers/base_provider.dart' as _i2; -import 'package:wger/providers/routines.dart' as _i11; +import 'package:wger/providers/routines.dart' as _i10; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -69,15 +69,10 @@ class _FakeBaseConfig_7 extends _i1.SmartFake implements _i9.BaseConfig { _FakeBaseConfig_7(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); } -class _FakeWorkoutSession_8 extends _i1.SmartFake implements _i10.WorkoutSession { - _FakeWorkoutSession_8(Object parent, Invocation parentInvocation) - : super(parent, parentInvocation); -} - /// A class which mocks [RoutinesProvider]. /// /// See the documentation for Mockito's code generation for more information. -class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { +class MockRoutinesProvider extends _i1.Mock implements _i10.RoutinesProvider { MockRoutinesProvider() { _i1.throwOnMissingStub(this); } @@ -101,6 +96,14 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { ) as List<_i3.WeightUnit>); + @override + List<_i11.WorkoutSession> get sessions => + (super.noSuchMethod( + Invocation.getter(#sessions), + returnValue: <_i11.WorkoutSession>[], + ) + as List<_i11.WorkoutSession>); + @override List<_i5.Routine> get items => (super.noSuchMethod( @@ -163,31 +166,23 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { returnValueForMissingStub: null, ); + @override + set sessions(List<_i11.WorkoutSession>? sessions) => super.noSuchMethod( + Invocation.setter(#sessions, sessions), + returnValueForMissingStub: null, + ); + @override bool get hasListeners => (super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false) as bool); @override - _i4.RepetitionUnit getRepetitionUnitById(int? id) => + List<_i11.WorkoutSession> getSessionsForRoutine(int? id) => (super.noSuchMethod( - Invocation.method(#getRepetitionUnitById, [id]), - returnValue: _FakeRepetitionUnit_2( - this, - Invocation.method(#getRepetitionUnitById, [id]), - ), + Invocation.method(#getSessionsForRoutine, [id]), + returnValue: <_i11.WorkoutSession>[], ) - as _i4.RepetitionUnit); - - @override - _i3.WeightUnit getWeightUnitById(int? id) => - (super.noSuchMethod( - Invocation.method(#getWeightUnitById, [id]), - returnValue: _FakeWeightUnit_1( - this, - Invocation.method(#getWeightUnitById, [id]), - ), - ) - as _i3.WeightUnit); + as List<_i11.WorkoutSession>); @override void clear() => super.noSuchMethod( @@ -241,16 +236,9 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { as _i13.Future); @override - _i13.Future setExercisesAndUnits( - List<_i14.DayData>? entries, { - Map? exercises, - }) => + _i13.Future setExercisesAndUnits(List<_i14.DayData>? entries) => (super.noSuchMethod( - Invocation.method( - #setExercisesAndUnits, - [entries], - {#exercises: exercises}, - ), + Invocation.method(#setExercisesAndUnits, [entries]), returnValue: _i13.Future.value(), returnValueForMissingStub: _i13.Future.value(), ) @@ -484,33 +472,26 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { as _i13.Future); @override - _i13.Future> fetchSessionData() => + _i13.Future> fetchSessionData() => (super.noSuchMethod( Invocation.method(#fetchSessionData, []), - returnValue: _i13.Future>.value( - <_i10.WorkoutSession>[], + returnValue: _i13.Future>.value( + <_i11.WorkoutSession>[], ), ) - as _i13.Future>); + as _i13.Future>); @override - _i13.Future<_i10.WorkoutSession> addSession( - _i10.WorkoutSession? session, - int? routineId, - ) => + _i13.Future addSession(_i11.WorkoutSession? session, int? routineId) => (super.noSuchMethod( Invocation.method(#addSession, [session, routineId]), - returnValue: _i13.Future<_i10.WorkoutSession>.value( - _FakeWorkoutSession_8( - this, - Invocation.method(#addSession, [session, routineId]), - ), - ), + returnValue: _i13.Future.value(), + returnValueForMissingStub: _i13.Future.value(), ) - as _i13.Future<_i10.WorkoutSession>); + as _i13.Future); @override - _i13.Future editSession(_i10.WorkoutSession? session) => + _i13.Future editSession(_i11.WorkoutSession? session) => (super.noSuchMethod( Invocation.method(#editSession, [session]), returnValue: _i13.Future.value(), diff --git a/test/routine/routine_form_test.mocks.dart b/test/routine/routine_form_test.mocks.dart index 48f73b14..3ff7b012 100644 --- a/test/routine/routine_form_test.mocks.dart +++ b/test/routine/routine_form_test.mocks.dart @@ -14,12 +14,12 @@ import 'package:wger/models/workouts/day.dart' as _i6; import 'package:wger/models/workouts/day_data.dart' as _i14; import 'package:wger/models/workouts/repetition_unit.dart' as _i4; import 'package:wger/models/workouts/routine.dart' as _i5; -import 'package:wger/models/workouts/session.dart' as _i10; +import 'package:wger/models/workouts/session.dart' as _i11; import 'package:wger/models/workouts/slot.dart' as _i7; import 'package:wger/models/workouts/slot_entry.dart' as _i8; import 'package:wger/models/workouts/weight_unit.dart' as _i3; import 'package:wger/providers/base_provider.dart' as _i2; -import 'package:wger/providers/routines.dart' as _i11; +import 'package:wger/providers/routines.dart' as _i10; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -69,15 +69,10 @@ class _FakeBaseConfig_7 extends _i1.SmartFake implements _i9.BaseConfig { _FakeBaseConfig_7(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); } -class _FakeWorkoutSession_8 extends _i1.SmartFake implements _i10.WorkoutSession { - _FakeWorkoutSession_8(Object parent, Invocation parentInvocation) - : super(parent, parentInvocation); -} - /// A class which mocks [RoutinesProvider]. /// /// See the documentation for Mockito's code generation for more information. -class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { +class MockRoutinesProvider extends _i1.Mock implements _i10.RoutinesProvider { MockRoutinesProvider() { _i1.throwOnMissingStub(this); } @@ -101,6 +96,14 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { ) as List<_i3.WeightUnit>); + @override + List<_i11.WorkoutSession> get sessions => + (super.noSuchMethod( + Invocation.getter(#sessions), + returnValue: <_i11.WorkoutSession>[], + ) + as List<_i11.WorkoutSession>); + @override List<_i5.Routine> get items => (super.noSuchMethod( @@ -163,31 +166,23 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { returnValueForMissingStub: null, ); + @override + set sessions(List<_i11.WorkoutSession>? sessions) => super.noSuchMethod( + Invocation.setter(#sessions, sessions), + returnValueForMissingStub: null, + ); + @override bool get hasListeners => (super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false) as bool); @override - _i4.RepetitionUnit getRepetitionUnitById(int? id) => + List<_i11.WorkoutSession> getSessionsForRoutine(int? id) => (super.noSuchMethod( - Invocation.method(#getRepetitionUnitById, [id]), - returnValue: _FakeRepetitionUnit_2( - this, - Invocation.method(#getRepetitionUnitById, [id]), - ), + Invocation.method(#getSessionsForRoutine, [id]), + returnValue: <_i11.WorkoutSession>[], ) - as _i4.RepetitionUnit); - - @override - _i3.WeightUnit getWeightUnitById(int? id) => - (super.noSuchMethod( - Invocation.method(#getWeightUnitById, [id]), - returnValue: _FakeWeightUnit_1( - this, - Invocation.method(#getWeightUnitById, [id]), - ), - ) - as _i3.WeightUnit); + as List<_i11.WorkoutSession>); @override void clear() => super.noSuchMethod( @@ -241,16 +236,9 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { as _i13.Future); @override - _i13.Future setExercisesAndUnits( - List<_i14.DayData>? entries, { - Map? exercises, - }) => + _i13.Future setExercisesAndUnits(List<_i14.DayData>? entries) => (super.noSuchMethod( - Invocation.method( - #setExercisesAndUnits, - [entries], - {#exercises: exercises}, - ), + Invocation.method(#setExercisesAndUnits, [entries]), returnValue: _i13.Future.value(), returnValueForMissingStub: _i13.Future.value(), ) @@ -484,33 +472,26 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { as _i13.Future); @override - _i13.Future> fetchSessionData() => + _i13.Future> fetchSessionData() => (super.noSuchMethod( Invocation.method(#fetchSessionData, []), - returnValue: _i13.Future>.value( - <_i10.WorkoutSession>[], + returnValue: _i13.Future>.value( + <_i11.WorkoutSession>[], ), ) - as _i13.Future>); + as _i13.Future>); @override - _i13.Future<_i10.WorkoutSession> addSession( - _i10.WorkoutSession? session, - int? routineId, - ) => + _i13.Future addSession(_i11.WorkoutSession? session, int? routineId) => (super.noSuchMethod( Invocation.method(#addSession, [session, routineId]), - returnValue: _i13.Future<_i10.WorkoutSession>.value( - _FakeWorkoutSession_8( - this, - Invocation.method(#addSession, [session, routineId]), - ), - ), + returnValue: _i13.Future.value(), + returnValueForMissingStub: _i13.Future.value(), ) - as _i13.Future<_i10.WorkoutSession>); + as _i13.Future); @override - _i13.Future editSession(_i10.WorkoutSession? session) => + _i13.Future editSession(_i11.WorkoutSession? session) => (super.noSuchMethod( Invocation.method(#editSession, [session]), returnValue: _i13.Future.value(), diff --git a/test/routine/routine_logs_screen_test.dart b/test/routine/routine_logs_screen_test.dart index 3fa21de1..9fe87c52 100644 --- a/test/routine/routine_logs_screen_test.dart +++ b/test/routine/routine_logs_screen_test.dart @@ -45,7 +45,7 @@ void main() { setUp(() { routine = getTestRoutine(); - routine.sessions[0].session.date = DateTime(2025, 3, 29); + routine.sessions[0].date = DateTime(2025, 3, 29); when(mockRoutinesProvider.findById(any)).thenAnswer((_) => routine); when(mockWorkoutLogRepository.deleteLocalDrift(any)).thenAnswer((_) async => Future.value()); diff --git a/test/routine/routine_logs_screen_test.mocks.dart b/test/routine/routine_logs_screen_test.mocks.dart index fc4a931e..bc021a6e 100644 --- a/test/routine/routine_logs_screen_test.mocks.dart +++ b/test/routine/routine_logs_screen_test.mocks.dart @@ -15,12 +15,12 @@ import 'package:wger/models/workouts/day_data.dart' as _i14; import 'package:wger/models/workouts/log.dart' as _i18; import 'package:wger/models/workouts/repetition_unit.dart' as _i4; import 'package:wger/models/workouts/routine.dart' as _i5; -import 'package:wger/models/workouts/session.dart' as _i10; +import 'package:wger/models/workouts/session.dart' as _i11; import 'package:wger/models/workouts/slot.dart' as _i7; import 'package:wger/models/workouts/slot_entry.dart' as _i8; import 'package:wger/models/workouts/weight_unit.dart' as _i3; import 'package:wger/providers/base_provider.dart' as _i2; -import 'package:wger/providers/routines.dart' as _i11; +import 'package:wger/providers/routines.dart' as _i10; import 'package:wger/providers/workout_log_repository.dart' as _i17; // ignore_for_file: type=lint @@ -71,15 +71,10 @@ class _FakeBaseConfig_7 extends _i1.SmartFake implements _i9.BaseConfig { _FakeBaseConfig_7(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); } -class _FakeWorkoutSession_8 extends _i1.SmartFake implements _i10.WorkoutSession { - _FakeWorkoutSession_8(Object parent, Invocation parentInvocation) - : super(parent, parentInvocation); -} - /// A class which mocks [RoutinesProvider]. /// /// See the documentation for Mockito's code generation for more information. -class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { +class MockRoutinesProvider extends _i1.Mock implements _i10.RoutinesProvider { MockRoutinesProvider() { _i1.throwOnMissingStub(this); } @@ -103,6 +98,14 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { ) as List<_i3.WeightUnit>); + @override + List<_i11.WorkoutSession> get sessions => + (super.noSuchMethod( + Invocation.getter(#sessions), + returnValue: <_i11.WorkoutSession>[], + ) + as List<_i11.WorkoutSession>); + @override List<_i5.Routine> get items => (super.noSuchMethod( @@ -165,31 +168,23 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { returnValueForMissingStub: null, ); + @override + set sessions(List<_i11.WorkoutSession>? sessions) => super.noSuchMethod( + Invocation.setter(#sessions, sessions), + returnValueForMissingStub: null, + ); + @override bool get hasListeners => (super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false) as bool); @override - _i4.RepetitionUnit getRepetitionUnitById(int? id) => + List<_i11.WorkoutSession> getSessionsForRoutine(int? id) => (super.noSuchMethod( - Invocation.method(#getRepetitionUnitById, [id]), - returnValue: _FakeRepetitionUnit_2( - this, - Invocation.method(#getRepetitionUnitById, [id]), - ), + Invocation.method(#getSessionsForRoutine, [id]), + returnValue: <_i11.WorkoutSession>[], ) - as _i4.RepetitionUnit); - - @override - _i3.WeightUnit getWeightUnitById(int? id) => - (super.noSuchMethod( - Invocation.method(#getWeightUnitById, [id]), - returnValue: _FakeWeightUnit_1( - this, - Invocation.method(#getWeightUnitById, [id]), - ), - ) - as _i3.WeightUnit); + as List<_i11.WorkoutSession>); @override void clear() => super.noSuchMethod( @@ -243,16 +238,9 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { as _i13.Future); @override - _i13.Future setExercisesAndUnits( - List<_i14.DayData>? entries, { - Map? exercises, - }) => + _i13.Future setExercisesAndUnits(List<_i14.DayData>? entries) => (super.noSuchMethod( - Invocation.method( - #setExercisesAndUnits, - [entries], - {#exercises: exercises}, - ), + Invocation.method(#setExercisesAndUnits, [entries]), returnValue: _i13.Future.value(), returnValueForMissingStub: _i13.Future.value(), ) @@ -486,33 +474,26 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { as _i13.Future); @override - _i13.Future> fetchSessionData() => + _i13.Future> fetchSessionData() => (super.noSuchMethod( Invocation.method(#fetchSessionData, []), - returnValue: _i13.Future>.value( - <_i10.WorkoutSession>[], + returnValue: _i13.Future>.value( + <_i11.WorkoutSession>[], ), ) - as _i13.Future>); + as _i13.Future>); @override - _i13.Future<_i10.WorkoutSession> addSession( - _i10.WorkoutSession? session, - int? routineId, - ) => + _i13.Future addSession(_i11.WorkoutSession? session, int? routineId) => (super.noSuchMethod( Invocation.method(#addSession, [session, routineId]), - returnValue: _i13.Future<_i10.WorkoutSession>.value( - _FakeWorkoutSession_8( - this, - Invocation.method(#addSession, [session, routineId]), - ), - ), + returnValue: _i13.Future.value(), + returnValueForMissingStub: _i13.Future.value(), ) - as _i13.Future<_i10.WorkoutSession>); + as _i13.Future); @override - _i13.Future editSession(_i10.WorkoutSession? session) => + _i13.Future editSession(_i11.WorkoutSession? session) => (super.noSuchMethod( Invocation.method(#editSession, [session]), returnValue: _i13.Future.value(), diff --git a/test/routine/routines_screen_test.mocks.dart b/test/routine/routines_screen_test.mocks.dart index 326be476..7ed9ff11 100644 --- a/test/routine/routines_screen_test.mocks.dart +++ b/test/routine/routines_screen_test.mocks.dart @@ -14,12 +14,12 @@ import 'package:wger/models/workouts/day.dart' as _i6; import 'package:wger/models/workouts/day_data.dart' as _i14; import 'package:wger/models/workouts/repetition_unit.dart' as _i4; import 'package:wger/models/workouts/routine.dart' as _i5; -import 'package:wger/models/workouts/session.dart' as _i10; +import 'package:wger/models/workouts/session.dart' as _i11; import 'package:wger/models/workouts/slot.dart' as _i7; import 'package:wger/models/workouts/slot_entry.dart' as _i8; import 'package:wger/models/workouts/weight_unit.dart' as _i3; import 'package:wger/providers/base_provider.dart' as _i2; -import 'package:wger/providers/routines.dart' as _i11; +import 'package:wger/providers/routines.dart' as _i10; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -69,15 +69,10 @@ class _FakeBaseConfig_7 extends _i1.SmartFake implements _i9.BaseConfig { _FakeBaseConfig_7(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); } -class _FakeWorkoutSession_8 extends _i1.SmartFake implements _i10.WorkoutSession { - _FakeWorkoutSession_8(Object parent, Invocation parentInvocation) - : super(parent, parentInvocation); -} - /// A class which mocks [RoutinesProvider]. /// /// See the documentation for Mockito's code generation for more information. -class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { +class MockRoutinesProvider extends _i1.Mock implements _i10.RoutinesProvider { MockRoutinesProvider() { _i1.throwOnMissingStub(this); } @@ -101,6 +96,14 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { ) as List<_i3.WeightUnit>); + @override + List<_i11.WorkoutSession> get sessions => + (super.noSuchMethod( + Invocation.getter(#sessions), + returnValue: <_i11.WorkoutSession>[], + ) + as List<_i11.WorkoutSession>); + @override List<_i5.Routine> get items => (super.noSuchMethod( @@ -163,31 +166,23 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { returnValueForMissingStub: null, ); + @override + set sessions(List<_i11.WorkoutSession>? sessions) => super.noSuchMethod( + Invocation.setter(#sessions, sessions), + returnValueForMissingStub: null, + ); + @override bool get hasListeners => (super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false) as bool); @override - _i4.RepetitionUnit getRepetitionUnitById(int? id) => + List<_i11.WorkoutSession> getSessionsForRoutine(int? id) => (super.noSuchMethod( - Invocation.method(#getRepetitionUnitById, [id]), - returnValue: _FakeRepetitionUnit_2( - this, - Invocation.method(#getRepetitionUnitById, [id]), - ), + Invocation.method(#getSessionsForRoutine, [id]), + returnValue: <_i11.WorkoutSession>[], ) - as _i4.RepetitionUnit); - - @override - _i3.WeightUnit getWeightUnitById(int? id) => - (super.noSuchMethod( - Invocation.method(#getWeightUnitById, [id]), - returnValue: _FakeWeightUnit_1( - this, - Invocation.method(#getWeightUnitById, [id]), - ), - ) - as _i3.WeightUnit); + as List<_i11.WorkoutSession>); @override void clear() => super.noSuchMethod( @@ -241,16 +236,9 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { as _i13.Future); @override - _i13.Future setExercisesAndUnits( - List<_i14.DayData>? entries, { - Map? exercises, - }) => + _i13.Future setExercisesAndUnits(List<_i14.DayData>? entries) => (super.noSuchMethod( - Invocation.method( - #setExercisesAndUnits, - [entries], - {#exercises: exercises}, - ), + Invocation.method(#setExercisesAndUnits, [entries]), returnValue: _i13.Future.value(), returnValueForMissingStub: _i13.Future.value(), ) @@ -484,33 +472,26 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { as _i13.Future); @override - _i13.Future> fetchSessionData() => + _i13.Future> fetchSessionData() => (super.noSuchMethod( Invocation.method(#fetchSessionData, []), - returnValue: _i13.Future>.value( - <_i10.WorkoutSession>[], + returnValue: _i13.Future>.value( + <_i11.WorkoutSession>[], ), ) - as _i13.Future>); + as _i13.Future>); @override - _i13.Future<_i10.WorkoutSession> addSession( - _i10.WorkoutSession? session, - int? routineId, - ) => + _i13.Future addSession(_i11.WorkoutSession? session, int? routineId) => (super.noSuchMethod( Invocation.method(#addSession, [session, routineId]), - returnValue: _i13.Future<_i10.WorkoutSession>.value( - _FakeWorkoutSession_8( - this, - Invocation.method(#addSession, [session, routineId]), - ), - ), + returnValue: _i13.Future.value(), + returnValueForMissingStub: _i13.Future.value(), ) - as _i13.Future<_i10.WorkoutSession>); + as _i13.Future); @override - _i13.Future editSession(_i10.WorkoutSession? session) => + _i13.Future editSession(_i11.WorkoutSession? session) => (super.noSuchMethod( Invocation.method(#editSession, [session]), returnValue: _i13.Future.value(), diff --git a/test/routine/slot_entry_form_test.mocks.dart b/test/routine/slot_entry_form_test.mocks.dart index e3dd0ae3..cf22f252 100644 --- a/test/routine/slot_entry_form_test.mocks.dart +++ b/test/routine/slot_entry_form_test.mocks.dart @@ -14,12 +14,12 @@ import 'package:wger/models/workouts/day.dart' as _i6; import 'package:wger/models/workouts/day_data.dart' as _i14; import 'package:wger/models/workouts/repetition_unit.dart' as _i4; import 'package:wger/models/workouts/routine.dart' as _i5; -import 'package:wger/models/workouts/session.dart' as _i10; +import 'package:wger/models/workouts/session.dart' as _i11; import 'package:wger/models/workouts/slot.dart' as _i7; import 'package:wger/models/workouts/slot_entry.dart' as _i8; import 'package:wger/models/workouts/weight_unit.dart' as _i3; import 'package:wger/providers/base_provider.dart' as _i2; -import 'package:wger/providers/routines.dart' as _i11; +import 'package:wger/providers/routines.dart' as _i10; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -69,15 +69,10 @@ class _FakeBaseConfig_7 extends _i1.SmartFake implements _i9.BaseConfig { _FakeBaseConfig_7(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); } -class _FakeWorkoutSession_8 extends _i1.SmartFake implements _i10.WorkoutSession { - _FakeWorkoutSession_8(Object parent, Invocation parentInvocation) - : super(parent, parentInvocation); -} - /// A class which mocks [RoutinesProvider]. /// /// See the documentation for Mockito's code generation for more information. -class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { +class MockRoutinesProvider extends _i1.Mock implements _i10.RoutinesProvider { MockRoutinesProvider() { _i1.throwOnMissingStub(this); } @@ -101,6 +96,14 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { ) as List<_i3.WeightUnit>); + @override + List<_i11.WorkoutSession> get sessions => + (super.noSuchMethod( + Invocation.getter(#sessions), + returnValue: <_i11.WorkoutSession>[], + ) + as List<_i11.WorkoutSession>); + @override List<_i5.Routine> get items => (super.noSuchMethod( @@ -163,31 +166,23 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { returnValueForMissingStub: null, ); + @override + set sessions(List<_i11.WorkoutSession>? sessions) => super.noSuchMethod( + Invocation.setter(#sessions, sessions), + returnValueForMissingStub: null, + ); + @override bool get hasListeners => (super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false) as bool); @override - _i4.RepetitionUnit getRepetitionUnitById(int? id) => + List<_i11.WorkoutSession> getSessionsForRoutine(int? id) => (super.noSuchMethod( - Invocation.method(#getRepetitionUnitById, [id]), - returnValue: _FakeRepetitionUnit_2( - this, - Invocation.method(#getRepetitionUnitById, [id]), - ), + Invocation.method(#getSessionsForRoutine, [id]), + returnValue: <_i11.WorkoutSession>[], ) - as _i4.RepetitionUnit); - - @override - _i3.WeightUnit getWeightUnitById(int? id) => - (super.noSuchMethod( - Invocation.method(#getWeightUnitById, [id]), - returnValue: _FakeWeightUnit_1( - this, - Invocation.method(#getWeightUnitById, [id]), - ), - ) - as _i3.WeightUnit); + as List<_i11.WorkoutSession>); @override void clear() => super.noSuchMethod( @@ -241,16 +236,9 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { as _i13.Future); @override - _i13.Future setExercisesAndUnits( - List<_i14.DayData>? entries, { - Map? exercises, - }) => + _i13.Future setExercisesAndUnits(List<_i14.DayData>? entries) => (super.noSuchMethod( - Invocation.method( - #setExercisesAndUnits, - [entries], - {#exercises: exercises}, - ), + Invocation.method(#setExercisesAndUnits, [entries]), returnValue: _i13.Future.value(), returnValueForMissingStub: _i13.Future.value(), ) @@ -484,33 +472,26 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { as _i13.Future); @override - _i13.Future> fetchSessionData() => + _i13.Future> fetchSessionData() => (super.noSuchMethod( Invocation.method(#fetchSessionData, []), - returnValue: _i13.Future>.value( - <_i10.WorkoutSession>[], + returnValue: _i13.Future>.value( + <_i11.WorkoutSession>[], ), ) - as _i13.Future>); + as _i13.Future>); @override - _i13.Future<_i10.WorkoutSession> addSession( - _i10.WorkoutSession? session, - int? routineId, - ) => + _i13.Future addSession(_i11.WorkoutSession? session, int? routineId) => (super.noSuchMethod( Invocation.method(#addSession, [session, routineId]), - returnValue: _i13.Future<_i10.WorkoutSession>.value( - _FakeWorkoutSession_8( - this, - Invocation.method(#addSession, [session, routineId]), - ), - ), + returnValue: _i13.Future.value(), + returnValueForMissingStub: _i13.Future.value(), ) - as _i13.Future<_i10.WorkoutSession>); + as _i13.Future); @override - _i13.Future editSession(_i10.WorkoutSession? session) => + _i13.Future editSession(_i11.WorkoutSession? session) => (super.noSuchMethod( Invocation.method(#editSession, [session]), returnValue: _i13.Future.value(), diff --git a/test_data/routines.dart b/test_data/routines.dart index 3eb97aa8..e0dc2ded 100644 --- a/test_data/routines.dart +++ b/test_data/routines.dart @@ -25,7 +25,6 @@ import 'package:wger/models/workouts/log.dart'; import 'package:wger/models/workouts/repetition_unit.dart'; import 'package:wger/models/workouts/routine.dart'; import 'package:wger/models/workouts/session.dart'; -import 'package:wger/models/workouts/session_api.dart'; import 'package:wger/models/workouts/set_config_data.dart'; import 'package:wger/models/workouts/slot.dart'; import 'package:wger/models/workouts/slot_data.dart'; @@ -90,29 +89,25 @@ Routine getTestRoutine({List? exercises}) { log3.weightUnit = testWeightUnit1; log3.repetitionUnit = testRepetitionUnit1; - final session1 = WorkoutSessionApi( - session: WorkoutSession( - id: '1', - routineId: 1, - date: DateTime(2021, 5, 1), - impression: 3, - notes: 'This is a note', - timeStart: const TimeOfDay(hour: 10, minute: 0), - timeEnd: const TimeOfDay(hour: 12, minute: 34), - ), + final session1 = WorkoutSession( + id: '1', + routineId: 1, + date: DateTime(2021, 5, 1), + impression: 3, + notes: 'This is a note', + timeStart: const TimeOfDay(hour: 10, minute: 0), + timeEnd: const TimeOfDay(hour: 12, minute: 34), logs: [log1, log2], ); - final session2 = WorkoutSessionApi( - session: WorkoutSession( - id: '2', - routineId: 1, - date: DateTime(2021, 5, 2), - impression: 1, - notes: 'This is a note', - timeStart: const TimeOfDay(hour: 6, minute: 12), - timeEnd: const TimeOfDay(hour: 8, minute: 1), - ), + final session2 = WorkoutSession( + id: '2', + routineId: 1, + date: DateTime(2021, 5, 2), + impression: 1, + notes: 'This is a note', + timeStart: const TimeOfDay(hour: 6, minute: 12), + timeEnd: const TimeOfDay(hour: 8, minute: 1), logs: [log3], );