diff --git a/flatpak/scripts/flatpak_packager.dart b/flatpak/scripts/flatpak_packager.dart index 5346a605..36b5e4a0 100644 --- a/flatpak/scripts/flatpak_packager.dart +++ b/flatpak/scripts/flatpak_packager.dart @@ -18,7 +18,8 @@ void main(List arguments) async { 'You must run this script with a metadata file argument, using the --meta flag.'); } if (arguments.length == metaIndex + 1) { - throw Exception('The --meta flag must be followed by the path to the metadata file.'); + throw Exception( + 'The --meta flag must be followed by the path to the metadata file.'); } final metaFile = File(arguments[metaIndex + 1]); @@ -30,14 +31,18 @@ void main(List arguments) async { final fetchFromGithub = arguments.contains('--github'); - final outputDir = Directory('${Directory.current.path}/flatpak_generator_exports'); + final outputDir = + Directory('${Directory.current.path}/flatpak_generator_exports'); outputDir.createSync(); - final packageGenerator = PackageGenerator(inputDir: metaFile.parent, meta: meta); + final packageGenerator = + PackageGenerator(inputDir: metaFile.parent, meta: meta); packageGenerator.generatePackage( outputDir, - PackageGenerator.runningOnARM() ? CPUArchitecture.aarch64 : CPUArchitecture.x86_64, + PackageGenerator.runningOnARM() + ? CPUArchitecture.aarch64 + : CPUArchitecture.x86_64, fetchFromGithub, ); } @@ -49,8 +54,8 @@ class PackageGenerator { PackageGenerator({required this.inputDir, required this.meta}); - Future generatePackage( - Directory outputDir, CPUArchitecture arch, bool fetchReleasesFromGithub) async { + Future generatePackage(Directory outputDir, CPUArchitecture arch, + bool fetchReleasesFromGithub) async { final tempDir = outputDir.createTempSync('flutter_generator_temp'); final appId = meta.appId; @@ -85,7 +90,8 @@ class PackageGenerator { } final editedAppDataContent = AppDataModifier.replaceVersions( - origAppDataFile.readAsStringSync(), await meta.getReleases(fetchReleasesFromGithub)); + origAppDataFile.readAsStringSync(), + await meta.getReleases(fetchReleasesFromGithub)); final editedAppDataFile = File('${tempDir.path}/$appId.appdata.xml'); editedAppDataFile.writeAsStringSync(editedAppDataContent); @@ -101,17 +107,21 @@ class PackageGenerator { final destDir = Directory('${tempDir.path}/bin'); destDir.createSync(); - final baseFileName = '${meta.lowercaseAppName}-linux-${arch.flatpakArchCode}'; + final baseFileName = + '${meta.lowercaseAppName}-linux-${arch.flatpakArchCode}'; final packagePath = '${outputDir.absolute.path}/$baseFileName.tar.gz'; - Process.runSync('cp', ['-r', '${buildDir.absolute.path}/.', destDir.absolute.path]); - Process.runSync('tar', ['-czvf', packagePath, '.'], workingDirectory: tempDir.absolute.path); + Process.runSync( + 'cp', ['-r', '${buildDir.absolute.path}/.', destDir.absolute.path]); + Process.runSync('tar', ['-czvf', packagePath, '.'], + workingDirectory: tempDir.absolute.path); print('Generated $packagePath'); final preShasum = Process.runSync('shasum', ['-a', '256', packagePath]); final sha256 = preShasum.stdout.toString().split(' ').first; - final shaFile = await File('${outputDir.path}/$baseFileName.sha256').writeAsString(sha256); + final shaFile = await File('${outputDir.path}/$baseFileName.sha256') + .writeAsString(sha256); print('Generated ${shaFile.path}'); shaByArch.putIfAbsent(arch, () => sha256); @@ -128,17 +138,21 @@ class PackageGenerator { // updates releases in ${appName}.appdata.xml class AppDataModifier { - static String replaceVersions(String origAppDataContent, List versions) { - final joinedReleases = - versions.map((v) => '\t\t').join('\n'); - final releasesSection = '\n$joinedReleases\n\t'; //todo check this + static String replaceVersions( + String origAppDataContent, List versions) { + final joinedReleases = versions + .map((v) => '\t\t') + .join('\n'); + final releasesSection = + '\n$joinedReleases\n\t'; //todo check this if (origAppDataContent.contains('') .replaceFirst(RegExp(''), releasesSection) .replaceAll('<~>', '\n'); } else { - return origAppDataContent.replaceFirst('', '\n\t$releasesSection\n'); + return origAppDataContent.replaceFirst( + '', '\n\t$releasesSection\n'); } } } diff --git a/flatpak/scripts/flatpak_shared.dart b/flatpak/scripts/flatpak_shared.dart index 4e16b65f..223387d2 100644 --- a/flatpak/scripts/flatpak_shared.dart +++ b/flatpak/scripts/flatpak_shared.dart @@ -43,8 +43,9 @@ class Icon { _fileExtension = path.split('.').last; } - String getFilename(String appId) => - (type == _symbolicType) ? '$appId-symbolic.$_fileExtension' : '$appId.$_fileExtension'; + String getFilename(String appId) => (type == _symbolicType) + ? '$appId-symbolic.$_fileExtension' + : '$appId.$_fileExtension'; } class GithubReleases { @@ -73,7 +74,8 @@ class GithubReleases { final releaseJsonContent = (await http.get(Uri( scheme: 'https', host: 'api.github.com', - path: '/repos/$githubReleaseOrganization/$githubReleaseProject/releases'))) + path: + '/repos/$githubReleaseOrganization/$githubReleaseProject/releases'))) .body; final decodedJson = jsonDecode(releaseJsonContent) as List; @@ -84,8 +86,10 @@ class GithubReleases { await Future.forEach(decodedJson, (dynamic releaseDynamic) async { final releaseMap = releaseDynamic as Map; - final releaseDateAndTime = DateTime.parse(releaseMap['published_at'] as String); - final releaseDateString = releaseDateAndTime.toIso8601String().split('T').first; + final releaseDateAndTime = + DateTime.parse(releaseMap['published_at'] as String); + final releaseDateString = + releaseDateAndTime.toIso8601String().split('T').first; if (latestReleaseAssetDate == null || (latestReleaseAssetDate?.compareTo(releaseDateAndTime) == -1)) { @@ -96,7 +100,8 @@ class GithubReleases { } } - releases.add(Release(version: releaseMap['name'] as String, date: releaseDateString)); + releases.add(Release( + version: releaseMap['name'] as String, date: releaseDateString)); }); if (releases.isNotEmpty) { @@ -115,7 +120,8 @@ class GithubReleases { final downloadUrl = amMap['browser_download_url'] as String; final filename = amMap['name'] as String; final fileExtension = filename.substring(filename.indexOf('.') + 1); - final filenameWithoutExtension = filename.substring(0, filename.indexOf('.')); + final filenameWithoutExtension = + filename.substring(0, filename.indexOf('.')); final arch = filenameWithoutExtension.endsWith('aarch64') ? CPUArchitecture.aarch64 @@ -212,7 +218,8 @@ class FlatpakMeta { : _localReleases = localReleases, _localReleaseAssets = localReleaseAssets { if (githubReleaseOrganization != null && githubReleaseProject != null) { - _githubReleases = GithubReleases(githubReleaseOrganization!, githubReleaseProject!); + _githubReleases = + GithubReleases(githubReleaseOrganization!, githubReleaseProject!); } } @@ -225,13 +232,15 @@ class FlatpakMeta { return await _githubReleases!.getReleases(); } else { if (_localReleases == null) { - throw Exception('Metadata must include releases if not fetching releases from Github.'); + throw Exception( + 'Metadata must include releases if not fetching releases from Github.'); } return _localReleases!; } } - Future?> getReleaseAssets(bool fetchReleasesFromGithub) async { + Future?> getReleaseAssets( + bool fetchReleasesFromGithub) async { if (fetchReleasesFromGithub) { if (_githubReleases == null) { throw Exception( @@ -240,7 +249,8 @@ class FlatpakMeta { return _githubReleases!.getLatestReleaseAssets(); } else { if (_localReleases == null) { - throw Exception('Metadata must include releases if not fetching releases from Github.'); + throw Exception( + 'Metadata must include releases if not fetching releases from Github.'); } return _localReleaseAssets; } @@ -252,13 +262,17 @@ class FlatpakMeta { return FlatpakMeta( appId: json['appId'] as String, lowercaseAppName: json['lowercaseAppName'] as String, - githubReleaseOrganization: json['githubReleaseOrganization'] as String?, + githubReleaseOrganization: + json['githubReleaseOrganization'] as String?, githubReleaseProject: json['githubReleaseProject'] as String?, localReleases: (json['localReleases'] as List?)?.map((dynamic r) { final rMap = r as Map; - return Release(version: rMap['version'] as String, date: rMap['date'] as String); + return Release( + version: rMap['version'] as String, + date: rMap['date'] as String); }).toList(), - localReleaseAssets: (json['localReleaseAssets'] as List?)?.map((dynamic ra) { + localReleaseAssets: + (json['localReleaseAssets'] as List?)?.map((dynamic ra) { final raMap = ra as Map; final archString = raMap['arch'] as String; final arch = (archString == CPUArchitecture.x86_64.flatpakArchCode) @@ -270,8 +284,10 @@ class FlatpakMeta { throw Exception( 'Architecture must be either "${CPUArchitecture.x86_64.flatpakArchCode}" or "${CPUArchitecture.aarch64.flatpakArchCode}"'); } - final tarballPath = '${jsonFile.parent.path}/${raMap['tarballPath'] as String}'; - final preShasum = Process.runSync('shasum', ['-a', '256', tarballPath]); + final tarballPath = + '${jsonFile.parent.path}/${raMap['tarballPath'] as String}'; + final preShasum = + Process.runSync('shasum', ['-a', '256', tarballPath]); final shasum = preShasum.stdout.toString().split(' ').first; if (preShasum.exitCode != 0) { throw Exception(preShasum.stderr); @@ -286,14 +302,17 @@ class FlatpakMeta { appDataPath: json['appDataPath'] as String, desktopPath: json['desktopPath'] as String, icons: (json['icons'] as Map).entries.map((mapEntry) { - return Icon(type: mapEntry.key as String, path: mapEntry.value as String); + return Icon( + type: mapEntry.key as String, path: mapEntry.value as String); }).toList(), freedesktopRuntime: json['freedesktopRuntime'] as String, buildCommandsAfterUnpack: (json['buildCommandsAfterUnpack'] as List?) ?.map((dynamic bc) => bc as String) .toList(), extraModules: json['extraModules'] as List?, - finishArgs: (json['finishArgs'] as List).map((dynamic fa) => fa as String).toList()); + finishArgs: (json['finishArgs'] as List) + .map((dynamic fa) => fa as String) + .toList()); } catch (e) { throw Exception('Could not parse JSON file, due to this error:\n$e'); } diff --git a/flatpak/scripts/manifest_generator.dart b/flatpak/scripts/manifest_generator.dart index da27f860..6d152ba0 100644 --- a/flatpak/scripts/manifest_generator.dart +++ b/flatpak/scripts/manifest_generator.dart @@ -14,7 +14,8 @@ void main(List arguments) async { 'You must run this script with a metadata file argument, using the --meta flag.'); } if (arguments.length == metaIndex + 1) { - throw Exception('The --meta flag must be followed by the path to the metadata file.'); + throw Exception( + 'The --meta flag must be followed by the path to the metadata file.'); } final metaFile = File(arguments[metaIndex + 1]); @@ -26,17 +27,20 @@ void main(List arguments) async { final fetchFromGithub = arguments.contains('--github'); - final outputDir = Directory('${Directory.current.path}/flatpak_generator_exports'); + final outputDir = + Directory('${Directory.current.path}/flatpak_generator_exports'); outputDir.createSync(); final manifestGenerator = FlatpakManifestGenerator(meta); - final manifestContent = await manifestGenerator.generateFlatpakManifest(fetchFromGithub); + final manifestContent = + await manifestGenerator.generateFlatpakManifest(fetchFromGithub); final manifestPath = '${outputDir.path}/${meta.appId}.json'; final manifestFile = File(manifestPath); manifestFile.writeAsStringSync(manifestContent); print('Generated $manifestPath'); - final flathubJsonContent = await manifestGenerator.generateFlathubJson(fetchFromGithub); + final flathubJsonContent = + await manifestGenerator.generateFlathubJson(fetchFromGithub); if (flathubJsonContent != null) { final flathubJsonPath = '${outputDir.path}/flathub.json'; final flathubJsonFile = File(flathubJsonPath); @@ -115,7 +119,8 @@ class FlatpakManifestGenerator { const encoder = JsonEncoder.withIndent(' '); - final onlyArchListInput = fetchFromGithub ? _githubArchSupport! : _localArchSupport!; + final onlyArchListInput = + fetchFromGithub ? _githubArchSupport! : _localArchSupport!; final onlyArchList = List.empty(growable: true); for (final e in onlyArchListInput.entries) { @@ -131,7 +136,8 @@ class FlatpakManifestGenerator { } } - void _lazyGenerateArchSupportMap(bool fetchFromGithub, List assets) { + void _lazyGenerateArchSupportMap( + bool fetchFromGithub, List assets) { if (fetchFromGithub) { if (_githubArchSupport == null) { _githubArchSupport = { diff --git a/integration_test/1_dashboard.dart b/integration_test/1_dashboard.dart index 7abfcf45..1282fc5c 100644 --- a/integration_test/1_dashboard.dart +++ b/integration_test/1_dashboard.dart @@ -34,17 +34,20 @@ Widget createDashboardScreen({locale = 'en'}) { } ] }; - when(mockWorkoutProvider.fetchSessionData()).thenAnswer((a) => Future.value(logs)); + when(mockWorkoutProvider.fetchSessionData()) + .thenAnswer((a) => Future.value(logs)); final mockNutritionProvider = MockNutritionPlansProvider(); - when(mockNutritionProvider.currentPlan).thenAnswer((realInvocation) => getNutritionalPlan()); + when(mockNutritionProvider.currentPlan) + .thenAnswer((realInvocation) => getNutritionalPlan()); when(mockNutritionProvider.items).thenReturn([getNutritionalPlan()]); final mockWeightProvider = MockBodyWeightProvider(); when(mockWeightProvider.items).thenReturn(getWeightEntries()); final mockMeasurementProvider = MockMeasurementProvider(); - when(mockMeasurementProvider.categories).thenReturn(getMeasurementCategories()); + when(mockMeasurementProvider.categories) + .thenReturn(getMeasurementCategories()); return MultiProvider( providers: [ diff --git a/integration_test/2_workout.dart b/integration_test/2_workout.dart index b36d5265..88492fb2 100644 --- a/integration_test/2_workout.dart +++ b/integration_test/2_workout.dart @@ -15,7 +15,8 @@ Widget createWorkoutDetailScreen({locale = 'en'}) { final mockWorkoutProvider = MockWorkoutPlansProvider(); final workout = getWorkout(); when(mockWorkoutProvider.activePlan).thenReturn(workout); - when(mockWorkoutProvider.fetchAndSetWorkoutPlanFull(1)).thenAnswer((_) => Future.value(workout)); + when(mockWorkoutProvider.fetchAndSetWorkoutPlanFull(1)) + .thenAnswer((_) => Future.value(workout)); return MultiProvider( providers: [ diff --git a/integration_test/3_gym_mode.dart b/integration_test/3_gym_mode.dart index e31e8ca1..4ee0f812 100644 --- a/integration_test/3_gym_mode.dart +++ b/integration_test/3_gym_mode.dart @@ -20,8 +20,10 @@ Widget createGymModeScreen({locale = 'en'}) { final mockExerciseProvider = MockExercisesProvider(); - when(mockExerciseProvider.findExerciseBaseById(1)).thenReturn(bases[0]); // bench press - when(mockExerciseProvider.findExerciseBaseById(6)).thenReturn(bases[5]); // side raises + when(mockExerciseProvider.findExerciseBaseById(1)) + .thenReturn(bases[0]); // bench press + when(mockExerciseProvider.findExerciseBaseById(6)) + .thenReturn(bases[5]); // side raises //when(mockExerciseProvider.findExerciseBaseById(2)).thenReturn(bases[1]); // crunches //when(mockExerciseProvider.findExerciseBaseById(3)).thenReturn(bases[2]); // dead lift diff --git a/integration_test/4_measurements.dart b/integration_test/4_measurements.dart index c745d6c3..f9fe8bc8 100644 --- a/integration_test/4_measurements.dart +++ b/integration_test/4_measurements.dart @@ -11,7 +11,8 @@ import '../test_data/measurements.dart'; Widget createMeasurementScreen({locale = 'en'}) { final mockMeasurementProvider = MockMeasurementProvider(); - when(mockMeasurementProvider.categories).thenReturn(getMeasurementCategories()); + when(mockMeasurementProvider.categories) + .thenReturn(getMeasurementCategories()); return MultiProvider( providers: [ diff --git a/integration_test/app_test.dart b/integration_test/app_test.dart index f6b04b1d..966a7354 100644 --- a/integration_test/app_test.dart +++ b/integration_test/app_test.dart @@ -11,12 +11,14 @@ import '4_measurements.dart'; import '5_nutritional_plan.dart'; import '6_weight.dart'; -Future takeScreenshot(tester, binding, String language, String name) async { +Future takeScreenshot( + tester, binding, String language, String name) async { if (Platform.isAndroid) { await binding.convertFlutterSurfaceToImage(); await tester.pumpAndSettle(); } - final filename = 'fastlane/metadata/android/$language/images/phoneScreenshots/$name.png'; + final filename = + 'fastlane/metadata/android/$language/images/phoneScreenshots/$name.png'; await binding.takeScreenshot(filename); } @@ -60,8 +62,10 @@ void main() { await takeScreenshot(tester, binding, language, '01 - dashboard'); }); - testWidgets('workout detail screen - $language', (WidgetTester tester) async { - await tester.pumpWidget(createWorkoutDetailScreen(locale: languageCode)); + testWidgets('workout detail screen - $language', + (WidgetTester tester) async { + await tester + .pumpWidget(createWorkoutDetailScreen(locale: languageCode)); await tester.tap(find.byType(TextButton)); await tester.pumpAndSettle(); await takeScreenshot(tester, binding, language, '02 - workout detail'); @@ -74,19 +78,24 @@ void main() { await takeScreenshot(tester, binding, language, '03 - gym mode'); }); - testWidgets('measurement screen - $language', (WidgetTester tester) async { + testWidgets('measurement screen - $language', + (WidgetTester tester) async { await tester.pumpWidget(createMeasurementScreen(locale: languageCode)); await takeScreenshot(tester, binding, language, '04 - measurements'); }); - testWidgets('nutritional plan detail - $language', (WidgetTester tester) async { - await tester.pumpWidget(createNutritionalPlanScreen(locale: languageCode)); + testWidgets('nutritional plan detail - $language', + (WidgetTester tester) async { + await tester + .pumpWidget(createNutritionalPlanScreen(locale: languageCode)); await tester.tap(find.byType(TextButton)); await tester.pumpAndSettle(); - await takeScreenshot(tester, binding, language, '05 - nutritional plan'); + await takeScreenshot( + tester, binding, language, '05 - nutritional plan'); }); - testWidgets('body weight screen - $language', (WidgetTester tester) async { + testWidgets('body weight screen - $language', + (WidgetTester tester) async { await tester.pumpWidget(createWeightScreen(locale: languageCode)); await tester.pumpAndSettle(); await takeScreenshot(tester, binding, language, '06 - weight'); diff --git a/lib/core/locator.dart b/lib/core/locator.dart new file mode 100644 index 00000000..917fa7b8 --- /dev/null +++ b/lib/core/locator.dart @@ -0,0 +1,28 @@ +import 'dart:developer'; + +import 'package:get_it/get_it.dart'; +import 'package:wger/database/exercise_DB/exercise_database.dart'; + +final locator = GetIt.asNewInstance(); + +class ServiceLocator { + factory ServiceLocator() => _singleton; + + ServiceLocator._internal(); + + static final ServiceLocator _singleton = ServiceLocator._internal(); + + Future _initDB() async { + final exerciseDB = ExerciseDatabase(); + locator.registerSingleton(exerciseDB); + } + + Future configure() async { + try { + await _initDB(); + } catch (e, _) { + log(e.toString()); + rethrow; + } + } +} diff --git a/lib/database/exercise_DB/exercise_database.dart b/lib/database/exercise_DB/exercise_database.dart new file mode 100644 index 00000000..0a913b80 --- /dev/null +++ b/lib/database/exercise_DB/exercise_database.dart @@ -0,0 +1,48 @@ +import 'dart:io'; + +import 'package:drift/drift.dart'; +import 'package:drift/native.dart'; +import 'package:path/path.dart' as p; +import 'package:path_provider/path_provider.dart'; +import 'package:wger/database/exercise_DB/type_converters.dart'; +import 'package:wger/models/exercises/base.dart'; +import 'package:wger/models/exercises/category.dart'; +import 'package:wger/models/exercises/equipment.dart'; +import 'package:wger/models/exercises/language.dart'; +import 'package:wger/models/exercises/muscle.dart'; +import 'package:wger/models/exercises/variation.dart'; + +part 'exercise_database.g.dart'; + +@DataClassName('ExerciseTable') +class ExerciseTableItems extends Table { + IntColumn get id => integer().autoIncrement()(); + TextColumn get exercisebase => + text().map(const ExerciseBaseConverter()).nullable()(); + TextColumn get muscle => text().map(const MuscleConverter()).nullable()(); + TextColumn get category => + text().map(const ExerciseCategoryConverter()).nullable()(); + TextColumn get variation => + text().map(const VariationConverter()).nullable()(); + TextColumn get language => text().map(const LanguageConverter()).nullable()(); + TextColumn get equipment => + text().map(const EquipmentConverter()).nullable()(); + DateTimeColumn get expiresIn => dateTime().nullable()(); +} + +@DriftDatabase(tables: [ExerciseTableItems]) +class ExerciseDatabase extends _$ExerciseDatabase { + ExerciseDatabase() : super(_openConnection()); + + @override + // TODO: implement schemaVersion + int get schemaVersion => 1; +} + +LazyDatabase _openConnection() { + return LazyDatabase(() async { + final dbFolder = await getApplicationDocumentsDirectory(); + final file = File(p.join(dbFolder.path, 'db.sqlite')); + return NativeDatabase.createInBackground(file); + }); +} diff --git a/lib/database/exercise_DB/exercise_database.g.dart b/lib/database/exercise_DB/exercise_database.g.dart new file mode 100644 index 00000000..636c8d93 --- /dev/null +++ b/lib/database/exercise_DB/exercise_database.g.dart @@ -0,0 +1,471 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'exercise_database.dart'; + +// ignore_for_file: type=lint +class $ExerciseTableItemsTable extends ExerciseTableItems + with TableInfo<$ExerciseTableItemsTable, ExerciseTable> { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + $ExerciseTableItemsTable(this.attachedDatabase, [this._alias]); + static const VerificationMeta _idMeta = const VerificationMeta('id'); + @override + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, false, + hasAutoIncrement: true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: + GeneratedColumn.constraintIsAlways('PRIMARY KEY AUTOINCREMENT')); + static const VerificationMeta _exercisebaseMeta = + const VerificationMeta('exercisebase'); + @override + late final GeneratedColumnWithTypeConverter + exercisebase = GeneratedColumn('exercisebase', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false) + .withConverter( + $ExerciseTableItemsTable.$converterexercisebasen); + static const VerificationMeta _muscleMeta = const VerificationMeta('muscle'); + @override + late final GeneratedColumnWithTypeConverter muscle = + GeneratedColumn('muscle', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false) + .withConverter($ExerciseTableItemsTable.$convertermusclen); + static const VerificationMeta _categoryMeta = + const VerificationMeta('category'); + @override + late final GeneratedColumnWithTypeConverter + category = GeneratedColumn('category', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false) + .withConverter( + $ExerciseTableItemsTable.$convertercategoryn); + static const VerificationMeta _variationMeta = + const VerificationMeta('variation'); + @override + late final GeneratedColumnWithTypeConverter variation = + GeneratedColumn('variation', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false) + .withConverter( + $ExerciseTableItemsTable.$convertervariationn); + static const VerificationMeta _languageMeta = + const VerificationMeta('language'); + @override + late final GeneratedColumnWithTypeConverter language = + GeneratedColumn('language', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false) + .withConverter( + $ExerciseTableItemsTable.$converterlanguagen); + static const VerificationMeta _equipmentMeta = + const VerificationMeta('equipment'); + @override + late final GeneratedColumnWithTypeConverter equipment = + GeneratedColumn('equipment', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false) + .withConverter( + $ExerciseTableItemsTable.$converterequipmentn); + static const VerificationMeta _expiresInMeta = + const VerificationMeta('expiresIn'); + @override + late final GeneratedColumn expiresIn = GeneratedColumn( + 'expires_in', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + @override + List get $columns => [ + id, + exercisebase, + muscle, + category, + variation, + language, + equipment, + expiresIn + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'exercise_table_items'; + @override + VerificationContext validateIntegrity(Insertable instance, + {bool isInserting = false}) { + final context = VerificationContext(); + final data = instance.toColumns(true); + if (data.containsKey('id')) { + context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); + } + context.handle(_exercisebaseMeta, const VerificationResult.success()); + context.handle(_muscleMeta, const VerificationResult.success()); + context.handle(_categoryMeta, const VerificationResult.success()); + context.handle(_variationMeta, const VerificationResult.success()); + context.handle(_languageMeta, const VerificationResult.success()); + context.handle(_equipmentMeta, const VerificationResult.success()); + if (data.containsKey('expires_in')) { + context.handle(_expiresInMeta, + expiresIn.isAcceptableOrUnknown(data['expires_in']!, _expiresInMeta)); + } + return context; + } + + @override + Set get $primaryKey => {id}; + @override + ExerciseTable map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return ExerciseTable( + id: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}id'])!, + exercisebase: $ExerciseTableItemsTable.$converterexercisebasen.fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}exercisebase'])), + muscle: $ExerciseTableItemsTable.$convertermusclen.fromSql( + attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}muscle'])), + category: $ExerciseTableItemsTable.$convertercategoryn.fromSql( + attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}category'])), + variation: $ExerciseTableItemsTable.$convertervariationn.fromSql( + attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}variation'])), + language: $ExerciseTableItemsTable.$converterlanguagen.fromSql( + attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}language'])), + equipment: $ExerciseTableItemsTable.$converterequipmentn.fromSql( + attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}equipment'])), + expiresIn: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}expires_in']), + ); + } + + @override + $ExerciseTableItemsTable createAlias(String alias) { + return $ExerciseTableItemsTable(attachedDatabase, alias); + } + + static TypeConverter $converterexercisebase = + const ExerciseBaseConverter(); + static TypeConverter $converterexercisebasen = + NullAwareTypeConverter.wrap($converterexercisebase); + static TypeConverter $convertermuscle = + const MuscleConverter(); + static TypeConverter $convertermusclen = + NullAwareTypeConverter.wrap($convertermuscle); + static TypeConverter $convertercategory = + const ExerciseCategoryConverter(); + static TypeConverter $convertercategoryn = + NullAwareTypeConverter.wrap($convertercategory); + static TypeConverter $convertervariation = + const VariationConverter(); + static TypeConverter $convertervariationn = + NullAwareTypeConverter.wrap($convertervariation); + static TypeConverter $converterlanguage = + const LanguageConverter(); + static TypeConverter $converterlanguagen = + NullAwareTypeConverter.wrap($converterlanguage); + static TypeConverter $converterequipment = + const EquipmentConverter(); + static TypeConverter $converterequipmentn = + NullAwareTypeConverter.wrap($converterequipment); +} + +class ExerciseTable extends DataClass implements Insertable { + final int id; + final ExerciseBase? exercisebase; + final Muscle? muscle; + final ExerciseCategory? category; + final Variation? variation; + final Language? language; + final Equipment? equipment; + final DateTime? expiresIn; + const ExerciseTable( + {required this.id, + this.exercisebase, + this.muscle, + this.category, + this.variation, + this.language, + this.equipment, + this.expiresIn}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + if (!nullToAbsent || exercisebase != null) { + final converter = $ExerciseTableItemsTable.$converterexercisebasen; + map['exercisebase'] = Variable(converter.toSql(exercisebase)); + } + if (!nullToAbsent || muscle != null) { + final converter = $ExerciseTableItemsTable.$convertermusclen; + map['muscle'] = Variable(converter.toSql(muscle)); + } + if (!nullToAbsent || category != null) { + final converter = $ExerciseTableItemsTable.$convertercategoryn; + map['category'] = Variable(converter.toSql(category)); + } + if (!nullToAbsent || variation != null) { + final converter = $ExerciseTableItemsTable.$convertervariationn; + map['variation'] = Variable(converter.toSql(variation)); + } + if (!nullToAbsent || language != null) { + final converter = $ExerciseTableItemsTable.$converterlanguagen; + map['language'] = Variable(converter.toSql(language)); + } + if (!nullToAbsent || equipment != null) { + final converter = $ExerciseTableItemsTable.$converterequipmentn; + map['equipment'] = Variable(converter.toSql(equipment)); + } + if (!nullToAbsent || expiresIn != null) { + map['expires_in'] = Variable(expiresIn); + } + return map; + } + + ExerciseTableItemsCompanion toCompanion(bool nullToAbsent) { + return ExerciseTableItemsCompanion( + id: Value(id), + exercisebase: exercisebase == null && nullToAbsent + ? const Value.absent() + : Value(exercisebase), + muscle: + muscle == null && nullToAbsent ? const Value.absent() : Value(muscle), + category: category == null && nullToAbsent + ? const Value.absent() + : Value(category), + variation: variation == null && nullToAbsent + ? const Value.absent() + : Value(variation), + language: language == null && nullToAbsent + ? const Value.absent() + : Value(language), + equipment: equipment == null && nullToAbsent + ? const Value.absent() + : Value(equipment), + expiresIn: expiresIn == null && nullToAbsent + ? const Value.absent() + : Value(expiresIn), + ); + } + + factory ExerciseTable.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return ExerciseTable( + id: serializer.fromJson(json['id']), + exercisebase: serializer.fromJson(json['exercisebase']), + muscle: serializer.fromJson(json['muscle']), + category: serializer.fromJson(json['category']), + variation: serializer.fromJson(json['variation']), + language: serializer.fromJson(json['language']), + equipment: serializer.fromJson(json['equipment']), + expiresIn: serializer.fromJson(json['expiresIn']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'exercisebase': serializer.toJson(exercisebase), + 'muscle': serializer.toJson(muscle), + 'category': serializer.toJson(category), + 'variation': serializer.toJson(variation), + 'language': serializer.toJson(language), + 'equipment': serializer.toJson(equipment), + 'expiresIn': serializer.toJson(expiresIn), + }; + } + + ExerciseTable copyWith( + {int? id, + Value exercisebase = const Value.absent(), + Value muscle = const Value.absent(), + Value category = const Value.absent(), + Value variation = const Value.absent(), + Value language = const Value.absent(), + Value equipment = const Value.absent(), + Value expiresIn = const Value.absent()}) => + ExerciseTable( + id: id ?? this.id, + exercisebase: + exercisebase.present ? exercisebase.value : this.exercisebase, + muscle: muscle.present ? muscle.value : this.muscle, + category: category.present ? category.value : this.category, + variation: variation.present ? variation.value : this.variation, + language: language.present ? language.value : this.language, + equipment: equipment.present ? equipment.value : this.equipment, + expiresIn: expiresIn.present ? expiresIn.value : this.expiresIn, + ); + @override + String toString() { + return (StringBuffer('ExerciseTable(') + ..write('id: $id, ') + ..write('exercisebase: $exercisebase, ') + ..write('muscle: $muscle, ') + ..write('category: $category, ') + ..write('variation: $variation, ') + ..write('language: $language, ') + ..write('equipment: $equipment, ') + ..write('expiresIn: $expiresIn') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(id, exercisebase, muscle, category, variation, + language, equipment, expiresIn); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is ExerciseTable && + other.id == this.id && + other.exercisebase == this.exercisebase && + other.muscle == this.muscle && + other.category == this.category && + other.variation == this.variation && + other.language == this.language && + other.equipment == this.equipment && + other.expiresIn == this.expiresIn); +} + +class ExerciseTableItemsCompanion extends UpdateCompanion { + final Value id; + final Value exercisebase; + final Value muscle; + final Value category; + final Value variation; + final Value language; + final Value equipment; + final Value expiresIn; + const ExerciseTableItemsCompanion({ + this.id = const Value.absent(), + this.exercisebase = const Value.absent(), + this.muscle = const Value.absent(), + this.category = const Value.absent(), + this.variation = const Value.absent(), + this.language = const Value.absent(), + this.equipment = const Value.absent(), + this.expiresIn = const Value.absent(), + }); + ExerciseTableItemsCompanion.insert({ + this.id = const Value.absent(), + this.exercisebase = const Value.absent(), + this.muscle = const Value.absent(), + this.category = const Value.absent(), + this.variation = const Value.absent(), + this.language = const Value.absent(), + this.equipment = const Value.absent(), + this.expiresIn = const Value.absent(), + }); + static Insertable custom({ + Expression? id, + Expression? exercisebase, + Expression? muscle, + Expression? category, + Expression? variation, + Expression? language, + Expression? equipment, + Expression? expiresIn, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (exercisebase != null) 'exercisebase': exercisebase, + if (muscle != null) 'muscle': muscle, + if (category != null) 'category': category, + if (variation != null) 'variation': variation, + if (language != null) 'language': language, + if (equipment != null) 'equipment': equipment, + if (expiresIn != null) 'expires_in': expiresIn, + }); + } + + ExerciseTableItemsCompanion copyWith( + {Value? id, + Value? exercisebase, + Value? muscle, + Value? category, + Value? variation, + Value? language, + Value? equipment, + Value? expiresIn}) { + return ExerciseTableItemsCompanion( + id: id ?? this.id, + exercisebase: exercisebase ?? this.exercisebase, + muscle: muscle ?? this.muscle, + category: category ?? this.category, + variation: variation ?? this.variation, + language: language ?? this.language, + equipment: equipment ?? this.equipment, + expiresIn: expiresIn ?? this.expiresIn, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (exercisebase.present) { + final converter = $ExerciseTableItemsTable.$converterexercisebasen; + + map['exercisebase'] = + Variable(converter.toSql(exercisebase.value)); + } + if (muscle.present) { + final converter = $ExerciseTableItemsTable.$convertermusclen; + + map['muscle'] = Variable(converter.toSql(muscle.value)); + } + if (category.present) { + final converter = $ExerciseTableItemsTable.$convertercategoryn; + + map['category'] = Variable(converter.toSql(category.value)); + } + if (variation.present) { + final converter = $ExerciseTableItemsTable.$convertervariationn; + + map['variation'] = Variable(converter.toSql(variation.value)); + } + if (language.present) { + final converter = $ExerciseTableItemsTable.$converterlanguagen; + + map['language'] = Variable(converter.toSql(language.value)); + } + if (equipment.present) { + final converter = $ExerciseTableItemsTable.$converterequipmentn; + + map['equipment'] = Variable(converter.toSql(equipment.value)); + } + if (expiresIn.present) { + map['expires_in'] = Variable(expiresIn.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('ExerciseTableItemsCompanion(') + ..write('id: $id, ') + ..write('exercisebase: $exercisebase, ') + ..write('muscle: $muscle, ') + ..write('category: $category, ') + ..write('variation: $variation, ') + ..write('language: $language, ') + ..write('equipment: $equipment, ') + ..write('expiresIn: $expiresIn') + ..write(')')) + .toString(); + } +} + +abstract class _$ExerciseDatabase extends GeneratedDatabase { + _$ExerciseDatabase(QueryExecutor e) : super(e); + late final $ExerciseTableItemsTable exerciseTableItems = + $ExerciseTableItemsTable(this); + @override + Iterable> get allTables => + allSchemaEntities.whereType>(); + @override + List get allSchemaEntities => [exerciseTableItems]; +} diff --git a/lib/database/exercise_DB/type_converters.dart b/lib/database/exercise_DB/type_converters.dart new file mode 100644 index 00000000..63b60093 --- /dev/null +++ b/lib/database/exercise_DB/type_converters.dart @@ -0,0 +1,95 @@ +import 'dart:convert'; + +import 'package:drift/drift.dart'; +import 'package:wger/models/exercises/base.dart'; +import 'package:wger/models/exercises/category.dart'; +import 'package:wger/models/exercises/equipment.dart'; +import 'package:wger/models/exercises/language.dart'; +import 'package:wger/models/exercises/muscle.dart'; +import 'package:wger/models/exercises/variation.dart'; + +class ExerciseBaseConverter extends TypeConverter { + const ExerciseBaseConverter(); + + @override + ExerciseBase fromSql(String fromDb) { + return ExerciseBase.fromJson(json.decode(fromDb) as Map); + } + + @override + String toSql(ExerciseBase value) { + return json.encode(value.toJson()); + } +} + +class MuscleConverter extends TypeConverter { + const MuscleConverter(); + + @override + Muscle fromSql(String fromDb) { + return Muscle.fromJson(json.decode(fromDb) as Map); + } + + @override + String toSql(Muscle value) { + return json.encode(value.toJson()); + } +} + +class EquipmentConverter extends TypeConverter { + const EquipmentConverter(); + + @override + Equipment fromSql(String fromDb) { + return Equipment.fromJson(json.decode(fromDb) as Map); + } + + @override + String toSql(Equipment value) { + return json.encode(value.toJson()); + } +} + +class ExerciseCategoryConverter + extends TypeConverter { + const ExerciseCategoryConverter(); + + @override + ExerciseCategory fromSql(String fromDb) { + return ExerciseCategory.fromJson( + json.decode(fromDb) as Map); + } + + @override + String toSql(ExerciseCategory value) { + return json.encode(value.toJson()); + } +} + +class LanguageConverter extends TypeConverter { + const LanguageConverter(); + + @override + Language fromSql(String fromDb) { + return Language.fromJson(json.decode(fromDb) as Map); + } + + @override + String toSql(Language value) { + return json.encode(value.toJson()); + } +} + +class VariationConverter extends TypeConverter { + const VariationConverter(); + + @override + Variation fromSql(String fromDb) { + return Variation.fromJson(json.decode(fromDb) as Map); + } + + @override + String toSql(Variation value) { + return json.encode(value.toJson()); + } +} diff --git a/lib/exceptions/http_exception.dart b/lib/exceptions/http_exception.dart index b442e34a..777efa2b 100644 --- a/lib/exceptions/http_exception.dart +++ b/lib/exceptions/http_exception.dart @@ -26,7 +26,10 @@ class WgerHttpException implements Exception { /// JSON. Will use the response as-is if it fails. WgerHttpException(dynamic responseBody) { if (responseBody == null) { - errors = {'unknown_error': 'An unknown error occurred, no further information available'}; + errors = { + 'unknown_error': + 'An unknown error occurred, no further information available' + }; } else { try { errors = {'unknown_error': json.decode(responseBody)}; diff --git a/lib/helpers/charts.dart b/lib/helpers/charts.dart index 64a0b6e8..9b758437 100644 --- a/lib/helpers/charts.dart +++ b/lib/helpers/charts.dart @@ -1,5 +1,7 @@ double chartGetInterval(DateTime first, DateTime last, {divider = 3}) { final dayDiff = last.difference(first); - return dayDiff.inMilliseconds == 0 ? 1000 : dayDiff.inMilliseconds.abs() / divider; + return dayDiff.inMilliseconds == 0 + ? 1000 + : dayDiff.inMilliseconds.abs() / divider; } diff --git a/lib/helpers/exercises/forms.dart b/lib/helpers/exercises/forms.dart index 25d92bde..6e05d93c 100644 --- a/lib/helpers/exercises/forms.dart +++ b/lib/helpers/exercises/forms.dart @@ -14,7 +14,8 @@ String? validateName(String? name, BuildContext context) { } if (name.length < MIN_CHARS_NAME || name.length > MAX_CHARS_NAME) { - return AppLocalizations.of(context).enterCharacters(MIN_CHARS_NAME, MAX_CHARS_NAME); + return AppLocalizations.of(context) + .enterCharacters(MIN_CHARS_NAME, MAX_CHARS_NAME); } return null; @@ -26,7 +27,8 @@ String? validateDescription(String? name, BuildContext context) { } if (name.length < MIN_CHARS_DESCRIPTION) { - return AppLocalizations.of(context).enterMinCharacters(MIN_CHARS_DESCRIPTION); + return AppLocalizations.of(context) + .enterMinCharacters(MIN_CHARS_DESCRIPTION); } return null; diff --git a/lib/helpers/json.dart b/lib/helpers/json.dart index 7bc3ba44..291414a7 100644 --- a/lib/helpers/json.dart +++ b/lib/helpers/json.dart @@ -60,5 +60,6 @@ String? timeToString(TimeOfDay? time) { if (time == null) { return null; } - return const DefaultMaterialLocalizations().formatTimeOfDay(time, alwaysUse24HourFormat: true); + return const DefaultMaterialLocalizations() + .formatTimeOfDay(time, alwaysUse24HourFormat: true); } diff --git a/lib/helpers/misc.dart b/lib/helpers/misc.dart index 26c34cc2..4c24a6df 100644 --- a/lib/helpers/misc.dart +++ b/lib/helpers/misc.dart @@ -42,7 +42,9 @@ String repText( // rather "8 repetitions". If there is weight we want to output "8 x 50kg", // since the repetitions are implied. If other units are used, we always // print them - if (repetitionUnitObj.id != REP_UNIT_REPETITIONS || weight == 0 || weight == null) { + if (repetitionUnitObj.id != REP_UNIT_REPETITIONS || + weight == 0 || + weight == null) { out.add(repetitionUnitObj.name); } } diff --git a/lib/helpers/platform.dart b/lib/helpers/platform.dart index 82b0484d..6d857378 100644 --- a/lib/helpers/platform.dart +++ b/lib/helpers/platform.dart @@ -21,4 +21,5 @@ import 'package:flutter/foundation.dart'; // Note: we're not using Platform.isAndroid etc because during tests these would+ // always take the value of the current platform. TargetPlatform is always Android // during tests, but can be changed to check for correct UI switches, etc. -final isDesktop = [TargetPlatform.linux, TargetPlatform.macOS].contains(defaultTargetPlatform); +final isDesktop = [TargetPlatform.linux, TargetPlatform.macOS] + .contains(defaultTargetPlatform); diff --git a/lib/helpers/ui.dart b/lib/helpers/ui.dart index 626e42e6..39dfabe5 100644 --- a/lib/helpers/ui.dart +++ b/lib/helpers/ui.dart @@ -49,7 +49,8 @@ void showErrorDialog(dynamic exception, BuildContext context) { ); } -void showHttpExceptionErrorDialog(WgerHttpException exception, BuildContext context) async { +void showHttpExceptionErrorDialog( + WgerHttpException exception, BuildContext context) async { log('showHttpExceptionErrorDialog: '); log(exception.toString()); log('-------------------'); @@ -58,7 +59,8 @@ void showHttpExceptionErrorDialog(WgerHttpException exception, BuildContext cont for (final key in exception.errors!.keys) { // Error headers // Ensure that the error heading first letter is capitalized. - final String errorHeaderMsg = key[0].toUpperCase() + key.substring(1, key.length); + final String errorHeaderMsg = + key[0].toUpperCase() + key.substring(1, key.length); errorList.add( Text( @@ -129,7 +131,8 @@ dynamic showDeleteDialog( ), onPressed: () { exerciseData[exercise]!.removeWhere((el) => el.id == log.id); - Provider.of(context, listen: false).deleteLog( + Provider.of(context, listen: false) + .deleteLog( log, ); diff --git a/lib/main.dart b/lib/main.dart index f7b2657d..9071fbf5 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -16,11 +16,18 @@ * along with this program. If not, see . */ +import 'package:drift/drift.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_zxing/flutter_zxing.dart'; import 'package:provider/provider.dart'; +import 'package:wger/core/locator.dart'; +import 'package:wger/database/exercise_DB/exercise_database.dart'; +import 'package:wger/models/exercises/base.dart'; +import 'package:wger/models/exercises/category.dart'; +import 'package:wger/models/exercises/equipment.dart'; +import 'package:wger/models/exercises/muscle.dart'; import 'package:wger/providers/add_exercise.dart'; import 'package:wger/providers/base_provider.dart'; import 'package:wger/providers/body_weight.dart'; @@ -53,11 +60,13 @@ import 'package:wger/widgets/core/about.dart'; import 'providers/auth.dart'; -void main() { +void main() async { zx.setLogEnabled(kDebugMode); // Needs to be called before runApp WidgetsFlutterBinding.ensureInitialized(); + // Locator to initialize exerciseDB + await ServiceLocator().configure(); // Application runApp(MyApp()); } @@ -72,19 +81,21 @@ class MyApp extends StatelessWidget { create: (ctx) => AuthProvider(), ), ChangeNotifierProxyProvider( - create: (context) => ExercisesProvider( - WgerBaseProvider(Provider.of(context, listen: false))), + create: (context) => ExercisesProvider(WgerBaseProvider( + Provider.of(context, listen: false))), update: (context, base, previous) => previous ?? ExercisesProvider(WgerBaseProvider(base)), ), - ChangeNotifierProxyProvider2( + ChangeNotifierProxyProvider2( create: (context) => WorkoutPlansProvider( WgerBaseProvider(Provider.of(context, listen: false)), Provider.of(context, listen: false), [], ), update: (context, auth, exercises, previous) => - previous ?? WorkoutPlansProvider(WgerBaseProvider(auth), exercises, []), + previous ?? + WorkoutPlansProvider(WgerBaseProvider(auth), exercises, []), ), ChangeNotifierProxyProvider( create: (context) => NutritionPlansProvider( @@ -105,7 +116,8 @@ class MyApp extends StatelessWidget { create: (context) => UserProvider( WgerBaseProvider(Provider.of(context, listen: false)), ), - update: (context, base, previous) => previous ?? UserProvider(WgerBaseProvider(base)), + update: (context, base, previous) => + previous ?? UserProvider(WgerBaseProvider(base)), ), ChangeNotifierProxyProvider( create: (context) => BodyWeightProvider( @@ -115,9 +127,10 @@ class MyApp extends StatelessWidget { previous ?? BodyWeightProvider(WgerBaseProvider(base)), ), ChangeNotifierProxyProvider( - create: (context) => - GalleryProvider(Provider.of(context, listen: false), []), - update: (context, auth, previous) => previous ?? GalleryProvider(auth, []), + create: (context) => GalleryProvider( + Provider.of(context, listen: false), []), + update: (context, auth, previous) => + previous ?? GalleryProvider(auth, []), ), ChangeNotifierProxyProvider( create: (context) => AddExerciseProvider( @@ -136,7 +149,8 @@ class MyApp extends StatelessWidget { : FutureBuilder( future: auth.tryAutoLogin(), builder: (ctx, authResultSnapshot) => - authResultSnapshot.connectionState == ConnectionState.waiting + authResultSnapshot.connectionState == + ConnectionState.waiting ? SplashScreen() : AuthScreen(), ), @@ -146,8 +160,10 @@ class MyApp extends StatelessWidget { GalleryScreen.routeName: (ctx) => const GalleryScreen(), GymModeScreen.routeName: (ctx) => GymModeScreen(), HomeTabsScreen.routeName: (ctx) => HomeTabsScreen(), - MeasurementCategoriesScreen.routeName: (ctx) => MeasurementCategoriesScreen(), - MeasurementEntriesScreen.routeName: (ctx) => MeasurementEntriesScreen(), + MeasurementCategoriesScreen.routeName: (ctx) => + MeasurementCategoriesScreen(), + MeasurementEntriesScreen.routeName: (ctx) => + MeasurementEntriesScreen(), NutritionScreen.routeName: (ctx) => NutritionScreen(), NutritionalDiaryScreen.routeName: (ctx) => NutritionalDiaryScreen(), NutritionalPlanScreen.routeName: (ctx) => NutritionalPlanScreen(), @@ -155,7 +171,8 @@ class MyApp extends StatelessWidget { WorkoutPlanScreen.routeName: (ctx) => WorkoutPlanScreen(), WorkoutPlansScreen.routeName: (ctx) => WorkoutPlansScreen(), ExercisesScreen.routeName: (ctx) => const ExercisesScreen(), - ExerciseDetailScreen.routeName: (ctx) => const ExerciseDetailScreen(), + ExerciseDetailScreen.routeName: (ctx) => + const ExerciseDetailScreen(), AddExerciseScreen.routeName: (ctx) => const AddExerciseScreen(), AboutPage.routeName: (ctx) => const AboutPage(), }, diff --git a/lib/models/body_weight/weight_entry.dart b/lib/models/body_weight/weight_entry.dart index 1fbb5dbf..4ab714e7 100644 --- a/lib/models/body_weight/weight_entry.dart +++ b/lib/models/body_weight/weight_entry.dart @@ -45,6 +45,7 @@ class WeightEntry { } // Boilerplate - factory WeightEntry.fromJson(Map json) => _$WeightEntryFromJson(json); + factory WeightEntry.fromJson(Map json) => + _$WeightEntryFromJson(json); Map toJson() => _$WeightEntryToJson(this); } diff --git a/lib/models/body_weight/weight_entry.g.dart b/lib/models/body_weight/weight_entry.g.dart index d1152d20..60ee02c9 100644 --- a/lib/models/body_weight/weight_entry.g.dart +++ b/lib/models/body_weight/weight_entry.g.dart @@ -18,7 +18,8 @@ WeightEntry _$WeightEntryFromJson(Map json) { ); } -Map _$WeightEntryToJson(WeightEntry instance) => { +Map _$WeightEntryToJson(WeightEntry instance) => + { 'id': instance.id, 'weight': numToString(instance.weight), 'date': toDate(instance.date), diff --git a/lib/models/exercises/base.dart b/lib/models/exercises/base.dart index 5c1519ce..9b3eea3b 100644 --- a/lib/models/exercises/base.dart +++ b/lib/models/exercises/base.dart @@ -49,7 +49,7 @@ class ExerciseBase extends Equatable { late int categoryId; @JsonKey(includeFromJson: false, includeToJson: false) - late final ExerciseCategory category; + ExerciseCategory? category; @JsonKey(required: true, name: 'muscles') List musclesIds = []; @@ -158,7 +158,8 @@ class ExerciseBase extends Equatable { } // Boilerplate - factory ExerciseBase.fromJson(Map json) => _$ExerciseBaseFromJson(json); + factory ExerciseBase.fromJson(Map json) => + _$ExerciseBaseFromJson(json); Map toJson() => _$ExerciseBaseToJson(this); diff --git a/lib/models/exercises/base.g.dart b/lib/models/exercises/base.g.dart index d9f7c36e..b57b9ebf 100644 --- a/lib/models/exercises/base.g.dart +++ b/lib/models/exercises/base.g.dart @@ -24,18 +24,26 @@ ExerciseBase _$ExerciseBaseFromJson(Map json) { return ExerciseBase( id: json['id'] as int?, uuid: json['uuid'] as String?, - created: json['created'] == null ? null : DateTime.parse(json['created'] as String), - lastUpdate: json['last_update'] == null ? null : DateTime.parse(json['last_update'] as String), + created: json['created'] == null + ? null + : DateTime.parse(json['created'] as String), + lastUpdate: json['last_update'] == null + ? null + : DateTime.parse(json['last_update'] as String), variationId: json['variations'] as int?, ) ..categoryId = json['category'] as int - ..musclesIds = (json['muscles'] as List).map((e) => e as int).toList() - ..musclesSecondaryIds = - (json['muscles_secondary'] as List).map((e) => e as int).toList() - ..equipmentIds = (json['equipment'] as List).map((e) => e as int).toList(); + ..musclesIds = + (json['muscles'] as List).map((e) => e as int).toList() + ..musclesSecondaryIds = (json['muscles_secondary'] as List) + .map((e) => e as int) + .toList() + ..equipmentIds = + (json['equipment'] as List).map((e) => e as int).toList(); } -Map _$ExerciseBaseToJson(ExerciseBase instance) => { +Map _$ExerciseBaseToJson(ExerciseBase instance) => + { 'id': instance.id, 'uuid': instance.uuid, 'variations': instance.variationId, diff --git a/lib/models/exercises/category.dart b/lib/models/exercises/category.dart index 5e3d9304..13a25645 100644 --- a/lib/models/exercises/category.dart +++ b/lib/models/exercises/category.dart @@ -40,7 +40,8 @@ class ExerciseCategory extends Equatable { } // Boilerplate - factory ExerciseCategory.fromJson(Map json) => _$ExerciseCategoryFromJson(json); + factory ExerciseCategory.fromJson(Map json) => + _$ExerciseCategoryFromJson(json); Map toJson() => _$ExerciseCategoryToJson(this); @override diff --git a/lib/models/exercises/category.g.dart b/lib/models/exercises/category.g.dart index 915120d1..19383107 100644 --- a/lib/models/exercises/category.g.dart +++ b/lib/models/exercises/category.g.dart @@ -17,7 +17,8 @@ ExerciseCategory _$ExerciseCategoryFromJson(Map json) { ); } -Map _$ExerciseCategoryToJson(ExerciseCategory instance) => { +Map _$ExerciseCategoryToJson(ExerciseCategory instance) => + { 'id': instance.id, 'name': instance.name, }; diff --git a/lib/models/exercises/comment.dart b/lib/models/exercises/comment.dart index f55efa66..7c4d49df 100644 --- a/lib/models/exercises/comment.dart +++ b/lib/models/exercises/comment.dart @@ -38,6 +38,7 @@ class Comment { }); // Boilerplate - factory Comment.fromJson(Map json) => _$CommentFromJson(json); + factory Comment.fromJson(Map json) => + _$CommentFromJson(json); Map toJson() => _$CommentToJson(this); } diff --git a/lib/models/exercises/equipment.dart b/lib/models/exercises/equipment.dart index 09ca9356..7e420e93 100644 --- a/lib/models/exercises/equipment.dart +++ b/lib/models/exercises/equipment.dart @@ -35,7 +35,8 @@ class Equipment extends Equatable { }); // Boilerplate - factory Equipment.fromJson(Map json) => _$EquipmentFromJson(json); + factory Equipment.fromJson(Map json) => + _$EquipmentFromJson(json); Map toJson() => _$EquipmentToJson(this); @override diff --git a/lib/models/exercises/image.dart b/lib/models/exercises/image.dart index 148da3e6..899b0e5b 100644 --- a/lib/models/exercises/image.dart +++ b/lib/models/exercises/image.dart @@ -46,7 +46,8 @@ class ExerciseImage { }); // Boilerplate - factory ExerciseImage.fromJson(Map json) => _$ExerciseImageFromJson(json); + factory ExerciseImage.fromJson(Map json) => + _$ExerciseImageFromJson(json); Map toJson() => _$ExerciseImageToJson(this); @override diff --git a/lib/models/exercises/image.g.dart b/lib/models/exercises/image.g.dart index 6ef7c62e..1240dc38 100644 --- a/lib/models/exercises/image.g.dart +++ b/lib/models/exercises/image.g.dart @@ -20,7 +20,8 @@ ExerciseImage _$ExerciseImageFromJson(Map json) { ); } -Map _$ExerciseImageToJson(ExerciseImage instance) => { +Map _$ExerciseImageToJson(ExerciseImage instance) => + { 'id': instance.id, 'uuid': instance.uuid, 'exercise_base': instance.exerciseBaseId, diff --git a/lib/models/exercises/language.dart b/lib/models/exercises/language.dart index 23f04856..3e72986d 100644 --- a/lib/models/exercises/language.dart +++ b/lib/models/exercises/language.dart @@ -39,7 +39,8 @@ class Language extends Equatable { }); // Boilerplate - factory Language.fromJson(Map json) => _$LanguageFromJson(json); + factory Language.fromJson(Map json) => + _$LanguageFromJson(json); Map toJson() => _$LanguageToJson(this); @override diff --git a/lib/models/exercises/muscle.dart b/lib/models/exercises/muscle.dart index 25ad7abc..aea716c7 100644 --- a/lib/models/exercises/muscle.dart +++ b/lib/models/exercises/muscle.dart @@ -52,7 +52,8 @@ class Muscle extends Equatable { List get props => [id, name, isFront]; String nameTranslated(BuildContext context) { - return name + (nameEn.isNotEmpty ? ' (${getTranslation(nameEn, context)})' : ''); + return name + + (nameEn.isNotEmpty ? ' (${getTranslation(nameEn, context)})' : ''); } @override diff --git a/lib/models/exercises/translation.dart b/lib/models/exercises/translation.dart index 60e452e9..84508337 100644 --- a/lib/models/exercises/translation.dart +++ b/lib/models/exercises/translation.dart @@ -86,7 +86,8 @@ class Translation extends Equatable { } // Boilerplate - factory Translation.fromJson(Map json) => _$TranslationFromJson(json); + factory Translation.fromJson(Map json) => + _$TranslationFromJson(json); Map toJson() => _$TranslationToJson(this); diff --git a/lib/models/exercises/translation.g.dart b/lib/models/exercises/translation.g.dart index 642c2e7f..d4052547 100644 --- a/lib/models/exercises/translation.g.dart +++ b/lib/models/exercises/translation.g.dart @@ -22,14 +22,17 @@ Translation _$TranslationFromJson(Map json) { return Translation( id: json['id'] as int?, uuid: json['uuid'] as String?, - created: json['created'] == null ? null : DateTime.parse(json['created'] as String), + created: json['created'] == null + ? null + : DateTime.parse(json['created'] as String), name: json['name'] as String, description: json['description'] as String, baseId: json['exercise_base'] as int?, )..languageId = json['language'] as int; } -Map _$TranslationToJson(Translation instance) => { +Map _$TranslationToJson(Translation instance) => + { 'id': instance.id, 'uuid': instance.uuid, 'language': instance.languageId, diff --git a/lib/models/exercises/variation.dart b/lib/models/exercises/variation.dart index 304452c7..5aace375 100644 --- a/lib/models/exercises/variation.dart +++ b/lib/models/exercises/variation.dart @@ -30,6 +30,7 @@ class Variation { }); // Boilerplate - factory Variation.fromJson(Map json) => _$VariationFromJson(json); + factory Variation.fromJson(Map json) => + _$VariationFromJson(json); Map toJson() => _$VariationToJson(this); } diff --git a/lib/models/measurements/measurement_category.g.dart b/lib/models/measurements/measurement_category.g.dart index eb887b2e..ef4ebcd3 100644 --- a/lib/models/measurements/measurement_category.g.dart +++ b/lib/models/measurements/measurement_category.g.dart @@ -22,7 +22,9 @@ MeasurementCategory _$MeasurementCategoryFromJson(Map json) { ); } -Map _$MeasurementCategoryToJson(MeasurementCategory instance) => { +Map _$MeasurementCategoryToJson( + MeasurementCategory instance) => + { 'id': instance.id, 'name': instance.name, 'unit': instance.unit, diff --git a/lib/models/measurements/measurement_entry.dart b/lib/models/measurements/measurement_entry.dart index dd24b05e..04c27ddd 100644 --- a/lib/models/measurements/measurement_entry.dart +++ b/lib/models/measurements/measurement_entry.dart @@ -29,7 +29,12 @@ class MeasurementEntry extends Equatable { required this.notes, }); - MeasurementEntry copyWith({int? id, int? category, DateTime? date, num? value, String? notes}) => + MeasurementEntry copyWith( + {int? id, + int? category, + DateTime? date, + num? value, + String? notes}) => MeasurementEntry( id: id ?? this.id, category: category ?? this.category, @@ -39,7 +44,8 @@ class MeasurementEntry extends Equatable { ); // Boilerplate - factory MeasurementEntry.fromJson(Map json) => _$MeasurementEntryFromJson(json); + factory MeasurementEntry.fromJson(Map json) => + _$MeasurementEntryFromJson(json); Map toJson() => _$MeasurementEntryToJson(this); diff --git a/lib/models/measurements/measurement_entry.g.dart b/lib/models/measurements/measurement_entry.g.dart index 7f6e346a..4b096960 100644 --- a/lib/models/measurements/measurement_entry.g.dart +++ b/lib/models/measurements/measurement_entry.g.dart @@ -20,7 +20,8 @@ MeasurementEntry _$MeasurementEntryFromJson(Map json) { ); } -Map _$MeasurementEntryToJson(MeasurementEntry instance) => { +Map _$MeasurementEntryToJson(MeasurementEntry instance) => + { 'id': instance.id, 'category': instance.category, 'date': toDate(instance.date), diff --git a/lib/models/nutrition/image.dart b/lib/models/nutrition/image.dart index bc23f0e4..bc1271f7 100644 --- a/lib/models/nutrition/image.dart +++ b/lib/models/nutrition/image.dart @@ -81,7 +81,8 @@ class IngredientImage { }); // Boilerplate - factory IngredientImage.fromJson(Map json) => _$IngredientImageFromJson(json); + factory IngredientImage.fromJson(Map json) => + _$IngredientImageFromJson(json); Map toJson() => _$IngredientImageToJson(this); } diff --git a/lib/models/nutrition/image.g.dart b/lib/models/nutrition/image.g.dart index 0bd0771d..39272d16 100644 --- a/lib/models/nutrition/image.g.dart +++ b/lib/models/nutrition/image.g.dart @@ -38,7 +38,8 @@ IngredientImage _$IngredientImageFromJson(Map json) { ); } -Map _$IngredientImageToJson(IngredientImage instance) => { +Map _$IngredientImageToJson(IngredientImage instance) => + { 'id': instance.id, 'uuid': instance.uuid, 'ingredient_id': instance.ingredientId, diff --git a/lib/models/nutrition/ingredient.dart b/lib/models/nutrition/ingredient.dart index 59a3460f..e4d66528 100644 --- a/lib/models/nutrition/ingredient.dart +++ b/lib/models/nutrition/ingredient.dart @@ -46,7 +46,11 @@ class Ingredient { final num carbohydrates; /// g per 100g of product - @JsonKey(required: true, fromJson: stringToNum, toJson: numToString, name: 'carbohydrates_sugar') + @JsonKey( + required: true, + fromJson: stringToNum, + toJson: numToString, + name: 'carbohydrates_sugar') final num carbohydratesSugar; /// g per 100g of product @@ -58,7 +62,11 @@ class Ingredient { final num fat; /// g per 100g of product - @JsonKey(required: true, fromJson: stringToNum, toJson: numToString, name: 'fat_saturated') + @JsonKey( + required: true, + fromJson: stringToNum, + toJson: numToString, + name: 'fat_saturated') final num fatSaturated; /// g per 100g of product @@ -88,7 +96,8 @@ class Ingredient { }); // Boilerplate - factory Ingredient.fromJson(Map json) => _$IngredientFromJson(json); + factory Ingredient.fromJson(Map json) => + _$IngredientFromJson(json); Map toJson() => _$IngredientToJson(this); } diff --git a/lib/models/nutrition/ingredient.g.dart b/lib/models/nutrition/ingredient.g.dart index d0ea8cfa..fcff133a 100644 --- a/lib/models/nutrition/ingredient.g.dart +++ b/lib/models/nutrition/ingredient.g.dart @@ -43,7 +43,8 @@ Ingredient _$IngredientFromJson(Map json) { ); } -Map _$IngredientToJson(Ingredient instance) => { +Map _$IngredientToJson(Ingredient instance) => + { 'id': instance.id, 'code': instance.code, 'name': instance.name, diff --git a/lib/models/nutrition/ingredient_weight_unit.g.dart b/lib/models/nutrition/ingredient_weight_unit.g.dart index f147a2ee..74b1f101 100644 --- a/lib/models/nutrition/ingredient_weight_unit.g.dart +++ b/lib/models/nutrition/ingredient_weight_unit.g.dart @@ -13,14 +13,16 @@ IngredientWeightUnit _$IngredientWeightUnitFromJson(Map json) { ); return IngredientWeightUnit( id: json['id'] as int, - weightUnit: WeightUnit.fromJson(json['weight_unit'] as Map), + weightUnit: + WeightUnit.fromJson(json['weight_unit'] as Map), ingredient: Ingredient.fromJson(json['ingredient'] as Map), grams: json['grams'] as int, amount: (json['amount'] as num).toDouble(), ); } -Map _$IngredientWeightUnitToJson(IngredientWeightUnit instance) => +Map _$IngredientWeightUnitToJson( + IngredientWeightUnit instance) => { 'id': instance.id, 'weight_unit': instance.weightUnit, diff --git a/lib/models/nutrition/log.dart b/lib/models/nutrition/log.dart index 8a30650d..45ed5618 100644 --- a/lib/models/nutrition/log.dart +++ b/lib/models/nutrition/log.dart @@ -67,7 +67,8 @@ class Log { this.comment, }); - Log.fromMealItem(MealItem mealItem, this.planId, this.mealId, [DateTime? dateTime]) { + Log.fromMealItem(MealItem mealItem, this.planId, this.mealId, + [DateTime? dateTime]) { ingredientId = mealItem.ingredientId; ingredientObj = mealItem.ingredientObj; weightUnitId = mealItem.weightUnitId; @@ -86,8 +87,9 @@ class Log { final out = NutritionalValues(); //final weight = amount; - final weight = - weightUnitObj == null ? amount : amount * weightUnitObj!.amount * weightUnitObj!.grams; + final weight = weightUnitObj == null + ? amount + : amount * weightUnitObj!.amount * weightUnitObj!.grams; out.energy = ingredientObj.energy * weight / 100; out.protein = ingredientObj.protein * weight / 100; diff --git a/lib/models/nutrition/log.g.dart b/lib/models/nutrition/log.g.dart index 61690155..39068768 100644 --- a/lib/models/nutrition/log.g.dart +++ b/lib/models/nutrition/log.g.dart @@ -9,7 +9,14 @@ part of 'log.dart'; Log _$LogFromJson(Map json) { $checkKeys( json, - requiredKeys: const ['id', 'plan', 'datetime', 'ingredient', 'weight_unit', 'amount'], + requiredKeys: const [ + 'id', + 'plan', + 'datetime', + 'ingredient', + 'weight_unit', + 'amount' + ], ); return Log( id: json['id'] as int?, diff --git a/lib/models/nutrition/meal.dart b/lib/models/nutrition/meal.dart index a89330bb..04f50064 100644 --- a/lib/models/nutrition/meal.dart +++ b/lib/models/nutrition/meal.dart @@ -38,7 +38,11 @@ class Meal { @JsonKey(name: 'name') late String name; - @JsonKey(includeFromJson: false, includeToJson: false, name: 'meal_items', defaultValue: []) + @JsonKey( + includeFromJson: false, + includeToJson: false, + name: 'meal_items', + defaultValue: []) List mealItems = []; Meal({ diff --git a/lib/models/nutrition/meal_item.dart b/lib/models/nutrition/meal_item.dart index c6ae6773..90dce8d5 100644 --- a/lib/models/nutrition/meal_item.dart +++ b/lib/models/nutrition/meal_item.dart @@ -67,7 +67,8 @@ class MealItem { MealItem.empty(); // Boilerplate - factory MealItem.fromJson(Map json) => _$MealItemFromJson(json); + factory MealItem.fromJson(Map json) => + _$MealItemFromJson(json); Map toJson() => _$MealItemToJson(this); diff --git a/lib/models/nutrition/nutritional_plan.dart b/lib/models/nutrition/nutritional_plan.dart index 978304c2..267eed8c 100644 --- a/lib/models/nutrition/nutritional_plan.dart +++ b/lib/models/nutrition/nutritional_plan.dart @@ -62,12 +62,15 @@ class NutritionalPlan { } // Boilerplate - factory NutritionalPlan.fromJson(Map json) => _$NutritionalPlanFromJson(json); + factory NutritionalPlan.fromJson(Map json) => + _$NutritionalPlanFromJson(json); Map toJson() => _$NutritionalPlanToJson(this); String getLabel(BuildContext context) { - return description != '' ? description : AppLocalizations.of(context).nutritionalPlan; + return description != '' + ? description + : AppLocalizations.of(context).nutritionalPlan; } /// Calculations @@ -86,7 +89,9 @@ class NutritionalPlan { final now = DateTime.now(); final today = DateTime(now.year, now.month, now.day); - return logEntriesValues.containsKey(today) ? logEntriesValues[today]! : NutritionalValues(); + return logEntriesValues.containsKey(today) + ? logEntriesValues[today]! + : NutritionalValues(); } NutritionalValues get nutritionalValues7DayAvg { @@ -109,9 +114,12 @@ class NutritionalPlan { /// Calculates the percentage each macro nutrient adds to the total energy BaseNutritionalValues energyPercentage(NutritionalValues values) { return BaseNutritionalValues( - values.protein > 0 ? ((values.protein * ENERGY_PROTEIN * 100) / values.energy) : 0, + values.protein > 0 + ? ((values.protein * ENERGY_PROTEIN * 100) / values.energy) + : 0, values.carbohydrates > 0 - ? ((values.carbohydrates * ENERGY_CARBOHYDRATES * 100) / values.energy) + ? ((values.carbohydrates * ENERGY_CARBOHYDRATES * 100) / + values.energy) : 0, values.fat > 0 ? ((values.fat * ENERGY_FAT * 100) / values.energy) : 0, ); @@ -131,7 +139,8 @@ class NutritionalPlan { Map get logEntriesValues { final out = {}; for (final log in logs) { - final date = DateTime(log.datetime.year, log.datetime.month, log.datetime.day); + final date = + DateTime(log.datetime.year, log.datetime.month, log.datetime.day); if (!out.containsKey(date)) { out[date] = NutritionalValues(); @@ -156,7 +165,8 @@ class NutritionalPlan { final List out = []; for (final log in logs) { final dateKey = DateTime(date.year, date.month, date.day); - final logKey = DateTime(log.datetime.year, log.datetime.month, log.datetime.day); + final logKey = + DateTime(log.datetime.year, log.datetime.month, log.datetime.day); if (dateKey == logKey) { out.add(log); @@ -173,7 +183,8 @@ class NutritionalPlan { final List out = []; for (final meal in meals) { for (final mealItem in meal.mealItems) { - final ingredientInList = out.where((e) => e.ingredientId == mealItem.ingredientId); + final ingredientInList = + out.where((e) => e.ingredientId == mealItem.ingredientId); if (ingredientInList.isEmpty) { out.add(mealItem); diff --git a/lib/models/nutrition/nutritional_plan.g.dart b/lib/models/nutrition/nutritional_plan.g.dart index 661a9f47..9b10d8a5 100644 --- a/lib/models/nutrition/nutritional_plan.g.dart +++ b/lib/models/nutrition/nutritional_plan.g.dart @@ -18,7 +18,8 @@ NutritionalPlan _$NutritionalPlanFromJson(Map json) { ); } -Map _$NutritionalPlanToJson(NutritionalPlan instance) => { +Map _$NutritionalPlanToJson(NutritionalPlan instance) => + { 'id': instance.id, 'description': instance.description, 'creation_date': toDate(instance.creationDate), diff --git a/lib/models/nutrition/nutritional_values.dart b/lib/models/nutrition/nutritional_values.dart index 902fbd32..e06ca42d 100644 --- a/lib/models/nutrition/nutritional_values.dart +++ b/lib/models/nutrition/nutritional_values.dart @@ -89,8 +89,8 @@ class NutritionalValues { @override //ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => Object.hash( - energy, protein, carbohydrates, carbohydratesSugar, fat, fatSaturated, fibres, sodium); + int get hashCode => Object.hash(energy, protein, carbohydrates, + carbohydratesSugar, fat, fatSaturated, fibres, sodium); } class BaseNutritionalValues { diff --git a/lib/models/nutrition/weight_unit.dart b/lib/models/nutrition/weight_unit.dart index 3bcab86e..b943d607 100644 --- a/lib/models/nutrition/weight_unit.dart +++ b/lib/models/nutrition/weight_unit.dart @@ -34,6 +34,7 @@ class WeightUnit { }); // Boilerplate - factory WeightUnit.fromJson(Map json) => _$WeightUnitFromJson(json); + factory WeightUnit.fromJson(Map json) => + _$WeightUnitFromJson(json); Map toJson() => _$WeightUnitToJson(this); } diff --git a/lib/models/nutrition/weight_unit.g.dart b/lib/models/nutrition/weight_unit.g.dart index 6f2b9607..74e1f0cf 100644 --- a/lib/models/nutrition/weight_unit.g.dart +++ b/lib/models/nutrition/weight_unit.g.dart @@ -17,7 +17,8 @@ WeightUnit _$WeightUnitFromJson(Map json) { ); } -Map _$WeightUnitToJson(WeightUnit instance) => { +Map _$WeightUnitToJson(WeightUnit instance) => + { 'id': instance.id, 'name': instance.name, }; diff --git a/lib/models/user/profile.dart b/lib/models/user/profile.dart index 5bb5335b..76eda4b2 100644 --- a/lib/models/user/profile.dart +++ b/lib/models/user/profile.dart @@ -42,6 +42,7 @@ class Profile { }); // Boilerplate - factory Profile.fromJson(Map json) => _$ProfileFromJson(json); + factory Profile.fromJson(Map json) => + _$ProfileFromJson(json); Map toJson() => _$ProfileToJson(this); } diff --git a/lib/models/user/profile.g.dart b/lib/models/user/profile.g.dart index fc05b9cf..d9147ebe 100644 --- a/lib/models/user/profile.g.dart +++ b/lib/models/user/profile.g.dart @@ -9,7 +9,12 @@ part of 'profile.dart'; Profile _$ProfileFromJson(Map json) { $checkKeys( json, - requiredKeys: const ['username', 'email_verified', 'is_trustworthy', 'email'], + requiredKeys: const [ + 'username', + 'email_verified', + 'is_trustworthy', + 'email' + ], ); return Profile( username: json['username'] as String, diff --git a/lib/models/workouts/day.dart b/lib/models/workouts/day.dart index 88b5954c..625308ca 100644 --- a/lib/models/workouts/day.dart +++ b/lib/models/workouts/day.dart @@ -75,7 +75,8 @@ class Day { final now = DateTime.now(); final firstDayOfWeek = now.subtract(Duration(days: now.weekday)); - return DateFormat(DateFormat.WEEKDAY, locale).format(firstDayOfWeek.add(Duration(days: day))); + return DateFormat(DateFormat.WEEKDAY, locale) + .format(firstDayOfWeek.add(Duration(days: day))); } // Boilerplate diff --git a/lib/models/workouts/log.dart b/lib/models/workouts/log.dart index 99cf2b53..7a6c328b 100644 --- a/lib/models/workouts/log.dart +++ b/lib/models/workouts/log.dart @@ -111,7 +111,8 @@ class Log { /// Returns the text representation for a single setting, used in the gym mode String get singleLogRepTextNoNl { - return repText(reps, repetitionUnitObj, weight, weightUnitObj, rir).replaceAll('\n', ''); + return repText(reps, repetitionUnitObj, weight, weightUnitObj, rir) + .replaceAll('\n', ''); } /// Override the equals operator @@ -132,8 +133,8 @@ class Log { @override //ignore: avoid_equals_and_hash_code_on_mutable_classes - int get hashCode => - Object.hash(exerciseBaseId, weight, weightUnitId, reps, repetitionUnitId, rir); + int get hashCode => Object.hash( + exerciseBaseId, weight, weightUnitId, reps, repetitionUnitId, rir); //@override //int get hashCode => super.hashCode; diff --git a/lib/models/workouts/repetition_unit.dart b/lib/models/workouts/repetition_unit.dart index a732c9a1..feedcce6 100644 --- a/lib/models/workouts/repetition_unit.dart +++ b/lib/models/workouts/repetition_unit.dart @@ -34,6 +34,7 @@ class RepetitionUnit { }); // Boilerplate - factory RepetitionUnit.fromJson(Map json) => _$RepetitionUnitFromJson(json); + factory RepetitionUnit.fromJson(Map json) => + _$RepetitionUnitFromJson(json); Map toJson() => _$RepetitionUnitToJson(this); } diff --git a/lib/models/workouts/repetition_unit.g.dart b/lib/models/workouts/repetition_unit.g.dart index 33e6a815..115dc338 100644 --- a/lib/models/workouts/repetition_unit.g.dart +++ b/lib/models/workouts/repetition_unit.g.dart @@ -17,7 +17,8 @@ RepetitionUnit _$RepetitionUnitFromJson(Map json) { ); } -Map _$RepetitionUnitToJson(RepetitionUnit instance) => { +Map _$RepetitionUnitToJson(RepetitionUnit instance) => + { 'id': instance.id, 'name': instance.name, }; diff --git a/lib/models/workouts/session.dart b/lib/models/workouts/session.dart index 1c2aea7b..27aee13f 100644 --- a/lib/models/workouts/session.dart +++ b/lib/models/workouts/session.dart @@ -41,10 +41,18 @@ class WorkoutSession { @JsonKey(required: false, defaultValue: '') late String notes; - @JsonKey(required: true, name: 'time_start', toJson: timeToString, fromJson: stringToTime) + @JsonKey( + required: true, + name: 'time_start', + toJson: timeToString, + fromJson: stringToTime) late TimeOfDay timeStart; - @JsonKey(required: true, name: 'time_end', toJson: timeToString, fromJson: stringToTime) + @JsonKey( + required: true, + name: 'time_end', + toJson: timeToString, + fromJson: stringToTime) late TimeOfDay timeEnd; WorkoutSession(); @@ -65,7 +73,8 @@ class WorkoutSession { } // Boilerplate - factory WorkoutSession.fromJson(Map json) => _$WorkoutSessionFromJson(json); + factory WorkoutSession.fromJson(Map json) => + _$WorkoutSessionFromJson(json); Map toJson() => _$WorkoutSessionToJson(this); String? get impressionAsString { diff --git a/lib/models/workouts/session.g.dart b/lib/models/workouts/session.g.dart index 79f4fee4..e16affad 100644 --- a/lib/models/workouts/session.g.dart +++ b/lib/models/workouts/session.g.dart @@ -9,7 +9,14 @@ part of 'session.dart'; WorkoutSession _$WorkoutSessionFromJson(Map json) { $checkKeys( json, - requiredKeys: const ['id', 'workout', 'date', 'impression', 'time_start', 'time_end'], + requiredKeys: const [ + 'id', + 'workout', + 'date', + 'impression', + 'time_start', + 'time_end' + ], ); return WorkoutSession() ..id = json['id'] as int? @@ -21,7 +28,8 @@ WorkoutSession _$WorkoutSessionFromJson(Map json) { ..timeEnd = stringToTime(json['time_end'] as String?); } -Map _$WorkoutSessionToJson(WorkoutSession instance) => { +Map _$WorkoutSessionToJson(WorkoutSession instance) => + { 'id': instance.id, 'workout': instance.workoutId, 'date': toDate(instance.date), diff --git a/lib/models/workouts/set.dart b/lib/models/workouts/set.dart index 9d9838c8..f65c9222 100644 --- a/lib/models/workouts/set.dart +++ b/lib/models/workouts/set.dart @@ -114,7 +114,9 @@ class Set { /// Returns all settings for the given exercise List filterSettingsByExercise(ExerciseBase exerciseBase) { - return settings.where((element) => element.exerciseBaseId == exerciseBase.id).toList(); + return settings + .where((element) => element.exerciseBaseId == exerciseBase.id) + .toList(); } /// Returns a list with all repetitions for the given exercise diff --git a/lib/models/workouts/setting.dart b/lib/models/workouts/setting.dart index e9db2c19..26104864 100644 --- a/lib/models/workouts/setting.dart +++ b/lib/models/workouts/setting.dart @@ -29,7 +29,18 @@ part 'setting.g.dart'; class Setting { /// Allowed RiR values. This list must be kept in sync with RIR_OPTIONS in the /// wger server - static const POSSIBLE_RIR_VALUES = ['', '0', '0.5', '1', '1.5', '2', '2.5', '3', '3.5', '4']; + static const POSSIBLE_RIR_VALUES = [ + '', + '0', + '0.5', + '1', + '1.5', + '2', + '2.5', + '3', + '3.5', + '4' + ]; static const DEFAULT_RIR = ''; @JsonKey(required: true) @@ -88,7 +99,8 @@ class Setting { Setting.empty(); // Boilerplate - factory Setting.fromJson(Map json) => _$SettingFromJson(json); + factory Setting.fromJson(Map json) => + _$SettingFromJson(json); Map toJson() => _$SettingToJson(this); diff --git a/lib/models/workouts/weight_unit.dart b/lib/models/workouts/weight_unit.dart index 82463c75..edb94b1f 100644 --- a/lib/models/workouts/weight_unit.dart +++ b/lib/models/workouts/weight_unit.dart @@ -34,6 +34,7 @@ class WeightUnit { }); // Boilerplate - factory WeightUnit.fromJson(Map json) => _$WeightUnitFromJson(json); + factory WeightUnit.fromJson(Map json) => + _$WeightUnitFromJson(json); Map toJson() => _$WeightUnitToJson(this); } diff --git a/lib/models/workouts/weight_unit.g.dart b/lib/models/workouts/weight_unit.g.dart index 6f2b9607..74e1f0cf 100644 --- a/lib/models/workouts/weight_unit.g.dart +++ b/lib/models/workouts/weight_unit.g.dart @@ -17,7 +17,8 @@ WeightUnit _$WeightUnitFromJson(Map json) { ); } -Map _$WeightUnitToJson(WeightUnit instance) => { +Map _$WeightUnitToJson(WeightUnit instance) => + { 'id': instance.id, 'name': instance.name, }; diff --git a/lib/models/workouts/workout_plan.dart b/lib/models/workouts/workout_plan.dart index 3619eda8..586db249 100644 --- a/lib/models/workouts/workout_plan.dart +++ b/lib/models/workouts/workout_plan.dart @@ -63,7 +63,8 @@ class WorkoutPlan { } // Boilerplate - factory WorkoutPlan.fromJson(Map json) => _$WorkoutPlanFromJson(json); + factory WorkoutPlan.fromJson(Map json) => + _$WorkoutPlanFromJson(json); Map toJson() => _$WorkoutPlanToJson(this); @@ -73,8 +74,11 @@ class WorkoutPlan { /// means here that the values are the same, i.e. logs with the same weight, /// reps, etc. are considered equal. Workout ID, Log ID and date are not /// considered. - List filterLogsByExerciseBase(ExerciseBase exerciseBase, {bool unique = false}) { - var out = logs.where((element) => element.exerciseBaseId == exerciseBase.id).toList(); + List filterLogsByExerciseBase(ExerciseBase exerciseBase, + {bool unique = false}) { + var out = logs + .where((element) => element.exerciseBaseId == exerciseBase.id) + .toList(); if (unique) { out = out.toSet().toList(); diff --git a/lib/models/workouts/workout_plan.g.dart b/lib/models/workouts/workout_plan.g.dart index ac1d6fa9..ef156e3e 100644 --- a/lib/models/workouts/workout_plan.g.dart +++ b/lib/models/workouts/workout_plan.g.dart @@ -19,7 +19,8 @@ WorkoutPlan _$WorkoutPlanFromJson(Map json) { ); } -Map _$WorkoutPlanToJson(WorkoutPlan instance) => { +Map _$WorkoutPlanToJson(WorkoutPlan instance) => + { 'id': instance.id, 'creation_date': instance.creationDate.toIso8601String(), 'name': instance.name, diff --git a/lib/providers/add_exercise.dart b/lib/providers/add_exercise.dart index 67899797..349f1a7a 100644 --- a/lib/providers/add_exercise.dart +++ b/lib/providers/add_exercise.dart @@ -65,11 +65,13 @@ class AddExerciseProvider with ChangeNotifier { set descriptionEn(String description) => _descriptionEn = description; - set descriptionTrans(String description) => _descriptionTranslation = description; + set descriptionTrans(String description) => + _descriptionTranslation = description; set alternateNamesEn(List names) => _alternativeNamesEn = names; - set alternateNamesTrans(List names) => _alternativeNamesTranslation = names; + set alternateNamesTrans(List names) => + _alternativeNamesTranslation = names; set equipment(List equipment) => _equipment = equipment; @@ -185,7 +187,8 @@ class AddExerciseProvider with ChangeNotifier { exerciseTranslationEn = await addExerciseTranslation(exerciseTranslationEn); for (final alias in _alternativeNamesEn) { if (alias.isNotEmpty) { - exerciseTranslationEn.alias.add(await addExerciseAlias(alias, exerciseTranslationEn.id!)); + exerciseTranslationEn.alias + .add(await addExerciseAlias(alias, exerciseTranslationEn.id!)); } } @@ -193,7 +196,8 @@ class AddExerciseProvider with ChangeNotifier { if (language != null) { Translation exerciseTranslationLang = exerciseTranslation; exerciseTranslationLang.base = base; - exerciseTranslationLang = await addExerciseTranslation(exerciseTranslationLang); + exerciseTranslationLang = + await addExerciseTranslation(exerciseTranslationLang); for (final alias in _alternativeNamesTranslation) { if (alias.isNotEmpty) { exerciseTranslationLang.alias.add( @@ -217,7 +221,8 @@ class AddExerciseProvider with ChangeNotifier { Future addExerciseBase() async { final Uri postUri = baseProvider.makeUrl(_exerciseBaseUrlPath); - final Map newBaseMap = await baseProvider.post(base.toJson(), postUri); + final Map newBaseMap = + await baseProvider.post(base.toJson(), postUri); final ExerciseBase newExerciseBase = ExerciseBase.fromJson(newBaseMap); notifyListeners(); @@ -228,7 +233,8 @@ class AddExerciseProvider with ChangeNotifier { final Uri postUri = baseProvider.makeUrl(_exerciseVariationPath); // We send an empty dictionary since at the moment the variations only have an ID - final Map variationMap = await baseProvider.post({}, postUri); + final Map variationMap = + await baseProvider.post({}, postUri); final Variation newVariation = Variation.fromJson(variationMap); _variationId = newVariation.id; notifyListeners(); @@ -237,7 +243,8 @@ class AddExerciseProvider with ChangeNotifier { Future addImages(ExerciseBase base) async { for (final image in _exerciseImages) { - final request = http.MultipartRequest('POST', baseProvider.makeUrl(_imagesUrlPath)); + final request = + http.MultipartRequest('POST', baseProvider.makeUrl(_imagesUrlPath)); request.headers.addAll(baseProvider.getDefaultHeaders(includeAuth: true)); request.files.add(await http.MultipartFile.fromPath('image', image.path)); @@ -253,7 +260,8 @@ class AddExerciseProvider with ChangeNotifier { Future addExerciseTranslation(Translation exercise) async { final Uri postUri = baseProvider.makeUrl(_exerciseTranslationUrlPath); - final Map newTranslation = await baseProvider.post(exercise.toJson(), postUri); + final Map newTranslation = + await baseProvider.post(exercise.toJson(), postUri); final Translation newExercise = Translation.fromJson(newTranslation); notifyListeners(); @@ -264,7 +272,8 @@ class AddExerciseProvider with ChangeNotifier { final alias = Alias(exerciseId: exerciseId, alias: name); final Uri postUri = baseProvider.makeUrl(_exerciseAliasPath); - final Alias newAlias = Alias.fromJson(await baseProvider.post(alias.toJson(), postUri)); + final Alias newAlias = + Alias.fromJson(await baseProvider.post(alias.toJson(), postUri)); notifyListeners(); return newAlias; diff --git a/lib/providers/auth.dart b/lib/providers/auth.dart index 5ff7f4f7..2ee0c109 100644 --- a/lib/providers/auth.dart +++ b/lib/providers/auth.dart @@ -63,12 +63,14 @@ class AuthProvider with ChangeNotifier { AndroidMetadata.metaDataAsMap.then((value) => metadata = value!); } else if (Platform.isLinux || Platform.isMacOS) { metadata = { - MANIFEST_KEY_CHECK_UPDATE: Platform.environment[MANIFEST_KEY_CHECK_UPDATE] ?? '', + MANIFEST_KEY_CHECK_UPDATE: + Platform.environment[MANIFEST_KEY_CHECK_UPDATE] ?? '', MANIFEST_KEY_API: Platform.environment[MANIFEST_KEY_API] ?? '' }; } } on PlatformException { - throw Exception('An error occurred reading the metadata from AndroidManifest'); + throw Exception( + 'An error occurred reading the metadata from AndroidManifest'); } catch (error) {} } } @@ -99,7 +101,8 @@ class AuthProvider with ChangeNotifier { } /// Checking if there is a new version of the application. - Future applicationUpdateRequired([String? version, Map? metadata]) async { + Future applicationUpdateRequired( + [String? version, Map? metadata]) async { metadata ??= this.metadata; if (!metadata.containsKey(MANIFEST_KEY_CHECK_UPDATE) || metadata[MANIFEST_KEY_CHECK_UPDATE] == 'false') { @@ -122,7 +125,10 @@ class AuthProvider with ChangeNotifier { required String serverUrl}) async { // Register try { - final Map data = {'username': username, 'password': password}; + final Map data = { + 'username': username, + 'password': password + }; if (email != '') { data['email'] = email; } @@ -130,7 +136,8 @@ class AuthProvider with ChangeNotifier { makeUri(serverUrl, REGISTRATION_URL), headers: { HttpHeaders.contentTypeHeader: 'application/json; charset=UTF-8', - HttpHeaders.authorizationHeader: 'Token ${metadata[MANIFEST_KEY_API]}', + HttpHeaders.authorizationHeader: + 'Token ${metadata[MANIFEST_KEY_API]}', HttpHeaders.userAgentHeader: getAppNameHeader(), }, body: json.encode(data), diff --git a/lib/providers/base_provider.dart b/lib/providers/base_provider.dart index 7be7856e..5ce38fc8 100644 --- a/lib/providers/base_provider.dart +++ b/lib/providers/base_provider.dart @@ -51,7 +51,8 @@ class WgerBaseProvider { } /// Helper function to make a URL. - Uri makeUrl(String path, {int? id, String? objectMethod, Map? query}) { + Uri makeUrl(String path, + {int? id, String? objectMethod, Map? query}) { return makeUri(auth.serverUrl!, path, id, objectMethod, query); } diff --git a/lib/providers/body_weight.dart b/lib/providers/body_weight.dart index 82b0ad4d..0cdef8a9 100644 --- a/lib/providers/body_weight.dart +++ b/lib/providers/body_weight.dart @@ -77,7 +77,8 @@ class BodyWeightProvider with ChangeNotifier { Future addEntry(WeightEntry entry) async { // Create entry and return it - final data = await baseProvider.post(entry.toJson(), baseProvider.makeUrl(BODY_WEIGHT_URL)); + final data = await baseProvider.post( + entry.toJson(), baseProvider.makeUrl(BODY_WEIGHT_URL)); final WeightEntry weightEntry = WeightEntry.fromJson(data); _entries.add(weightEntry); _entries.sort((a, b) => b.date.compareTo(a.date)); @@ -96,7 +97,8 @@ class BodyWeightProvider with ChangeNotifier { Future deleteEntry(int id) async { // Send the request and remove the entry from the list... - final existingEntryIndex = _entries.indexWhere((element) => element.id == id); + final existingEntryIndex = + _entries.indexWhere((element) => element.id == id); final existingWeightEntry = _entries[existingEntryIndex]; _entries.removeAt(existingEntryIndex); notifyListeners(); diff --git a/lib/providers/exercises.dart b/lib/providers/exercises.dart index 65615fca..02343dff 100644 --- a/lib/providers/exercises.dart +++ b/lib/providers/exercises.dart @@ -20,9 +20,12 @@ import 'dart:async'; import 'dart:convert'; import 'dart:developer'; +import 'package:drift/drift.dart'; import 'package:flutter/material.dart'; import 'package:json_annotation/json_annotation.dart'; import 'package:shared_preferences/shared_preferences.dart'; +import 'package:wger/core/locator.dart'; +import 'package:wger/database/exercise_DB/exercise_database.dart'; import 'package:wger/exceptions/no_such_entry_exception.dart'; import 'package:wger/helpers/consts.dart'; import 'package:wger/models/exercises/alias.dart'; @@ -133,7 +136,8 @@ class ExercisesProvider with ChangeNotifier { title: 'Equipment', items: Map.fromEntries( _equipment.map( - (singleEquipment) => MapEntry(singleEquipment, false), + (singleEquipment) => + MapEntry(singleEquipment, false), ), ), ), @@ -163,13 +167,15 @@ class ExercisesProvider with ChangeNotifier { // Filter by exercise category and equipment (REPLACE WITH HTTP REQUEST) filteredExerciseBases = filteredItems.where((exercise) { - final bool isInAnyCategory = filters!.exerciseCategories.selected.contains(exercise.category); + final bool isInAnyCategory = + filters!.exerciseCategories.selected.contains(exercise.category); final bool doesContainAnyEquipment = filters!.equipment.selected.any( (selectedEquipment) => exercise.equipment.contains(selectedEquipment), ); - return (isInAnyCategory || filters!.exerciseCategories.selected.isEmpty) && + return (isInAnyCategory || + filters!.exerciseCategories.selected.isEmpty) && (doesContainAnyEquipment || filters!.equipment.selected.isEmpty); }).toList(); } @@ -197,7 +203,8 @@ class ExercisesProvider with ChangeNotifier { /// returned exercises. Since this is typically called by one exercise, we are /// not interested in seeing that same exercise returned in the list of variations. /// If this parameter is not passed, all exercises are returned. - List findExerciseBasesByVariationId(int id, {int? exerciseBaseIdToExclude}) { + List findExerciseBasesByVariationId(int id, + {int? exerciseBaseIdToExclude}) { var out = _exerciseBases.where((base) => base.variationId == id).toList(); if (exerciseBaseIdToExclude != null) { @@ -239,22 +246,24 @@ class ExercisesProvider with ChangeNotifier { } Future fetchAndSetCategories() async { - final categories = await baseProvider.fetchPaginated(baseProvider.makeUrl(_categoriesUrlPath)); + final categories = await baseProvider + .fetchPaginated(baseProvider.makeUrl(_categoriesUrlPath)); for (final category in categories) { _categories.add(ExerciseCategory.fromJson(category)); } } Future fetchAndSetVariations() async { - final variations = - await baseProvider.fetchPaginated(baseProvider.makeUrl(_exerciseVariationsUrlPath)); + final variations = await baseProvider + .fetchPaginated(baseProvider.makeUrl(_exerciseVariationsUrlPath)); for (final variation in variations) { _variations.add(Variation.fromJson(variation)); } } Future fetchAndSetMuscles() async { - final muscles = await baseProvider.fetchPaginated(baseProvider.makeUrl(_musclesUrlPath)); + final muscles = await baseProvider + .fetchPaginated(baseProvider.makeUrl(_musclesUrlPath)); for (final muscle in muscles) { _muscles.add(Muscle.fromJson(muscle)); @@ -262,7 +271,8 @@ class ExercisesProvider with ChangeNotifier { } Future fetchAndSetEquipment() async { - final equipments = await baseProvider.fetchPaginated(baseProvider.makeUrl(_equipmentUrlPath)); + final equipments = await baseProvider + .fetchPaginated(baseProvider.makeUrl(_equipmentUrlPath)); for (final equipment in equipments) { _equipment.add(Equipment.fromJson(equipment)); @@ -270,7 +280,8 @@ class ExercisesProvider with ChangeNotifier { } Future fetchAndSetLanguages() async { - final languageData = await baseProvider.fetchPaginated(baseProvider.makeUrl(_languageUrlPath)); + final languageData = await baseProvider + .fetchPaginated(baseProvider.makeUrl(_languageUrlPath)); for (final language in languageData) { _languages.add(Language.fromJson(language)); @@ -302,10 +313,14 @@ class ExercisesProvider with ChangeNotifier { /// a full exercise base ExerciseBase readExerciseBaseFromBaseInfo(dynamic baseData) { final category = ExerciseCategory.fromJson(baseData['category']); - final musclesPrimary = baseData['muscles'].map((e) => Muscle.fromJson(e)).toList(); - final musclesSecondary = baseData['muscles_secondary'].map((e) => Muscle.fromJson(e)).toList(); - final equipment = baseData['equipment'].map((e) => Equipment.fromJson(e)).toList(); - final images = baseData['images'].map((e) => ExerciseImage.fromJson(e)).toList(); + final musclesPrimary = + baseData['muscles'].map((e) => Muscle.fromJson(e)).toList(); + final musclesSecondary = + baseData['muscles_secondary'].map((e) => Muscle.fromJson(e)).toList(); + final equipment = + baseData['equipment'].map((e) => Equipment.fromJson(e)).toList(); + final images = + baseData['images'].map((e) => ExerciseImage.fromJson(e)).toList(); final videos = baseData['videos'].map((e) => Video.fromJson(e)).toList(); final List exercises = []; @@ -315,8 +330,10 @@ class ExercisesProvider with ChangeNotifier { .map((e) => Alias(exerciseId: exercise.id!, alias: e['alias'])) .toList() .cast(); - exercise.notes = - exerciseData['notes'].map((e) => Comment.fromJson(e)).toList().cast(); + exercise.notes = exerciseData['notes'] + .map((e) => Comment.fromJson(e)) + .toList() + .cast(); exercise.baseId = baseData['id']; exercise.language = findLanguageById(exerciseData['language']); exercises.add(exercise); @@ -345,11 +362,13 @@ class ExercisesProvider with ChangeNotifier { /// to invalidate it as a result Future checkExerciseCacheVersion() async { final prefs = await SharedPreferences.getInstance(); + final database = locator(); if (prefs.containsKey(PREFS_EXERCISE_CACHE_VERSION)) { final cacheVersion = prefs.getInt(PREFS_EXERCISE_CACHE_VERSION); // Cache has has a different version, reset - if (cacheVersion! != CACHE_VERSION) { + if ((cacheVersion ?? 0) != CACHE_VERSION) { + database.delete(database.exerciseTableItems).go(); await prefs.remove(PREFS_EXERCISES); } await prefs.setInt(PREFS_EXERCISE_CACHE_VERSION, CACHE_VERSION); @@ -357,6 +376,7 @@ class ExercisesProvider with ChangeNotifier { // Cache has no version key, reset } else { await prefs.remove(PREFS_EXERCISES); + database.delete(database.exerciseTableItems).go(); await prefs.setInt(PREFS_EXERCISE_CACHE_VERSION, CACHE_VERSION); } } @@ -365,19 +385,40 @@ class ExercisesProvider with ChangeNotifier { clear(); // Load exercises from cache, if available + final database = locator(); + + // Only uncomment if need to delete the table, (only for testing purposes). + // database.delete(database.exerciseTableItems).go(); + // Fetch the list of rows from ExercisesDataTable. ExerciseTable is the Type of the Row + final List items = + await database.select(database.exerciseTableItems).get(); + final prefs = await SharedPreferences.getInstance(); await checkExerciseCacheVersion(); + final cacheData = json.decode(prefs.getString(PREFS_EXERCISES) ?? '{}'); - if (prefs.containsKey(PREFS_EXERCISES)) { - final cacheData = json.decode(prefs.getString(PREFS_EXERCISES)!); + if (items.isNotEmpty) { if (DateTime.parse(cacheData['expiresIn']).isAfter(DateTime.now())) { - cacheData['equipment'].forEach((e) => _equipment.add(Equipment.fromJson(e))); - cacheData['muscles'].forEach((e) => _muscles.add(Muscle.fromJson(e))); - cacheData['categories'].forEach((e) => _categories.add(ExerciseCategory.fromJson(e))); - cacheData['languages'].forEach((e) => _languages.add(Language.fromJson(e))); - cacheData['variations'].forEach((e) => _variations.add(Variation.fromJson(e))); - cacheData['bases'].forEach((e) => _exerciseBases.add(readExerciseBaseFromBaseInfo(e))); - + for (final element in items) { + if (element.equipment != null) { + _equipment.add(element.equipment!); + } + if (element.muscle != null) { + _muscles.add(element.muscle!); + } + if (element.variation != null) { + _variations.add(element.variation!); + } + if (element.language != null) { + _languages.add(element.language!); + } + if (element.category != null) { + _categories.add(element.category!); + } + if (element.exercisebase != null) { + _exerciseBases.add(element.exercisebase!); + } + } _initFilters(); log("Read ${_exerciseBases.length} exercises from cache. Valid till ${cacheData['expiresIn']}"); return; @@ -386,30 +427,52 @@ class ExercisesProvider with ChangeNotifier { // Load categories, muscles, equipment and languages final data = await Future.wait([ - baseProvider.fetch(baseProvider.makeUrl(_exerciseBaseInfoUrlPath, query: {'limit': '1000'})), + baseProvider.fetch(baseProvider + .makeUrl(_exerciseBaseInfoUrlPath, query: {'limit': '1000'})), fetchAndSetCategories(), fetchAndSetMuscles(), fetchAndSetEquipment(), fetchAndSetLanguages(), fetchAndSetVariations(), ]); + final exerciseBaseData = data[0]['results']; - _exerciseBases = - exerciseBaseData.map((e) => readExerciseBaseFromBaseInfo(e)).toList().cast(); + _exerciseBases = exerciseBaseData + .map((e) => readExerciseBaseFromBaseInfo(e)) + .toList() + .cast(); try { // Save the result to the cache + for (int i = 0; i < _exerciseBases.length; i++) { + await database.into(database.exerciseTableItems).insert( + ExerciseTableItemsCompanion.insert( + category: (i < _categories.length) + ? Value(_categories[i]) + : const Value(null), + equipment: (i < _equipment.length) + ? Value(_equipment[i]) + : const Value(null), + exercisebase: (i < _exerciseBases.length) + ? Value(_exerciseBases[i]) + : const Value(null), + muscle: (i < _muscles.length) + ? Value(_muscles[i]) + : const Value(null), + variation: (i < _variations.length) + ? Value(_variations[i]) + : const Value(null), + language: (i < _languages.length) + ? Value(_languages[i]) + : const Value(null), + ), + ); + } final cacheData = { - 'date': DateTime.now().toIso8601String(), - 'expiresIn': - DateTime.now().add(const Duration(days: EXERCISE_CACHE_DAYS)).toIso8601String(), - 'equipment': _equipment.map((e) => e.toJson()).toList(), - 'categories': _categories.map((e) => e.toJson()).toList(), - 'muscles': _muscles.map((e) => e.toJson()).toList(), - 'languages': _languages.map((e) => e.toJson()).toList(), - 'variations': _variations.map((e) => e.toJson()).toList(), - 'bases': exerciseBaseData, + 'expiresIn': DateTime.now() + .add(const Duration(days: EXERCISE_CACHE_DAYS)) + .toIso8601String(), }; log("Saved ${_exerciseBases.length} exercises to cache. Valid till ${cacheData['expiresIn']}"); @@ -427,7 +490,8 @@ class ExercisesProvider with ChangeNotifier { /// We could do this locally, but the server has better text searching capabilities /// with postgresql. Future> searchExercise(String name, - {String languageCode = LANGUAGE_SHORT_ENGLISH, bool searchEnglish = false}) async { + {String languageCode = LANGUAGE_SHORT_ENGLISH, + bool searchEnglish = false}) async { if (name.length <= 1) { return []; } @@ -495,8 +559,10 @@ class Filters { List get filterCategories => [exerciseCategories, equipment]; bool get isNothingMarked { - final isExerciseCategoryMarked = exerciseCategories.items.values.any((isMarked) => isMarked); - final isEquipmentMarked = equipment.items.values.any((isMarked) => isMarked); + final isExerciseCategoryMarked = + exerciseCategories.items.values.any((isMarked) => isMarked); + final isEquipmentMarked = + equipment.items.values.any((isMarked) => isMarked); return !isExerciseCategoryMarked && !isEquipmentMarked; } diff --git a/lib/providers/gallery.dart b/lib/providers/gallery.dart index ce1980b4..c41c4d32 100644 --- a/lib/providers/gallery.dart +++ b/lib/providers/gallery.dart @@ -32,7 +32,8 @@ class GalleryProvider extends WgerBaseProvider with ChangeNotifier { List images = []; - GalleryProvider(AuthProvider auth, List entries, [http.Client? client]) + GalleryProvider(AuthProvider auth, List entries, + [http.Client? client]) : images = entries, super(auth, client); @@ -63,7 +64,8 @@ class GalleryProvider extends WgerBaseProvider with ChangeNotifier { HttpHeaders.authorizationHeader: 'Token ${auth.token}', HttpHeaders.userAgentHeader: auth.getAppNameHeader(), }); - request.files.add(await http.MultipartFile.fromPath('image', imageFile.path)); + request.files + .add(await http.MultipartFile.fromPath('image', imageFile.path)); request.fields['date'] = toDate(image.date)!; request.fields['description'] = image.description; @@ -77,7 +79,8 @@ class GalleryProvider extends WgerBaseProvider with ChangeNotifier { } Future editImage(gallery.Image image, XFile? imageFile) async { - final request = http.MultipartRequest('PATCH', makeUrl(_galleryUrlPath, id: image.id)); + final request = + http.MultipartRequest('PATCH', makeUrl(_galleryUrlPath, id: image.id)); request.headers.addAll({ HttpHeaders.authorizationHeader: 'Token ${auth.token}', HttpHeaders.userAgentHeader: auth.getAppNameHeader(), @@ -85,7 +88,8 @@ class GalleryProvider extends WgerBaseProvider with ChangeNotifier { // Only send the image if a new one was selected if (imageFile != null) { - request.files.add(await http.MultipartFile.fromPath('image', imageFile.path)); + request.files + .add(await http.MultipartFile.fromPath('image', imageFile.path)); } // Update image info diff --git a/lib/providers/measurement.dart b/lib/providers/measurement.dart index 7f2c4ee3..b4045771 100644 --- a/lib/providers/measurement.dart +++ b/lib/providers/measurement.dart @@ -68,13 +68,15 @@ class MeasurementProvider with ChangeNotifier { final categoryIndex = _categories.indexOf(category); // Process the response - final requestUrl = baseProvider.makeUrl(_entryUrl, query: {'category': category.id.toString()}); + final requestUrl = baseProvider + .makeUrl(_entryUrl, query: {'category': category.id.toString()}); final data = await baseProvider.fetch(requestUrl); final List loadedEntries = []; for (final entry in data['results']) { loadedEntries.add(MeasurementEntry.fromJson(entry)); } - final MeasurementCategory editedCategory = category.copyWith(entries: loadedEntries); + final MeasurementCategory editedCategory = + category.copyWith(entries: loadedEntries); _categories.removeAt(categoryIndex); _categories.insert(categoryIndex, editedCategory); notifyListeners(); @@ -83,15 +85,18 @@ class MeasurementProvider with ChangeNotifier { /// Fetches and sets the measurement categories and their entries Future fetchAndSetAllCategoriesAndEntries() async { await fetchAndSetCategories(); - await Future.wait(_categories.map((e) => fetchAndSetCategoryEntries(e.id!)).toList()); + await Future.wait( + _categories.map((e) => fetchAndSetCategoryEntries(e.id!)).toList()); } /// Adds a measurement category Future addCategory(MeasurementCategory category) async { final Uri postUri = baseProvider.makeUrl(_categoryUrl); - final Map newCategoryMap = await baseProvider.post(category.toJson(), postUri); - final MeasurementCategory newCategory = MeasurementCategory.fromJson(newCategoryMap); + final Map newCategoryMap = + await baseProvider.post(category.toJson(), postUri); + final MeasurementCategory newCategory = + MeasurementCategory.fromJson(newCategoryMap); _categories.add(newCategory); _categories.sort((a, b) => a.name.compareTo(b.name)); notifyListeners(); @@ -118,14 +123,16 @@ class MeasurementProvider with ChangeNotifier { Future editCategory(int id, String? newName, String? newUnit) async { final MeasurementCategory oldCategory = findCategoryById(id); final int categoryIndex = _categories.indexOf(oldCategory); - final MeasurementCategory tempNewCategory = oldCategory.copyWith(name: newName, unit: newUnit); + final MeasurementCategory tempNewCategory = + oldCategory.copyWith(name: newName, unit: newUnit); final Map response = await baseProvider.patch( tempNewCategory.toJson(), baseProvider.makeUrl(_categoryUrl, id: id), ); final MeasurementCategory newCategory = - MeasurementCategory.fromJson(response).copyWith(entries: oldCategory.entries); + MeasurementCategory.fromJson(response) + .copyWith(entries: oldCategory.entries); _categories.removeAt(categoryIndex); _categories.insert(categoryIndex, newCategory); notifyListeners(); @@ -135,7 +142,8 @@ class MeasurementProvider with ChangeNotifier { Future addEntry(MeasurementEntry entry) async { final Uri postUri = baseProvider.makeUrl(_entryUrl); - final Map newEntryMap = await baseProvider.post(entry.toJson(), postUri); + final Map newEntryMap = + await baseProvider.post(entry.toJson(), postUri); final MeasurementEntry newEntry = MeasurementEntry.fromJson(newEntryMap); final MeasurementCategory category = findCategoryById(newEntry.category); @@ -183,8 +191,8 @@ class MeasurementProvider with ChangeNotifier { date: newDate, ); - final Map response = - await baseProvider.patch(tempNewEntry.toJson(), baseProvider.makeUrl(_entryUrl, id: id)); + final Map response = await baseProvider.patch( + tempNewEntry.toJson(), baseProvider.makeUrl(_entryUrl, id: id)); final MeasurementEntry newEntry = MeasurementEntry.fromJson(response); category.entries.removeAt(entryIndex); diff --git a/lib/providers/nutrition.dart b/lib/providers/nutrition.dart index 789008a3..57274938 100644 --- a/lib/providers/nutrition.dart +++ b/lib/providers/nutrition.dart @@ -46,7 +46,8 @@ class NutritionPlansProvider with ChangeNotifier { List _plans = []; List _ingredients = []; - NutritionPlansProvider(this.baseProvider, List entries) : _plans = entries; + NutritionPlansProvider(this.baseProvider, List entries) + : _plans = entries; List get items { return [..._plans]; @@ -91,8 +92,8 @@ class NutritionPlansProvider with ChangeNotifier { /// Fetches and sets all plans sparsely, i.e. only with the data on the plan /// object itself and no child attributes Future fetchAndSetAllPlansSparse() async { - final data = await baseProvider - .fetchPaginated(baseProvider.makeUrl(_nutritionalPlansPath, query: {'limit': '1000'})); + final data = await baseProvider.fetchPaginated( + baseProvider.makeUrl(_nutritionalPlansPath, query: {'limit': '1000'})); _plans = []; for (final planData in data) { final plan = NutritionalPlan.fromJson(planData); @@ -104,7 +105,8 @@ class NutritionPlansProvider with ChangeNotifier { /// Fetches and sets all plans fully, i.e. with all corresponding child objects Future fetchAndSetAllPlansFull() async { - final data = await baseProvider.fetchPaginated(baseProvider.makeUrl(_nutritionalPlansPath)); + final data = await baseProvider + .fetchPaginated(baseProvider.makeUrl(_nutritionalPlansPath)); for (final entry in data) { await fetchAndSetPlanFull(entry['id']); } @@ -194,7 +196,8 @@ class NutritionPlansProvider with ChangeNotifier { _plans.removeAt(existingPlanIndex); notifyListeners(); - final response = await baseProvider.deleteRequest(_nutritionalPlansPath, id); + final response = + await baseProvider.deleteRequest(_nutritionalPlansPath, id); if (response.statusCode >= 400) { _plans.insert(existingPlanIndex, existingPlan); @@ -251,7 +254,8 @@ class NutritionPlansProvider with ChangeNotifier { /// Adds a meal item to a meal Future addMealItem(MealItem mealItem, Meal meal) async { - final data = await baseProvider.post(mealItem.toJson(), baseProvider.makeUrl(_mealItemPath)); + final data = await baseProvider.post( + mealItem.toJson(), baseProvider.makeUrl(_mealItemPath)); mealItem = MealItem.fromJson(data); mealItem.ingredientObj = await fetchIngredient(mealItem.ingredientId); @@ -271,7 +275,8 @@ class NutritionPlansProvider with ChangeNotifier { notifyListeners(); // Try to delete - final response = await baseProvider.deleteRequest(_mealItemPath, mealItem.id!); + final response = + await baseProvider.deleteRequest(_mealItemPath, mealItem.id!); if (response.statusCode >= 400) { meal.mealItems.insert(mealItemIndex, existingMealItem); notifyListeners(); @@ -314,7 +319,8 @@ class NutritionPlansProvider with ChangeNotifier { if (prefs.containsKey(PREFS_INGREDIENTS)) { final ingredientData = json.decode(prefs.getString(PREFS_INGREDIENTS)!); if (DateTime.parse(ingredientData['expiresIn']).isAfter(DateTime.now())) { - ingredientData['ingredients'].forEach((e) => _ingredients.add(Ingredient.fromJson(e))); + ingredientData['ingredients'] + .forEach((e) => _ingredients.add(Ingredient.fromJson(e))); log("Read ${ingredientData['ingredients'].length} ingredients from cache. Valid till ${ingredientData['expiresIn']}"); return; } @@ -323,7 +329,9 @@ class NutritionPlansProvider with ChangeNotifier { // Initialise an empty cache final ingredientData = { 'date': DateTime.now().toIso8601String(), - 'expiresIn': DateTime.now().add(const Duration(days: DAYS_TO_CACHE)).toIso8601String(), + 'expiresIn': DateTime.now() + .add(const Duration(days: DAYS_TO_CACHE)) + .toIso8601String(), 'ingredients': [] }; prefs.setString(PREFS_INGREDIENTS, json.encode(ingredientData)); @@ -347,8 +355,8 @@ class NutritionPlansProvider with ChangeNotifier { // Send the request final response = await baseProvider.fetch( - baseProvider - .makeUrl(_ingredientSearchPath, query: {'term': name, 'language': languages.join(',')}), + baseProvider.makeUrl(_ingredientSearchPath, + query: {'term': name, 'language': languages.join(',')}), ); // Process the response @@ -390,12 +398,14 @@ class NutritionPlansProvider with ChangeNotifier { } /// Log custom ingredient to nutrition diary - Future logIngredientToDiary(MealItem mealItem, int planId, [DateTime? dateTime]) async { + Future logIngredientToDiary(MealItem mealItem, int planId, + [DateTime? dateTime]) async { final plan = findById(planId); mealItem.ingredientObj = await fetchIngredient(mealItem.ingredientId); final Log log = Log.fromMealItem(mealItem, plan.id!, null, dateTime); - final data = await baseProvider.post(log.toJson(), baseProvider.makeUrl(_nutritionDiaryPath)); + final data = await baseProvider.post( + log.toJson(), baseProvider.makeUrl(_nutritionDiaryPath)); log.id = data['id']; plan.logs.add(log); notifyListeners(); @@ -415,7 +425,11 @@ class NutritionPlansProvider with ChangeNotifier { final data = await baseProvider.fetchPaginated( baseProvider.makeUrl( _nutritionDiaryPath, - query: {'plan': plan.id.toString(), 'limit': '999', 'ordering': 'datetime'}, + query: { + 'plan': plan.id.toString(), + 'limit': '999', + 'ordering': 'datetime' + }, ), ); diff --git a/lib/providers/user.dart b/lib/providers/user.dart index cb547c49..229c55aa 100644 --- a/lib/providers/user.dart +++ b/lib/providers/user.dart @@ -38,7 +38,8 @@ class UserProvider with ChangeNotifier { /// Fetch the current user's profile Future fetchAndSetProfile() async { - final userData = await baseProvider.fetch(baseProvider.makeUrl(PROFILE_URL)); + final userData = + await baseProvider.fetch(baseProvider.makeUrl(PROFILE_URL)); try { profile = Profile.fromJson(userData); } catch (error) { diff --git a/lib/providers/workout_plans.dart b/lib/providers/workout_plans.dart index c5d2406a..69ca3142 100644 --- a/lib/providers/workout_plans.dart +++ b/lib/providers/workout_plans.dart @@ -53,7 +53,8 @@ class WorkoutPlansProvider with ChangeNotifier { List _weightUnits = []; List _repetitionUnit = []; - WorkoutPlansProvider(this.baseProvider, ExercisesProvider exercises, List entries) + WorkoutPlansProvider( + this.baseProvider, ExercisesProvider exercises, List entries) : _exercises = exercises, _workoutPlans = entries; @@ -75,7 +76,8 @@ class WorkoutPlansProvider with ChangeNotifier { /// Return the default weight unit (kg) WeightUnit get defaultWeightUnit { - return _weightUnits.firstWhere((element) => element.id == DEFAULT_WEIGHT_UNIT); + return _weightUnits + .firstWhere((element) => element.id == DEFAULT_WEIGHT_UNIT); } List get repetitionUnits { @@ -84,7 +86,8 @@ class WorkoutPlansProvider with ChangeNotifier { /// Return the default weight unit (reps) RepetitionUnit get defaultRepetitionUnit { - return _repetitionUnit.firstWhere((element) => element.id == REP_UNIT_REPETITIONS); + return _repetitionUnit + .firstWhere((element) => element.id == REP_UNIT_REPETITIONS); } List getPlans() { @@ -191,7 +194,8 @@ class WorkoutPlansProvider with ChangeNotifier { // Days final List days = []; final daysData = await baseProvider.fetch( - baseProvider.makeUrl(_daysUrlPath, query: {'training': plan.id.toString()}), + baseProvider + .makeUrl(_daysUrlPath, query: {'training': plan.id.toString()}), ); for (final dayEntry in daysData['results']) { final day = Day.fromJson(dayEntry); @@ -199,7 +203,8 @@ class WorkoutPlansProvider with ChangeNotifier { // Sets final List sets = []; final setData = await baseProvider.fetch( - baseProvider.makeUrl(_setsUrlPath, query: {'exerciseday': day.id.toString()}), + baseProvider + .makeUrl(_setsUrlPath, query: {'exerciseday': day.id.toString()}), ); for (final setEntry in setData['results']) { final workoutSet = Set.fromJson(setEntry); @@ -208,20 +213,22 @@ class WorkoutPlansProvider with ChangeNotifier { // Settings final List settings = []; - final settingData = allSettingsData['results'].where((s) => s['set'] == workoutSet.id); + final settingData = + allSettingsData['results'].where((s) => s['set'] == workoutSet.id); for (final settingEntry in settingData) { final workoutSetting = Setting.fromJson(settingEntry); - workoutSetting.exerciseBase = - await _exercises.fetchAndSetExerciseBase(workoutSetting.exerciseBaseId); + workoutSetting.exerciseBase = await _exercises + .fetchAndSetExerciseBase(workoutSetting.exerciseBaseId); workoutSetting.weightUnit = _weightUnits.firstWhere( (e) => e.id == workoutSetting.weightUnitId, ); workoutSetting.repetitionUnit = _repetitionUnit.firstWhere( (e) => e.id == workoutSetting.repetitionUnitId, ); - if (!workoutSet.exerciseBasesIds.contains(workoutSetting.exerciseBaseId)) { + if (!workoutSet.exerciseBasesIds + .contains(workoutSetting.exerciseBaseId)) { workoutSet.addExerciseBase(workoutSetting.exerciseBaseObj); } @@ -245,9 +252,12 @@ class WorkoutPlansProvider with ChangeNotifier { for (final logEntry in logData) { try { final log = Log.fromJson(logEntry); - log.weightUnit = _weightUnits.firstWhere((e) => e.id == log.weightUnitId); - log.repetitionUnit = _repetitionUnit.firstWhere((e) => e.id == log.weightUnitId); - log.exerciseBase = await _exercises.fetchAndSetExerciseBase(log.exerciseBaseId); + log.weightUnit = + _weightUnits.firstWhere((e) => e.id == log.weightUnitId); + log.repetitionUnit = + _repetitionUnit.firstWhere((e) => e.id == log.weightUnitId); + log.exerciseBase = + await _exercises.fetchAndSetExerciseBase(log.exerciseBaseId); plan.logs.add(log); } catch (e) { dev.log('fire! fire!'); @@ -261,8 +271,8 @@ class WorkoutPlansProvider with ChangeNotifier { } Future addWorkout(WorkoutPlan workout) async { - final data = - await baseProvider.post(workout.toJson(), baseProvider.makeUrl(_workoutPlansUrlPath)); + final data = await baseProvider.post( + workout.toJson(), baseProvider.makeUrl(_workoutPlansUrlPath)); final plan = WorkoutPlan.fromJson(data); _workoutPlans.insert(0, plan); notifyListeners(); @@ -270,13 +280,14 @@ class WorkoutPlansProvider with ChangeNotifier { } Future editWorkout(WorkoutPlan workout) async { - await baseProvider.patch( - workout.toJson(), baseProvider.makeUrl(_workoutPlansUrlPath, id: workout.id)); + await baseProvider.patch(workout.toJson(), + baseProvider.makeUrl(_workoutPlansUrlPath, id: workout.id)); notifyListeners(); } Future deleteWorkout(int id) async { - final existingWorkoutIndex = _workoutPlans.indexWhere((element) => element.id == id); + final existingWorkoutIndex = + _workoutPlans.indexWhere((element) => element.id == id); final existingWorkout = _workoutPlans[existingWorkoutIndex]; _workoutPlans.removeAt(existingWorkoutIndex); notifyListeners(); @@ -290,7 +301,8 @@ class WorkoutPlansProvider with ChangeNotifier { } } - Future> fetchLogData(WorkoutPlan workout, ExerciseBase base) async { + Future> fetchLogData( + WorkoutPlan workout, ExerciseBase base) async { final data = await baseProvider.fetch( baseProvider.makeUrl( _workoutPlansUrlPath, @@ -304,8 +316,8 @@ class WorkoutPlansProvider with ChangeNotifier { /// Fetch and set weight units for workout (kg, lb, plate, etc.) Future fetchAndSetRepetitionUnits() async { - final response = - await baseProvider.fetchPaginated(baseProvider.makeUrl(_repetitionUnitUrlPath)); + final response = await baseProvider + .fetchPaginated(baseProvider.makeUrl(_repetitionUnitUrlPath)); for (final unit in response) { _repetitionUnit.add(RepetitionUnit.fromJson(unit)); } @@ -313,7 +325,8 @@ class WorkoutPlansProvider with ChangeNotifier { /// Fetch and set weight units for workout (kg, lb, plate, etc.) Future fetchAndSetWeightUnits() async { - final response = await baseProvider.fetchPaginated(baseProvider.makeUrl(_weightUnitUrlPath)); + final response = await baseProvider + .fetchPaginated(baseProvider.makeUrl(_weightUnitUrlPath)); for (final unit in response) { _weightUnits.add(WeightUnit.fromJson(unit)); } @@ -331,7 +344,8 @@ class WorkoutPlansProvider with ChangeNotifier { unitData['weightUnit'].forEach( (e) => _weightUnits.add(WeightUnit.fromJson(e)), ); - dev.log("Read workout units data from cache. Valid till ${unitData['expiresIn']}"); + dev.log( + "Read workout units data from cache. Valid till ${unitData['expiresIn']}"); return; } } @@ -343,7 +357,9 @@ class WorkoutPlansProvider with ChangeNotifier { // Save the result to the cache final exerciseData = { 'date': DateTime.now().toIso8601String(), - 'expiresIn': DateTime.now().add(const Duration(days: DAYS_TO_CACHE)).toIso8601String(), + 'expiresIn': DateTime.now() + .add(const Duration(days: DAYS_TO_CACHE)) + .toIso8601String(), 'repetitionUnits': _repetitionUnit.map((e) => e.toJson()).toList(), 'weightUnit': _weightUnits.map((e) => e.toJson()).toList(), }; @@ -359,7 +375,8 @@ class WorkoutPlansProvider with ChangeNotifier { * Saves a new day instance to the DB and adds it to the given workout */ day.workoutId = workout.id!; - final data = await baseProvider.post(day.toJson(), baseProvider.makeUrl(_daysUrlPath)); + final data = await baseProvider.post( + day.toJson(), baseProvider.makeUrl(_daysUrlPath)); day = Day.fromJson(data); day.sets = []; workout.days.insert(0, day); @@ -368,7 +385,8 @@ class WorkoutPlansProvider with ChangeNotifier { } Future editDay(Day day) async { - await baseProvider.patch(day.toJson(), baseProvider.makeUrl(_daysUrlPath, id: day.id)); + await baseProvider.patch( + day.toJson(), baseProvider.makeUrl(_daysUrlPath, id: day.id)); notifyListeners(); } @@ -487,7 +505,8 @@ class WorkoutPlansProvider with ChangeNotifier { } Future addSession(WorkoutSession session) async { - final data = await baseProvider.post(session.toJson(), baseProvider.makeUrl(_sessionUrlPath)); + final data = await baseProvider.post( + session.toJson(), baseProvider.makeUrl(_sessionUrlPath)); final newSession = WorkoutSession.fromJson(data); notifyListeners(); return newSession; @@ -497,13 +516,16 @@ class WorkoutPlansProvider with ChangeNotifier { * Logs */ Future addLog(Log log) async { - final data = await baseProvider.post(log.toJson(), baseProvider.makeUrl(_logsUrlPath)); + final data = await baseProvider.post( + log.toJson(), baseProvider.makeUrl(_logsUrlPath)); final newLog = Log.fromJson(data); log.id = newLog.id; log.weightUnit = _weightUnits.firstWhere((e) => e.id == log.weightUnitId); - log.repetitionUnit = _repetitionUnit.firstWhere((e) => e.id == log.weightUnitId); - log.exerciseBase = await _exercises.fetchAndSetExerciseBase(log.exerciseBaseId); + log.repetitionUnit = + _repetitionUnit.firstWhere((e) => e.id == log.weightUnitId); + log.exerciseBase = + await _exercises.fetchAndSetExerciseBase(log.exerciseBaseId); final plan = findById(log.workoutPlan); plan.logs.add(log); diff --git a/lib/screens/add_exercise_screen.dart b/lib/screens/add_exercise_screen.dart index 4d65f0b6..17152487 100644 --- a/lib/screens/add_exercise_screen.dart +++ b/lib/screens/add_exercise_screen.dart @@ -25,7 +25,9 @@ class AddExerciseScreen extends StatelessWidget { Widget build(BuildContext context) { final profile = context.read().profile; - return profile!.isTrustworthy ? const AddExerciseStepper() : const EmailNotVerified(); + return profile!.isTrustworthy + ? const AddExerciseStepper() + : const EmailNotVerified(); } } @@ -70,13 +72,18 @@ class _AddExerciseStepperState extends State { setState(() { _isLoading = true; }); - final addExerciseProvider = context.read(); - final exerciseProvider = context.read(); + final addExerciseProvider = + context.read(); + final exerciseProvider = + context.read(); final baseId = await addExerciseProvider.addExercise(); - final base = await exerciseProvider.fetchAndSetExerciseBase(baseId); - final name = - base.getExercise(Localizations.localeOf(context).languageCode).name; + final base = await exerciseProvider + .fetchAndSetExerciseBase(baseId); + final name = base + .getExercise( + Localizations.localeOf(context).languageCode) + .name; setState(() { _isLoading = false; @@ -88,7 +95,8 @@ class _AddExerciseStepperState extends State { builder: (BuildContext context) { return AlertDialog( title: Text(AppLocalizations.of(context).success), - content: Text(AppLocalizations.of(context).cacheWarning), + content: Text( + AppLocalizations.of(context).cacheWarning), actions: [ TextButton( child: Text(name), diff --git a/lib/screens/auth_screen.dart b/lib/screens/auth_screen.dart index 7424ae8f..cad5d522 100644 --- a/lib/screens/auth_screen.dart +++ b/lib/screens/auth_screen.dart @@ -68,7 +68,8 @@ class AuthScreen extends StatelessWidget { ), Container( margin: const EdgeInsets.only(bottom: 20.0), - padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 94.0), + padding: const EdgeInsets.symmetric( + vertical: 8.0, horizontal: 94.0), child: const Text( 'WGER', style: TextStyle( @@ -138,8 +139,10 @@ class _AuthCardState extends State { // // If not, the user will not be able to register via the app try { - final metadata = Provider.of(context, listen: false).metadata; - if (metadata.containsKey(MANIFEST_KEY_API) && metadata[MANIFEST_KEY_API] == '') { + final metadata = + Provider.of(context, listen: false).metadata; + if (metadata.containsKey(MANIFEST_KEY_API) && + metadata[MANIFEST_KEY_API] == '') { _canRegister = false; } } on PlatformException { @@ -161,8 +164,10 @@ class _AuthCardState extends State { // Login existing user late Map res; if (_authMode == AuthMode.Login) { - res = await Provider.of(context, listen: false) - .login(_authData['username']!, _authData['password']!, _authData['serverUrl']!); + res = await Provider.of(context, listen: false).login( + _authData['username']!, + _authData['password']!, + _authData['serverUrl']!); // Register new user } else { @@ -230,7 +235,8 @@ class _AuthCardState extends State { elevation: 8.0, child: Container( width: deviceSize.width * 0.9, - padding: EdgeInsets.symmetric(horizontal: 15.0, vertical: 0.025 * deviceSize.height), + padding: EdgeInsets.symmetric( + horizontal: 15.0, vertical: 0.025 * deviceSize.height), child: Form( key: _formKey, child: SingleChildScrollView( @@ -257,7 +263,9 @@ class _AuthCardState extends State { return null; }, - inputFormatters: [FilteringTextInputFormatter.deny(RegExp(r'\s\b|\b\s'))], + inputFormatters: [ + FilteringTextInputFormatter.deny(RegExp(r'\s\b|\b\s')) + ], onSaved: (value) { _authData['username'] = value!; }, @@ -292,7 +300,9 @@ class _AuthCardState extends State { labelText: AppLocalizations.of(context).password, prefixIcon: const Icon(Icons.password), suffixIcon: IconButton( - icon: Icon(isObscure ? Icons.visibility_off : Icons.visibility), + icon: Icon(isObscure + ? Icons.visibility_off + : Icons.visibility), onPressed: () { isObscure = !isObscure; updateState(() {}); @@ -319,10 +329,13 @@ class _AuthCardState extends State { return TextFormField( key: const Key('inputPassword2'), decoration: InputDecoration( - labelText: AppLocalizations.of(context).confirmPassword, + labelText: + AppLocalizations.of(context).confirmPassword, prefixIcon: const Icon(Icons.password), suffixIcon: IconButton( - icon: Icon(confirmIsObscure ? Icons.visibility_off : Icons.visibility), + icon: Icon(confirmIsObscure + ? Icons.visibility_off + : Icons.visibility), onPressed: () { confirmIsObscure = !confirmIsObscure; updateState(() {}); @@ -335,7 +348,8 @@ class _AuthCardState extends State { validator: _authMode == AuthMode.Signup ? (value) { if (value != _passwordController.text) { - return AppLocalizations.of(context).passwordsDontMatch; + return AppLocalizations.of(context) + .passwordsDontMatch; } return null; } @@ -353,8 +367,10 @@ class _AuthCardState extends State { child: TextFormField( key: const Key('inputServer'), decoration: InputDecoration( - labelText: AppLocalizations.of(context).customServerUrl, - helperText: AppLocalizations.of(context).customServerHint, + labelText: AppLocalizations.of(context) + .customServerUrl, + helperText: AppLocalizations.of(context) + .customServerHint, helperMaxLines: 4), controller: _serverUrlController, validator: (value) { @@ -369,8 +385,10 @@ class _AuthCardState extends State { }, onSaved: (value) { // Remove any trailing slash - if (value!.lastIndexOf('/') == (value.length - 1)) { - value = value.substring(0, value.lastIndexOf('/')); + if (value!.lastIndexOf('/') == + (value.length - 1)) { + value = + value.substring(0, value.lastIndexOf('/')); } _authData['serverUrl'] = value; }, @@ -414,7 +432,8 @@ class _AuthCardState extends State { child: Center( child: _isLoading ? const CircularProgressIndicator( - valueColor: AlwaysStoppedAnimation(Colors.white), + valueColor: + AlwaysStoppedAnimation(Colors.white), ) : Text( _authMode == AuthMode.Login @@ -449,7 +468,8 @@ class _AuthCardState extends State { text.substring(0, text.lastIndexOf('?') + 1), ), Text( - text.substring(text.lastIndexOf('?') + 1, text.length), + text.substring( + text.lastIndexOf('?') + 1, text.length), style: const TextStyle( color: wgerPrimaryColor, fontWeight: FontWeight.w700, diff --git a/lib/screens/exercise_screen.dart b/lib/screens/exercise_screen.dart index 347dacb1..5eafe33c 100644 --- a/lib/screens/exercise_screen.dart +++ b/lib/screens/exercise_screen.dart @@ -27,11 +27,14 @@ class ExerciseDetailScreen extends StatelessWidget { @override Widget build(BuildContext context) { - final exerciseBase = ModalRoute.of(context)!.settings.arguments as ExerciseBase; + final exerciseBase = + ModalRoute.of(context)!.settings.arguments as ExerciseBase; return Scaffold( appBar: AppBar( - title: Text(exerciseBase.getExercise(Localizations.localeOf(context).languageCode).name), + title: Text(exerciseBase + .getExercise(Localizations.localeOf(context).languageCode) + .name), ), body: Padding( padding: const EdgeInsets.symmetric(horizontal: 10), diff --git a/lib/screens/exercises_screen.dart b/lib/screens/exercises_screen.dart index 5601c555..038ba00a 100644 --- a/lib/screens/exercises_screen.dart +++ b/lib/screens/exercises_screen.dart @@ -21,7 +21,8 @@ class _ExercisesScreenState extends State { @override Widget build(BuildContext context) { //final size = MediaQuery.of(context).size; - final exercisesList = Provider.of(context).filteredExerciseBases; + final exercisesList = + Provider.of(context).filteredExerciseBases; return Scaffold( appBar: EmptyAppBar(AppLocalizations.of(context).exercises), diff --git a/lib/screens/form_screen.dart b/lib/screens/form_screen.dart index 74b31798..b66dde9b 100644 --- a/lib/screens/form_screen.dart +++ b/lib/screens/form_screen.dart @@ -61,7 +61,8 @@ class FormScreen extends StatelessWidget { appBar: AppBar(title: Text(args.title)), body: args.hasListView ? Scrollable( - viewportBuilder: (BuildContext context, ViewportOffset position) => Padding( + viewportBuilder: + (BuildContext context, ViewportOffset position) => Padding( padding: args.padding, child: args.widget, ), diff --git a/lib/screens/home_tabs_screen.dart b/lib/screens/home_tabs_screen.dart index 87afd2e2..c3dceb77 100644 --- a/lib/screens/home_tabs_screen.dart +++ b/lib/screens/home_tabs_screen.dart @@ -45,7 +45,8 @@ class HomeTabsScreen extends StatefulWidget { _HomeTabsScreenState createState() => _HomeTabsScreenState(); } -class _HomeTabsScreenState extends State with SingleTickerProviderStateMixin { +class _HomeTabsScreenState extends State + with SingleTickerProviderStateMixin { late Future _initialData; int _selectedIndex = 0; diff --git a/lib/screens/measurement_entries_screen.dart b/lib/screens/measurement_entries_screen.dart index c0670828..59e3c4e6 100644 --- a/lib/screens/measurement_entries_screen.dart +++ b/lib/screens/measurement_entries_screen.dart @@ -35,7 +35,8 @@ class MeasurementEntriesScreen extends StatelessWidget { @override Widget build(BuildContext context) { final categoryId = ModalRoute.of(context)!.settings.arguments as int; - final category = Provider.of(context).findCategoryById(categoryId); + final category = + Provider.of(context).findCategoryById(categoryId); return Scaffold( appBar: AppBar( @@ -62,21 +63,26 @@ class MeasurementEntriesScreen extends StatelessWidget { builder: (BuildContext contextDialog) { return AlertDialog( content: Text( - AppLocalizations.of(context).confirmDelete(category.name), + AppLocalizations.of(context) + .confirmDelete(category.name), ), actions: [ TextButton( - child: Text(MaterialLocalizations.of(context).cancelButtonLabel), - onPressed: () => Navigator.of(contextDialog).pop(), + child: Text(MaterialLocalizations.of(context) + .cancelButtonLabel), + onPressed: () => + Navigator.of(contextDialog).pop(), ), TextButton( child: Text( AppLocalizations.of(context).delete, - style: TextStyle(color: Theme.of(context).errorColor), + style: TextStyle( + color: Theme.of(context).errorColor), ), onPressed: () { // Confirmed, delete the workout - Provider.of(context, listen: false) + Provider.of(context, + listen: false) .deleteCategory(category.id!); // Close the popup @@ -86,7 +92,8 @@ class MeasurementEntriesScreen extends StatelessWidget { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text( - AppLocalizations.of(context).successfullyDeleted, + AppLocalizations.of(context) + .successfullyDeleted, textAlign: TextAlign.center, ), ), diff --git a/lib/screens/nutritional_diary_screen.dart b/lib/screens/nutritional_diary_screen.dart index feac4d2b..8bc76ac6 100644 --- a/lib/screens/nutritional_diary_screen.dart +++ b/lib/screens/nutritional_diary_screen.dart @@ -39,11 +39,13 @@ class NutritionalDiaryScreen extends StatelessWidget { @override Widget build(BuildContext context) { - final args = ModalRoute.of(context)!.settings.arguments as NutritionalDiaryArguments; + final args = + ModalRoute.of(context)!.settings.arguments as NutritionalDiaryArguments; return Scaffold( appBar: AppBar( - title: Text(DateFormat.yMd(Localizations.localeOf(context).languageCode).format(args.date)), + title: Text(DateFormat.yMd(Localizations.localeOf(context).languageCode) + .format(args.date)), ), body: Consumer( builder: (context, nutritionProvider, child) => SingleChildScrollView( diff --git a/lib/screens/nutritional_plan_screen.dart b/lib/screens/nutritional_plan_screen.dart index f89abb1c..bc46df94 100644 --- a/lib/screens/nutritional_plan_screen.dart +++ b/lib/screens/nutritional_plan_screen.dart @@ -35,12 +35,14 @@ class NutritionalPlanScreen extends StatelessWidget { static const routeName = '/nutritional-plan-detail'; Future _loadFullPlan(BuildContext context, int planId) { - return Provider.of(context, listen: false).fetchAndSetPlanFull(planId); + return Provider.of(context, listen: false) + .fetchAndSetPlanFull(planId); } @override Widget build(BuildContext context) { - final _nutritionalPlan = ModalRoute.of(context)!.settings.arguments as NutritionalPlan; + final _nutritionalPlan = + ModalRoute.of(context)!.settings.arguments as NutritionalPlan; return Scaffold( //appBar: getAppBar(nutritionalPlan), @@ -103,7 +105,8 @@ class NutritionalPlanScreen extends StatelessWidget { flexibleSpace: FlexibleSpaceBar( title: Text(_nutritionalPlan.getLabel(context)), background: const Image( - image: AssetImage('assets/images/backgrounds/nutritional_plans.jpg'), + image: AssetImage( + 'assets/images/backgrounds/nutritional_plans.jpg'), fit: BoxFit.cover, ), ), diff --git a/lib/screens/nutritional_plans_screen.dart b/lib/screens/nutritional_plans_screen.dart index ecc67077..9da484b8 100644 --- a/lib/screens/nutritional_plans_screen.dart +++ b/lib/screens/nutritional_plans_screen.dart @@ -46,7 +46,8 @@ class NutritionScreen extends StatelessWidget { }, ), body: Consumer( - builder: (context, nutritionProvider, child) => NutritionalPlansList(nutritionProvider), + builder: (context, nutritionProvider, child) => + NutritionalPlansList(nutritionProvider), ), ); } diff --git a/lib/screens/workout_plan_screen.dart b/lib/screens/workout_plan_screen.dart index c3c3d38a..d4e5d30d 100644 --- a/lib/screens/workout_plan_screen.dart +++ b/lib/screens/workout_plan_screen.dart @@ -69,7 +69,8 @@ class _WorkoutPlanScreenState extends State { @override Widget build(BuildContext context) { - final workoutPlan = ModalRoute.of(context)!.settings.arguments as WorkoutPlan; + final workoutPlan = + ModalRoute.of(context)!.settings.arguments as WorkoutPlan; return Scaffold( body: CustomScrollView( @@ -80,7 +81,8 @@ class _WorkoutPlanScreenState extends State { flexibleSpace: FlexibleSpaceBar( title: Text(workoutPlan.name), background: const Image( - image: AssetImage('assets/images/backgrounds/workout_plans.jpg'), + image: + AssetImage('assets/images/backgrounds/workout_plans.jpg'), fit: BoxFit.cover, ), ), @@ -126,7 +128,8 @@ class _WorkoutPlanScreenState extends State { ), FutureBuilder( future: _loadFullWorkout(context, workoutPlan.id!), - builder: (context, AsyncSnapshot snapshot) => SliverList( + builder: (context, AsyncSnapshot snapshot) => + SliverList( delegate: SliverChildListDelegate( [ if (snapshot.connectionState == ConnectionState.waiting) diff --git a/lib/screens/workout_plans_screen.dart b/lib/screens/workout_plans_screen.dart index 4d3dbfdf..4838fa67 100644 --- a/lib/screens/workout_plans_screen.dart +++ b/lib/screens/workout_plans_screen.dart @@ -47,7 +47,8 @@ class WorkoutPlansScreen extends StatelessWidget { }, ), body: Consumer( - builder: (context, workoutProvider, child) => WorkoutPlansList(workoutProvider), + builder: (context, workoutProvider, child) => + WorkoutPlansList(workoutProvider), ), ); } diff --git a/lib/theme/theme.dart b/lib/theme/theme.dart index 1ba04fac..119680d7 100644 --- a/lib/theme/theme.dart +++ b/lib/theme/theme.dart @@ -63,8 +63,10 @@ final ThemeData wgerTheme = ThemeData( * Text theme */ textTheme: TextTheme( - headline1: const TextStyle(fontFamily: 'OpenSansLight', color: Colors.black), - headline2: const TextStyle(fontFamily: 'OpenSansLight', color: Colors.black), + headline1: + const TextStyle(fontFamily: 'OpenSansLight', color: Colors.black), + headline2: + const TextStyle(fontFamily: 'OpenSansLight', color: Colors.black), headline3: TextStyle( fontSize: materialSizes['h3']! * 0.8, fontFamily: 'OpenSansBold', diff --git a/lib/widgets/add_exercise/add_exercise_dropdown_button.dart b/lib/widgets/add_exercise/add_exercise_dropdown_button.dart index 0f2894da..f9d81a27 100644 --- a/lib/widgets/add_exercise/add_exercise_dropdown_button.dart +++ b/lib/widgets/add_exercise/add_exercise_dropdown_button.dart @@ -17,7 +17,8 @@ class AddExerciseDropdownButton extends StatefulWidget { final FormFieldSetter? onSaved; @override - _AddExerciseDropdownButtonState createState() => _AddExerciseDropdownButtonState(); + _AddExerciseDropdownButtonState createState() => + _AddExerciseDropdownButtonState(); } class _AddExerciseDropdownButtonState extends State { @@ -39,7 +40,8 @@ class _AddExerciseDropdownButtonState extends State { }, value: _selectedItem, decoration: InputDecoration( - contentPadding: const EdgeInsets.symmetric(horizontal: 10, vertical: 10), + contentPadding: + const EdgeInsets.symmetric(horizontal: 10, vertical: 10), border: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(10)), ), diff --git a/lib/widgets/add_exercise/add_exercise_multiselect_button.dart b/lib/widgets/add_exercise/add_exercise_multiselect_button.dart index d190ef38..8788c7ef 100644 --- a/lib/widgets/add_exercise/add_exercise_multiselect_button.dart +++ b/lib/widgets/add_exercise/add_exercise_multiselect_button.dart @@ -20,10 +20,12 @@ class AddExerciseMultiselectButton extends StatefulWidget { : super(key: key); @override - _AddExerciseMultiselectButtonState createState() => _AddExerciseMultiselectButtonState(); + _AddExerciseMultiselectButtonState createState() => + _AddExerciseMultiselectButtonState(); } -class _AddExerciseMultiselectButtonState extends State { +class _AddExerciseMultiselectButtonState + extends State { List _selectedItems = []; @override @@ -33,8 +35,9 @@ class _AddExerciseMultiselectButtonState extends State MultiSelectItem(item, widget.displayName(item))).toList(), + items: widget.items + .map((item) => MultiSelectItem(item, widget.displayName(item))) + .toList(), onConfirm: (value) { setState(() { _selectedItems = value.cast(); diff --git a/lib/widgets/add_exercise/add_exercise_text_area.dart b/lib/widgets/add_exercise/add_exercise_text_area.dart index cec1d50c..539fd5f6 100644 --- a/lib/widgets/add_exercise/add_exercise_text_area.dart +++ b/lib/widgets/add_exercise/add_exercise_text_area.dart @@ -28,13 +28,15 @@ class AddExerciseTextArea extends StatelessWidget { return Padding( padding: const EdgeInsets.all(8.0), child: TextFormField( - keyboardType: isMultiline ? TextInputType.multiline : TextInputType.text, + keyboardType: + isMultiline ? TextInputType.multiline : TextInputType.text, maxLines: isMultiline ? null : DEFAULT_LINES, minLines: isMultiline ? MULTILINE_MIN_LINES : DEFAULT_LINES, validator: validator, onSaved: onSaved, decoration: InputDecoration( - contentPadding: const EdgeInsets.symmetric(horizontal: 10, vertical: 10), + contentPadding: + const EdgeInsets.symmetric(horizontal: 10, vertical: 10), border: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(10)), ), diff --git a/lib/widgets/add_exercise/mixins/image_picker_mixin.dart b/lib/widgets/add_exercise/mixins/image_picker_mixin.dart index d98a235e..a28e744e 100644 --- a/lib/widgets/add_exercise/mixins/image_picker_mixin.dart +++ b/lib/widgets/add_exercise/mixins/image_picker_mixin.dart @@ -17,7 +17,8 @@ mixin ExerciseImagePickerMixin { bool _validateFileType(File file) { final extension = file.path.split('.').last; - return validFileExtensions.any((element) => extension == element.toLowerCase()); + return validFileExtensions + .any((element) => extension == element.toLowerCase()); } void pickImages(BuildContext context, {bool pickFromCamera = false}) async { @@ -25,7 +26,8 @@ mixin ExerciseImagePickerMixin { List? images; if (pickFromCamera) { - final pictureTaken = await imagePicker.pickImage(source: ImageSource.camera); + final pictureTaken = + await imagePicker.pickImage(source: ImageSource.camera); images = pictureTaken == null ? null : [pictureTaken]; } else { images = await imagePicker.pickMultiImage(); @@ -50,7 +52,8 @@ mixin ExerciseImagePickerMixin { if (!isFileValid) { if (context.mounted) { - showDialog(context: context, builder: (context) => Text(errorMessage)); + showDialog( + context: context, builder: (context) => Text(errorMessage)); } return; } diff --git a/lib/widgets/add_exercise/preview_images.dart b/lib/widgets/add_exercise/preview_images.dart index e9f291af..854cdc3b 100644 --- a/lib/widgets/add_exercise/preview_images.dart +++ b/lib/widgets/add_exercise/preview_images.dart @@ -6,7 +6,8 @@ import 'package:provider/provider.dart'; import '../../providers/add_exercise.dart'; import 'mixins/image_picker_mixin.dart'; -class PreviewExerciseImages extends StatelessWidget with ExerciseImagePickerMixin { +class PreviewExerciseImages extends StatelessWidget + with ExerciseImagePickerMixin { PreviewExerciseImages({ Key? key, required this.selectedImages, @@ -35,12 +36,14 @@ class PreviewExerciseImages extends StatelessWidget with ExerciseImagePickerMixi child: Container( decoration: BoxDecoration( color: Colors.grey.withOpacity(0.5), - borderRadius: const BorderRadius.all(Radius.circular(20)), + borderRadius: + const BorderRadius.all(Radius.circular(20)), ), child: IconButton( iconSize: 20, - onPressed: () => - context.read().removeExercise(file.path), + onPressed: () => context + .read() + .removeExercise(file.path), color: Colors.white, icon: const Icon(Icons.delete), ), diff --git a/lib/widgets/add_exercise/steps/step1basics.dart b/lib/widgets/add_exercise/steps/step1basics.dart index 0d875947..399e08ed 100644 --- a/lib/widgets/add_exercise/steps/step1basics.dart +++ b/lib/widgets/add_exercise/steps/step1basics.dart @@ -35,15 +35,16 @@ class Step1Basics extends StatelessWidget { helperText: AppLocalizations.of(context).baseNameEnglish, isRequired: true, validator: (name) => validateName(name, context), - onSaved: (String? name) => addExerciseProvider.exerciseNameEn = name!, + onSaved: (String? name) => + addExerciseProvider.exerciseNameEn = name!, ), AddExerciseTextArea( onChange: (value) => {}, title: AppLocalizations.of(context).alternativeNames, isMultiline: true, helperText: AppLocalizations.of(context).oneNamePerLine, - onSaved: (String? alternateName) => - addExerciseProvider.alternateNamesEn = alternateName!.split('\n'), + onSaved: (String? alternateName) => addExerciseProvider + .alternateNamesEn = alternateName!.split('\n'), ), ExerciseCategoryInputWidget( key: const Key('category-dropdown'), @@ -57,7 +58,8 @@ class Step1Basics extends StatelessWidget { return AppLocalizations.of(context).selectEntry; } }, - displayName: (ExerciseCategory c) => getTranslation(c.name, context), + displayName: (ExerciseCategory c) => + getTranslation(c.name, context), ), AddExerciseMultiselectButton( key: const Key('equipment-multiselect'), @@ -84,7 +86,10 @@ class Step1Basics extends StatelessWidget { addExerciseProvider.primaryMuscles = muscles.cast(); }, displayName: (Muscle e) => - e.name + (e.nameEn.isNotEmpty ? '\n(${getTranslation(e.nameEn, context)})' : ''), + e.name + + (e.nameEn.isNotEmpty + ? '\n(${getTranslation(e.nameEn, context)})' + : ''), ), AddExerciseMultiselectButton( key: const Key('secondary-muscles-multiselect'), @@ -98,7 +103,10 @@ class Step1Basics extends StatelessWidget { addExerciseProvider.secondaryMuscles = muscles.cast(); }, displayName: (Muscle e) => - e.name + (e.nameEn.isNotEmpty ? '\n(${getTranslation(e.nameEn, context)})' : ''), + e.name + + (e.nameEn.isNotEmpty + ? '\n(${getTranslation(e.nameEn, context)})' + : ''), ), Consumer( builder: (context, value, child) => MuscleRowWidget( diff --git a/lib/widgets/add_exercise/steps/step2variations.dart b/lib/widgets/add_exercise/steps/step2variations.dart index ebe9254e..a25768d5 100644 --- a/lib/widgets/add_exercise/steps/step2variations.dart +++ b/lib/widgets/add_exercise/steps/step2variations.dart @@ -38,12 +38,15 @@ class Step2Variations extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, //mainAxisSize: MainAxisSize.max, children: [ - ...exerciseProvider.exerciseBasesByVariation[key]! + ...exerciseProvider + .exerciseBasesByVariation[key]! .map( (base) => Text( base .getExercise( - Localizations.localeOf(context).languageCode) + Localizations.localeOf( + context) + .languageCode) .name, overflow: TextOverflow.ellipsis, ), @@ -56,7 +59,8 @@ class Step2Variations extends StatelessWidget { Consumer( builder: (ctx, provider, __) => Switch( value: provider.variationId == key, - onChanged: (state) => provider.variationId = key), + onChanged: (state) => + provider.variationId = key), ), ], ), @@ -76,7 +80,9 @@ class Step2Variations extends StatelessWidget { children: [ Text( base - .getExercise(Localizations.localeOf(context).languageCode) + .getExercise( + Localizations.localeOf(context) + .languageCode) .name, overflow: TextOverflow.ellipsis, ), @@ -86,8 +92,10 @@ class Step2Variations extends StatelessWidget { ), Consumer( builder: (ctx, provider, __) => Switch( - value: provider.newVariationForExercise == base.id, - onChanged: (state) => provider.newVariationForExercise = base.id, + value: + provider.newVariationForExercise == base.id, + onChanged: (state) => + provider.newVariationForExercise = base.id, ), ), ], diff --git a/lib/widgets/add_exercise/steps/step3description.dart b/lib/widgets/add_exercise/steps/step3description.dart index fad46ba8..c0632cfe 100644 --- a/lib/widgets/add_exercise/steps/step3description.dart +++ b/lib/widgets/add_exercise/steps/step3description.dart @@ -23,7 +23,8 @@ class Step3Description extends StatelessWidget { isRequired: true, isMultiline: true, validator: (name) => validateDescription(name, context), - onSaved: (String? description) => addExerciseProvider.descriptionEn = description!, + onSaved: (String? description) => + addExerciseProvider.descriptionEn = description!, ), ], ), diff --git a/lib/widgets/add_exercise/steps/step4translations.dart b/lib/widgets/add_exercise/steps/step4translations.dart index 284ed62d..9763e22a 100644 --- a/lib/widgets/add_exercise/steps/step4translations.dart +++ b/lib/widgets/add_exercise/steps/step4translations.dart @@ -61,7 +61,8 @@ class _Step4TranslationState extends State { title: '${AppLocalizations.of(context).name}*', isRequired: true, validator: (name) => validateName(name, context), - onSaved: (String? name) => addExerciseProvider.exerciseNameTrans = name!, + onSaved: (String? name) => + addExerciseProvider.exerciseNameTrans = name!, ), AddExerciseTextArea( onChange: (value) => {}, @@ -73,7 +74,8 @@ class _Step4TranslationState extends State { if (alternateNames?.isNotEmpty == true) { final names = alternateNames!.split('\n'); for (final name in names) { - if (name.length < MIN_CHARS_NAME || name.length > MAX_CHARS_NAME) { + if (name.length < MIN_CHARS_NAME || + name.length > MAX_CHARS_NAME) { return AppLocalizations.of(context).enterCharacters( MIN_CHARS_NAME, MAX_CHARS_NAME, @@ -83,8 +85,8 @@ class _Step4TranslationState extends State { } return null; }, - onSaved: (String? alternateName) => - addExerciseProvider.alternateNamesTrans = alternateName!.split('\n'), + onSaved: (String? alternateName) => addExerciseProvider + .alternateNamesTrans = alternateName!.split('\n'), ), AddExerciseTextArea( onChange: (value) => {}, diff --git a/lib/widgets/add_exercise/steps/step5images.dart b/lib/widgets/add_exercise/steps/step5images.dart index 34eb1602..27400bb9 100644 --- a/lib/widgets/add_exercise/steps/step5images.dart +++ b/lib/widgets/add_exercise/steps/step5images.dart @@ -13,7 +13,8 @@ class Step5Images extends StatefulWidget { State createState() => _Step5ImagesState(); } -class _Step5ImagesState extends State with ExerciseImagePickerMixin { +class _Step5ImagesState extends State + with ExerciseImagePickerMixin { @override Widget build(BuildContext context) { return Form( @@ -33,7 +34,8 @@ class _Step5ImagesState extends State with ExerciseImagePickerMixin mainAxisAlignment: MainAxisAlignment.center, children: [ IconButton( - onPressed: () => pickImages(context, pickFromCamera: true), + onPressed: () => + pickImages(context, pickFromCamera: true), icon: const Icon(Icons.camera_alt), ), IconButton( diff --git a/lib/widgets/core/about.dart b/lib/widgets/core/about.dart index d4b15e4a..ed789964 100644 --- a/lib/widgets/core/about.dart +++ b/lib/widgets/core/about.dart @@ -85,7 +85,10 @@ class _AboutPageState extends State { SizedBox(height: 0.025 * deviceSize.height), Text( AppLocalizations.of(context).aboutDescription, - style: Theme.of(context).textTheme.bodyMedium!.copyWith(fontSize: 16), + style: Theme.of(context) + .textTheme + .bodyMedium! + .copyWith(fontSize: 16), ), SizedBox(height: 0.04 * deviceSize.height), ListTile( @@ -102,7 +105,8 @@ class _AboutPageState extends State { ], ), contentPadding: EdgeInsets.zero, - onTap: () async => launchURL('https://github.com/wger-project', context), + onTap: () async => + launchURL('https://github.com/wger-project', context), ), const SizedBox(height: 10), ListTile( @@ -119,8 +123,9 @@ class _AboutPageState extends State { ], ), contentPadding: EdgeInsets.zero, - onTap: () async => - launchURL('https://github.com/wger-project/flutter/issues/new/choose', context), + onTap: () async => launchURL( + 'https://github.com/wger-project/flutter/issues/new/choose', + context), ), const SizedBox(height: 10), ListTile( @@ -137,7 +142,8 @@ class _AboutPageState extends State { ], ), contentPadding: EdgeInsets.zero, - onTap: () async => launchURL('https://discord.gg/rPWFv6W', context), + onTap: () async => + launchURL('https://discord.gg/rPWFv6W', context), ), const SizedBox(height: 10), ListTile( @@ -154,7 +160,8 @@ class _AboutPageState extends State { ], ), contentPadding: EdgeInsets.zero, - onTap: () async => launchURL('https://hosted.weblate.org/engage/wger/', context), + onTap: () async => + launchURL('https://hosted.weblate.org/engage/wger/', context), ), ListTile( leading: const Icon(Icons.article), @@ -164,7 +171,8 @@ class _AboutPageState extends State { showLicensePage( context: context, applicationName: 'wger', - applicationVersion: 'App: ${authProvider.applicationVersion!.version}\n' + applicationVersion: + 'App: ${authProvider.applicationVersion!.version}\n' 'Server: ${authProvider.serverVersion}', applicationLegalese: '\u{a9} 2020 - 2021 contributors', applicationIcon: Padding( diff --git a/lib/widgets/core/app_bar.dart b/lib/widgets/core/app_bar.dart index 06f1c746..fc933e99 100644 --- a/lib/widgets/core/app_bar.dart +++ b/lib/widgets/core/app_bar.dart @@ -49,7 +49,8 @@ class MainAppBar extends StatelessWidget implements PreferredSizeWidget { title: Text(AppLocalizations.of(context).optionsLabel), actions: [ TextButton( - child: Text(MaterialLocalizations.of(context).closeButtonLabel), + child: Text( + MaterialLocalizations.of(context).closeButtonLabel), onPressed: () { Navigator.of(context).pop(); }, @@ -69,7 +70,8 @@ class MainAppBar extends StatelessWidget implements PreferredSizeWidget { FormScreen.routeName, arguments: FormScreenArguments( AppLocalizations.of(context).userProfile, - UserProfileForm(context.read().profile!), + UserProfileForm( + context.read().profile!), ), ); }, @@ -77,9 +79,11 @@ class MainAppBar extends StatelessWidget implements PreferredSizeWidget { ListTile( leading: const Icon(Icons.info), onTap: () { - Navigator.of(context).pushNamed(AboutPage.routeName); + Navigator.of(context) + .pushNamed(AboutPage.routeName); }, - title: Text(AppLocalizations.of(context).aboutPageTitle), + title: + Text(AppLocalizations.of(context).aboutPageTitle), ), const Divider(), ListTile( diff --git a/lib/widgets/core/core.dart b/lib/widgets/core/core.dart index d61e5939..681b938c 100644 --- a/lib/widgets/core/core.dart +++ b/lib/widgets/core/core.dart @@ -65,7 +65,8 @@ class CircleIconAvatar extends StatelessWidget { final Color color; - const CircleIconAvatar(this._icon, {this.radius = 20, this.color = Colors.black12}); + const CircleIconAvatar(this._icon, + {this.radius = 20, this.color = Colors.black12}); @override Widget build(BuildContext context) { diff --git a/lib/widgets/dashboard/calendar.dart b/lib/widgets/dashboard/calendar.dart index f2ade2f5..17b069ea 100644 --- a/lib/widgets/dashboard/calendar.dart +++ b/lib/widgets/dashboard/calendar.dart @@ -58,15 +58,16 @@ class DashboardCalendarWidget extends StatefulWidget { const DashboardCalendarWidget(); @override - _DashboardCalendarWidgetState createState() => _DashboardCalendarWidgetState(); + _DashboardCalendarWidgetState createState() => + _DashboardCalendarWidgetState(); } class _DashboardCalendarWidgetState extends State with TickerProviderStateMixin { late Map> _events; late final ValueNotifier> _selectedEvents; - RangeSelectionMode _rangeSelectionMode = - RangeSelectionMode.toggledOff; // Can be toggled on/off by longpressing a date + RangeSelectionMode _rangeSelectionMode = RangeSelectionMode + .toggledOff; // Can be toggled on/off by longpressing a date DateTime _focusedDay = DateTime.now(); DateTime? _selectedDay; DateTime? _rangeStart; @@ -108,13 +109,14 @@ class _DashboardCalendarWidgetState extends State _events[date] = []; } - _events[date]! - .add(Event(EventType.measurement, '${category.name}: ${entry.value} ${category.unit}')); + _events[date]!.add(Event(EventType.measurement, + '${category.name}: ${entry.value} ${category.unit}')); } } // Process workout sessions - final WorkoutPlansProvider plans = Provider.of(context, listen: false); + final WorkoutPlansProvider plans = + Provider.of(context, listen: false); await plans.fetchSessionData().then((entries) { for (final entry in entries['results']) { final session = WorkoutSession.fromJson(entry); @@ -123,7 +125,8 @@ class _DashboardCalendarWidgetState extends State _events[date] = []; } var time = ''; - time = '(${timeToString(session.timeStart)} - ${timeToString(session.timeEnd)})'; + time = + '(${timeToString(session.timeStart)} - ${timeToString(session.timeEnd)})'; // Add events to lists _events[date]!.add(Event( @@ -255,10 +258,12 @@ class _DashboardCalendarWidgetState extends State title: Text((() { switch (event.type) { case EventType.caloriesDiary: - return AppLocalizations.of(context).nutritionalDiary; + return AppLocalizations.of(context) + .nutritionalDiary; case EventType.session: - return AppLocalizations.of(context).workoutSession; + return AppLocalizations.of(context) + .workoutSession; case EventType.weight: return AppLocalizations.of(context).weight; diff --git a/lib/widgets/dashboard/widgets.dart b/lib/widgets/dashboard/widgets.dart index c1e02b02..7b0e41fd 100644 --- a/lib/widgets/dashboard/widgets.dart +++ b/lib/widgets/dashboard/widgets.dart @@ -46,7 +46,8 @@ import 'package:wger/widgets/workouts/forms.dart'; class DashboardNutritionWidget extends StatefulWidget { @override - _DashboardNutritionWidgetState createState() => _DashboardNutritionWidgetState(); + _DashboardNutritionWidgetState createState() => + _DashboardNutritionWidgetState(); } class _DashboardNutritionWidgetState extends State { @@ -57,7 +58,8 @@ class _DashboardNutritionWidgetState extends State { @override void initState() { super.initState(); - _plan = Provider.of(context, listen: false).currentPlan; + _plan = + Provider.of(context, listen: false).currentPlan; _hasContent = _plan != null; } @@ -100,7 +102,8 @@ class _DashboardNutritionWidgetState extends State { icon: const Icon(Icons.history_edu), color: wgerPrimaryButtonColor, onPressed: () { - Provider.of(context, listen: false).logMealToDiary(meal); + Provider.of(context, listen: false) + .logMealToDiary(meal); ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text( @@ -131,7 +134,8 @@ class _DashboardNutritionWidgetState extends State { ), ), const SizedBox(width: 5), - Text('${item.amount.toStringAsFixed(0)} ${AppLocalizations.of(context).g}'), + Text( + '${item.amount.toStringAsFixed(0)} ${AppLocalizations.of(context).g}'), ], ), ], @@ -151,7 +155,9 @@ class _DashboardNutritionWidgetState extends State { return const Text(''); } - return _showDetail ? const Icon(Icons.expand_less) : const Icon(Icons.expand_more); + return _showDetail + ? const Icon(Icons.expand_less) + : const Icon(Icons.expand_more); } @override @@ -161,7 +167,9 @@ class _DashboardNutritionWidgetState extends State { children: [ ListTile( title: Text( - _hasContent ? _plan!.description : AppLocalizations.of(context).nutritionalPlan, + _hasContent + ? _plan!.description + : AppLocalizations.of(context).nutritionalPlan, style: Theme.of(context).textTheme.headline4, ), subtitle: Text( @@ -188,7 +196,8 @@ class _DashboardNutritionWidgetState extends State { Container( padding: const EdgeInsets.all(15), height: 180, - child: FlNutritionalPlanPieChartWidget(_plan!.nutritionalValues), + child: + FlNutritionalPlanPieChartWidget(_plan!.nutritionalValues), ) ], ) @@ -219,8 +228,9 @@ class _DashboardNutritionWidgetState extends State { TextButton( child: Text(AppLocalizations.of(context).goToDetailPage), onPressed: () { - Navigator.of(context) - .pushNamed(NutritionalPlanScreen.routeName, arguments: _plan); + Navigator.of(context).pushNamed( + NutritionalPlanScreen.routeName, + arguments: _plan); }, ), ], @@ -273,9 +283,11 @@ class _DashboardWeightWidgetState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ TextButton( - child: Text(AppLocalizations.of(context).goToDetailPage), + child: Text( + AppLocalizations.of(context).goToDetailPage), onPressed: () { - Navigator.of(context).pushNamed(WeightScreen.routeName); + Navigator.of(context) + .pushNamed(WeightScreen.routeName); }), IconButton( icon: const Icon(Icons.add), @@ -311,10 +323,12 @@ class _DashboardWeightWidgetState extends State { class DashboardMeasurementWidget extends StatefulWidget { @override - _DashboardMeasurementWidgetState createState() => _DashboardMeasurementWidgetState(); + _DashboardMeasurementWidgetState createState() => + _DashboardMeasurementWidgetState(); } -class _DashboardMeasurementWidgetState extends State { +class _DashboardMeasurementWidgetState + extends State { int _current = 0; final CarouselController _controller = CarouselController(); @@ -387,17 +401,23 @@ class _DashboardMeasurementWidgetState extends State children: items.asMap().entries.map( (entry) { return GestureDetector( - onTap: () => _controller.animateToPage(entry.key), + onTap: () => + _controller.animateToPage(entry.key), child: Container( width: 12.0, height: 12.0, - margin: EdgeInsets.symmetric(vertical: 8.0, horizontal: 4.0), + margin: EdgeInsets.symmetric( + vertical: 8.0, horizontal: 4.0), decoration: BoxDecoration( shape: BoxShape.circle, - color: (Theme.of(context).brightness == Brightness.dark + color: (Theme.of(context) + .brightness == + Brightness.dark ? Colors.white : wgerPrimaryColor) - .withOpacity(_current == entry.key ? 0.9 : 0.4)), + .withOpacity(_current == entry.key + ? 0.9 + : 0.4)), ), ); }, @@ -442,7 +462,9 @@ class _DashboardWorkoutWidgetState extends State { return const Text(''); } - return _showDetail ? const Icon(Icons.expand_less) : const Icon(Icons.expand_more); + return _showDetail + ? const Icon(Icons.expand_less) + : const Icon(Icons.expand_more); } List getContent() { @@ -474,7 +496,8 @@ class _DashboardWorkoutWidgetState extends State { icon: const Icon(Icons.play_arrow), color: wgerPrimaryButtonColor, onPressed: () { - Navigator.of(context).pushNamed(GymModeScreen.routeName, arguments: day); + Navigator.of(context) + .pushNamed(GymModeScreen.routeName, arguments: day); }, ), ], @@ -495,10 +518,13 @@ class _DashboardWorkoutWidgetState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(s.exerciseBaseObj - .getExercise(Localizations.localeOf(context).languageCode) + .getExercise(Localizations.localeOf(context) + .languageCode) .name), const SizedBox(width: 10), - MutedText(set.getSmartRepr(s.exerciseBaseObj).join('\n')), + MutedText(set + .getSmartRepr(s.exerciseBaseObj) + .join('\n')), ], ), const SizedBox(height: 10), @@ -523,7 +549,9 @@ class _DashboardWorkoutWidgetState extends State { children: [ ListTile( title: Text( - _hasContent ? _workoutPlan!.name : AppLocalizations.of(context).labelWorkoutPlan, + _hasContent + ? _workoutPlan!.name + : AppLocalizations.of(context).labelWorkoutPlan, style: Theme.of(context).textTheme.headline4, ), subtitle: Text( @@ -565,8 +593,8 @@ class _DashboardWorkoutWidgetState extends State { TextButton( child: Text(AppLocalizations.of(context).goToDetailPage), onPressed: () { - Navigator.of(context) - .pushNamed(WorkoutPlanScreen.routeName, arguments: _workoutPlan); + Navigator.of(context).pushNamed(WorkoutPlanScreen.routeName, + arguments: _workoutPlan); }, ), ], diff --git a/lib/widgets/exercises/exercises.dart b/lib/widgets/exercises/exercises.dart index 44d2d2b0..f0acc355 100644 --- a/lib/widgets/exercises/exercises.dart +++ b/lib/widgets/exercises/exercises.dart @@ -42,7 +42,8 @@ class ExerciseDetail extends StatelessWidget { @override Widget build(BuildContext context) { - _exercise = _exerciseBase.getExercise(Localizations.localeOf(context).languageCode); + _exercise = + _exerciseBase.getExercise(Localizations.localeOf(context).languageCode); return SingleChildScrollView( child: Column( @@ -156,7 +157,9 @@ class ExerciseDetail extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ const MuscleColorHelper(main: true), - ..._exerciseBase.muscles.map((e) => Text(e.nameTranslated(context))).toList(), + ..._exerciseBase.muscles + .map((e) => Text(e.nameTranslated(context))) + .toList(), ], ), ); @@ -202,7 +205,7 @@ class ExerciseDetail extends StatelessWidget { final List out = []; out.add( - Chip(label: Text(getTranslation(_exerciseBase.category.name, context))), + Chip(label: Text(getTranslation(_exerciseBase.category!.name, context))), ); if (_exerciseBase.equipment.isNotEmpty) { _exerciseBase.equipment @@ -219,7 +222,9 @@ class ExerciseDetail extends StatelessWidget { // TODO: add carousel for the other videos final List out = []; if (_exerciseBase.videos.isNotEmpty && !isDesktop) { - _exerciseBase.videos.map((v) => ExerciseVideoWidget(video: v)).forEach((element) { + _exerciseBase.videos + .map((v) => ExerciseVideoWidget(video: v)) + .forEach((element) { out.add(element); }); @@ -232,8 +237,8 @@ class ExerciseDetail extends StatelessWidget { final List out = []; if (_exercise.alias.isNotEmpty) { out.add(MutedText( - AppLocalizations.of(context) - .alsoKnownAs(_exercise.alias.map((e) => e.alias).toList().join(', ')), + AppLocalizations.of(context).alsoKnownAs( + _exercise.alias.map((e) => e.alias).toList().join(', ')), )); out.add(const SizedBox(height: PADDING)); } @@ -275,7 +280,8 @@ class MuscleRowWidget extends StatelessWidget { final List muscles; final List musclesSecondary; - const MuscleRowWidget({required this.muscles, required this.musclesSecondary}); + const MuscleRowWidget( + {required this.muscles, required this.musclesSecondary}); @override Widget build(BuildContext context) { @@ -319,7 +325,8 @@ class MuscleWidget extends StatelessWidget { this.isFront = true, }) { this.muscles = muscles.where((m) => m.isFront == isFront).toList(); - this.musclesSecondary = musclesSecondary.where((m) => m.isFront == isFront).toList(); + this.musclesSecondary = + musclesSecondary.where((m) => m.isFront == isFront).toList(); } @override @@ -330,10 +337,12 @@ class MuscleWidget extends StatelessWidget { children: [ SvgPicture.asset('assets/images/muscles/$background.svg'), ...muscles - .map((m) => SvgPicture.asset('assets/images/muscles/main/muscle-${m.id}.svg')) + .map((m) => SvgPicture.asset( + 'assets/images/muscles/main/muscle-${m.id}.svg')) .toList(), ...musclesSecondary - .map((m) => SvgPicture.asset('assets/images/muscles/secondary/muscle-${m.id}.svg')) + .map((m) => SvgPicture.asset( + 'assets/images/muscles/secondary/muscle-${m.id}.svg')) .toList(), ], ); diff --git a/lib/widgets/exercises/filter_modal.dart b/lib/widgets/exercises/filter_modal.dart index 27ce3997..cb1eecfb 100644 --- a/lib/widgets/exercises/filter_modal.dart +++ b/lib/widgets/exercises/filter_modal.dart @@ -27,7 +27,8 @@ class ExerciseFilterModalBody extends StatefulWidget { }) : super(key: key); @override - _ExerciseFilterModalBodyState createState() => _ExerciseFilterModalBodyState(); + _ExerciseFilterModalBodyState createState() => + _ExerciseFilterModalBodyState(); } class _ExerciseFilterModalBodyState extends State { @@ -70,11 +71,13 @@ class _ExerciseFilterModalBodyState extends State { children: filterCategory.items.entries.map( (currentEntry) { return SwitchListTile( - title: Text(getTranslation(currentEntry.key.name, context)), + title: + Text(getTranslation(currentEntry.key.name, context)), value: currentEntry.value, onChanged: (_) { setState(() { - filterCategory.items.update(currentEntry.key, (value) => !value); + filterCategory.items + .update(currentEntry.key, (value) => !value); Provider.of(context, listen: false) .setFilters(filters); }); diff --git a/lib/widgets/exercises/filter_row.dart b/lib/widgets/exercises/filter_row.dart index d7510dd1..f18b4b88 100644 --- a/lib/widgets/exercises/filter_row.dart +++ b/lib/widgets/exercises/filter_row.dart @@ -41,10 +41,11 @@ class _FilterRowState extends State { _exerciseNameController = TextEditingController() ..addListener( () { - final provider = Provider.of(context, listen: false); + final provider = + Provider.of(context, listen: false); if (provider.filters!.searchTerm != _exerciseNameController.text) { - provider - .setFilters(provider.filters!.copyWith(searchTerm: _exerciseNameController.text)); + provider.setFilters(provider.filters! + .copyWith(searchTerm: _exerciseNameController.text)); } }, ); @@ -90,7 +91,8 @@ class _FilterRowState extends State { return [ PopupMenuItem( value: ExerciseMoreOption.ADD_EXERCISE, - child: Text(AppLocalizations.of(context).contributeExercise), + child: + Text(AppLocalizations.of(context).contributeExercise), ) ]; }, @@ -100,7 +102,8 @@ class _FilterRowState extends State { onSelected: (ExerciseMoreOption selectedOption) { switch (selectedOption) { case ExerciseMoreOption.ADD_EXERCISE: - Navigator.of(context).pushNamed(AddExerciseScreen.routeName); + Navigator.of(context) + .pushNamed(AddExerciseScreen.routeName); break; } }, diff --git a/lib/widgets/exercises/forms.dart b/lib/widgets/exercises/forms.dart index 4983d88f..5a3a3af2 100644 --- a/lib/widgets/exercises/forms.dart +++ b/lib/widgets/exercises/forms.dart @@ -46,10 +46,12 @@ class ExerciseCategoryInputWidget extends StatefulWidget { } @override - _ExerciseCategoryInputWidgetState createState() => _ExerciseCategoryInputWidgetState(); + _ExerciseCategoryInputWidgetState createState() => + _ExerciseCategoryInputWidgetState(); } -class _ExerciseCategoryInputWidgetState extends State { +class _ExerciseCategoryInputWidgetState + extends State { @override Widget build(BuildContext context) { T? selectedEntry; diff --git a/lib/widgets/exercises/list_tile.dart b/lib/widgets/exercises/list_tile.dart index 3711389e..ee8f3237 100644 --- a/lib/widgets/exercises/list_tile.dart +++ b/lib/widgets/exercises/list_tile.dart @@ -23,7 +23,8 @@ import 'package:wger/screens/exercise_screen.dart'; import 'package:wger/widgets/exercises/images.dart'; class ExerciseListTile extends StatelessWidget { - const ExerciseListTile({Key? key, required this.exerciseBase}) : super(key: key); + const ExerciseListTile({Key? key, required this.exerciseBase}) + : super(key: key); final ExerciseBase exerciseBase; @@ -51,16 +52,19 @@ class ExerciseListTile extends StatelessWidget { ), ), title: Text( - exerciseBase.getExercise(Localizations.localeOf(context).languageCode).name, + exerciseBase + .getExercise(Localizations.localeOf(context).languageCode) + .name, //style: theme.textTheme.headline6, overflow: TextOverflow.ellipsis, maxLines: 2, ), subtitle: Text( - '${getTranslation(exerciseBase.category.name, context)} / ${exerciseBase.equipment.map((e) => getTranslation(e.name, context)).toList().join(', ')}', + '${getTranslation(exerciseBase.category!.name, context)} / ${exerciseBase.equipment.map((e) => getTranslation(e.name, context)).toList().join(', ')}', ), onTap: () { - Navigator.pushNamed(context, ExerciseDetailScreen.routeName, arguments: exerciseBase); + Navigator.pushNamed(context, ExerciseDetailScreen.routeName, + arguments: exerciseBase); }, ); } diff --git a/lib/widgets/exercises/videos.dart b/lib/widgets/exercises/videos.dart index 4675fc2d..332468ac 100644 --- a/lib/widgets/exercises/videos.dart +++ b/lib/widgets/exercises/videos.dart @@ -68,7 +68,8 @@ class _ExerciseVideoWidgetState extends State { /// /// Taken from this example: https://pub.dev/packages/video_player/example class _ControlsOverlay extends StatelessWidget { - const _ControlsOverlay({Key? key, required this.controller}) : super(key: key); + const _ControlsOverlay({Key? key, required this.controller}) + : super(key: key); static const _playbackRates = [ 0.25, diff --git a/lib/widgets/gallery/forms.dart b/lib/widgets/gallery/forms.dart index c9cdf864..d1b00f1e 100644 --- a/lib/widgets/gallery/forms.dart +++ b/lib/widgets/gallery/forms.dart @@ -113,7 +113,8 @@ class _ImageFormState extends State { _showPicker(ImageSource.camera); }, leading: const Icon(Icons.photo_camera), - title: Text(AppLocalizations.of(context).takePicture), + title: + Text(AppLocalizations.of(context).takePicture), ), ListTile( onTap: () { @@ -121,7 +122,8 @@ class _ImageFormState extends State { _showPicker(ImageSource.gallery); }, leading: const Icon(Icons.photo_library), - title: Text(AppLocalizations.of(context).chooseFromLibrary)) + title: Text(AppLocalizations.of(context) + .chooseFromLibrary)) ], ), ); @@ -166,7 +168,8 @@ class _ImageFormState extends State { ), TextFormField( key: const Key('field-description'), - decoration: InputDecoration(labelText: AppLocalizations.of(context).description), + decoration: InputDecoration( + labelText: AppLocalizations.of(context).description), minLines: 3, maxLines: 10, controller: descriptionController, diff --git a/lib/widgets/gallery/overview.dart b/lib/widgets/gallery/overview.dart index a0011c2e..c28c2681 100644 --- a/lib/widgets/gallery/overview.dart +++ b/lib/widgets/gallery/overview.dart @@ -59,7 +59,8 @@ class Gallery extends StatelessWidget { child: Column( children: [ Text( - DateFormat.yMd(Localizations.localeOf(context).languageCode) + DateFormat.yMd(Localizations.localeOf(context) + .languageCode) .format(currentImage.date), style: Theme.of(context).textTheme.headline5, ), @@ -67,7 +68,8 @@ class Gallery extends StatelessWidget { child: Image.network(currentImage.url!), ), Padding( - padding: const EdgeInsets.symmetric(vertical: 8), + padding: + const EdgeInsets.symmetric(vertical: 8), child: Text(currentImage.description), ), Row( @@ -76,7 +78,8 @@ class Gallery extends StatelessWidget { IconButton( icon: const Icon(Icons.delete), onPressed: () { - Provider.of(context, listen: false) + Provider.of(context, + listen: false) .deleteImage(currentImage); Navigator.of(context).pop(); }), @@ -105,7 +108,8 @@ class Gallery extends StatelessWidget { }, child: FadeInImage( key: Key('image-${currentImage.id}'), - placeholder: const AssetImage('assets/images/placeholder.png'), + placeholder: + const AssetImage('assets/images/placeholder.png'), image: NetworkImage(currentImage.url!), fit: BoxFit.cover, ), diff --git a/lib/widgets/measurements/categories_card.dart b/lib/widgets/measurements/categories_card.dart index bbe89cfc..dacfa07c 100644 --- a/lib/widgets/measurements/categories_card.dart +++ b/lib/widgets/measurements/categories_card.dart @@ -30,7 +30,9 @@ class CategoriesCard extends StatelessWidget { padding: const EdgeInsets.all(10), height: 220, child: MeasurementChartWidgetFl( - currentCategory.entries.map((e) => MeasurementChartEntry(e.value, e.date)).toList(), + currentCategory.entries + .map((e) => MeasurementChartEntry(e.value, e.date)) + .toList(), unit: currentCategory.unit, ), ), diff --git a/lib/widgets/measurements/charts.dart b/lib/widgets/measurements/charts.dart index fdbae75f..f9d793ac 100644 --- a/lib/widgets/measurements/charts.dart +++ b/lib/widgets/measurements/charts.dart @@ -29,7 +29,8 @@ class MeasurementChartWidgetFl extends StatefulWidget { const MeasurementChartWidgetFl(this._entries, {this.unit = 'kg'}); @override - State createState() => _MeasurementChartWidgetFlState(); + State createState() => + _MeasurementChartWidgetFlState(); } class _MeasurementChartWidgetFlState extends State { @@ -52,7 +53,8 @@ class _MeasurementChartWidgetFlState extends State { } LineTouchData tooltipData() { - return LineTouchData(touchTooltipData: LineTouchTooltipData(getTooltipItems: (touchedSpots) { + return LineTouchData( + touchTooltipData: LineTouchTooltipData(getTooltipItems: (touchedSpots) { return touchedSpots.map((touchedSpot) { return LineTooltipItem( '${touchedSpot.y} kg', @@ -100,13 +102,16 @@ class _MeasurementChartWidgetFlState extends State { if (value == meta.min || value == meta.max) { return const Text(''); } - final DateTime date = DateTime.fromMillisecondsSinceEpoch(value.toInt()); + final DateTime date = + DateTime.fromMillisecondsSinceEpoch(value.toInt()); return Text( - DateFormat.yMd(Localizations.localeOf(context).languageCode).format(date), + DateFormat.yMd(Localizations.localeOf(context).languageCode) + .format(date), ); }, interval: widget._entries.isNotEmpty - ? chartGetInterval(widget._entries.last.date, widget._entries.first.date) + ? chartGetInterval( + widget._entries.last.date, widget._entries.first.date) : 1000, ), ), @@ -129,8 +134,8 @@ class _MeasurementChartWidgetFlState extends State { lineBarsData: [ LineChartBarData( spots: [ - ...widget._entries - .map((e) => FlSpot(e.date.millisecondsSinceEpoch.toDouble(), e.value.toDouble())) + ...widget._entries.map((e) => FlSpot( + e.date.millisecondsSinceEpoch.toDouble(), e.value.toDouble())) ], isCurved: false, color: wgerSecondaryColor, diff --git a/lib/widgets/measurements/entries.dart b/lib/widgets/measurements/entries.dart index 55b2023f..21afede4 100644 --- a/lib/widgets/measurements/entries.dart +++ b/lib/widgets/measurements/entries.dart @@ -41,7 +41,9 @@ class EntriesList extends StatelessWidget { padding: const EdgeInsets.all(10), height: 220, child: MeasurementChartWidgetFl( - _category.entries.map((e) => MeasurementChartEntry(e.value, e.date)).toList(), + _category.entries + .map((e) => MeasurementChartEntry(e.value, e.date)) + .toList(), unit: _category.unit, ), ), @@ -51,7 +53,8 @@ class EntriesList extends StatelessWidget { itemCount: _category.entries.length, itemBuilder: (context, index) { final currentEntry = _category.entries[index]; - final provider = Provider.of(context, listen: false); + final provider = + Provider.of(context, listen: false); return Dismissible( key: Key(currentEntry.id.toString()), @@ -114,7 +117,8 @@ class EntriesList extends StatelessWidget { ), child: Card( child: ListTile( - title: Text('${currentEntry.value.toString()} ${_category.unit}'), + title: Text( + '${currentEntry.value.toString()} ${_category.unit}'), subtitle: Text( DateFormat.yMd(Localizations.localeOf(context).languageCode) .format(currentEntry.date), diff --git a/lib/widgets/measurements/forms.dart b/lib/widgets/measurements/forms.dart index 4e6e09e9..f502c087 100644 --- a/lib/widgets/measurements/forms.dart +++ b/lib/widgets/measurements/forms.dart @@ -31,7 +31,11 @@ class MeasurementCategoryForm extends StatelessWidget { final nameController = TextEditingController(); final unitController = TextEditingController(); - final Map categoryData = {'id': null, 'name': '', 'unit': ''}; + final Map categoryData = { + 'id': null, + 'name': '', + 'unit': '' + }; MeasurementCategoryForm([MeasurementCategory? category]) { //this._category = category ?? MeasurementCategory(); @@ -55,7 +59,8 @@ class MeasurementCategoryForm extends StatelessWidget { TextFormField( decoration: InputDecoration( labelText: AppLocalizations.of(context).name, - helperText: AppLocalizations.of(context).measurementCategoriesHelpText, + helperText: + AppLocalizations.of(context).measurementCategoriesHelpText, ), controller: nameController, onSaved: (newValue) { @@ -73,7 +78,8 @@ class MeasurementCategoryForm extends StatelessWidget { TextFormField( decoration: InputDecoration( labelText: AppLocalizations.of(context).unit, - helperText: AppLocalizations.of(context).measurementEntriesHelpText, + helperText: + AppLocalizations.of(context).measurementEntriesHelpText, ), controller: unitController, onSaved: (newValue) { @@ -99,15 +105,19 @@ class MeasurementCategoryForm extends StatelessWidget { // Save the entry on the server try { categoryData['id'] == null - ? await Provider.of(context, listen: false).addCategory( + ? await Provider.of(context, + listen: false) + .addCategory( MeasurementCategory( id: categoryData['id'], name: categoryData['name'], unit: categoryData['unit'], ), ) - : await Provider.of(context, listen: false).editCategory( - categoryData['id'], categoryData['name'], categoryData['unit']); + : await Provider.of(context, + listen: false) + .editCategory(categoryData['id'], categoryData['name'], + categoryData['unit']); } on WgerHttpException catch (error) { if (context.mounted) { showHttpExceptionErrorDialog(error, context); @@ -161,7 +171,8 @@ class MeasurementEntryForm extends StatelessWidget { @override Widget build(BuildContext context) { - final measurementProvider = Provider.of(context, listen: false); + final measurementProvider = + Provider.of(context, listen: false); final measurementCategory = measurementProvider.categories.firstWhere( (category) => category.id == _categoryId, ); @@ -171,7 +182,8 @@ class MeasurementEntryForm extends StatelessWidget { child: Column( children: [ TextFormField( - decoration: InputDecoration(labelText: AppLocalizations.of(context).date), + decoration: + InputDecoration(labelText: AppLocalizations.of(context).date), readOnly: true, // Hide text cursor controller: _dateController, onTap: () async { @@ -212,7 +224,8 @@ class MeasurementEntryForm extends StatelessWidget { decoration: InputDecoration( labelText: AppLocalizations.of(context).value, suffixIcon: Text(measurementCategory.unit), - suffixIconConstraints: const BoxConstraints(minWidth: 0, minHeight: 0), + suffixIconConstraints: + const BoxConstraints(minWidth: 0, minHeight: 0), ), controller: _valueController, keyboardType: TextInputType.number, @@ -233,7 +246,8 @@ class MeasurementEntryForm extends StatelessWidget { ), // Value TextFormField( - decoration: InputDecoration(labelText: AppLocalizations.of(context).notes), + decoration: + InputDecoration(labelText: AppLocalizations.of(context).notes), controller: _notesController, onSaved: (newValue) { _entryData['notes'] = newValue; @@ -241,8 +255,10 @@ class MeasurementEntryForm extends StatelessWidget { validator: (value) { const minLength = 0; const maxLength = 100; - if (value!.isNotEmpty && (value.length < minLength || value.length > maxLength)) { - return AppLocalizations.of(context).enterCharacters(minLength, maxLength); + if (value!.isNotEmpty && + (value.length < minLength || value.length > maxLength)) { + return AppLocalizations.of(context) + .enterCharacters(minLength, maxLength); } return null; }, @@ -261,7 +277,8 @@ class MeasurementEntryForm extends StatelessWidget { // Save the entry on the server try { _entryData['id'] == null - ? await Provider.of(context, listen: false) + ? await Provider.of(context, + listen: false) .addEntry(MeasurementEntry( id: _entryData['id'], category: _entryData['category'], @@ -269,7 +286,9 @@ class MeasurementEntryForm extends StatelessWidget { value: _entryData['value'], notes: _entryData['notes'], )) - : await Provider.of(context, listen: false).editEntry( + : await Provider.of(context, + listen: false) + .editEntry( _entryData['id'], _entryData['category'], _entryData['value'], diff --git a/lib/widgets/nutrition/charts.dart b/lib/widgets/nutrition/charts.dart index 24e605ad..bc0c7182 100644 --- a/lib/widgets/nutrition/charts.dart +++ b/lib/widgets/nutrition/charts.dart @@ -41,7 +41,8 @@ class FlNutritionalPlanPieChartWidget extends StatefulWidget { State createState() => FlNutritionalPlanPieChartState(); } -class FlNutritionalPlanPieChartState extends State { +class FlNutritionalPlanPieChartState + extends State { int touchedIndex = -1; @override @@ -65,7 +66,8 @@ class FlNutritionalPlanPieChartState extends State createState() => NutritionalDiaryChartWidgetFlState(); } -class NutritionalDiaryChartWidgetFlState extends State { +class NutritionalDiaryChartWidgetFlState + extends State { Widget bottomTitles(double value, TitleMeta meta) { const style = TextStyle(fontSize: 10); String text; @@ -409,7 +413,8 @@ class FlNutritionalDiaryChartWidget extends StatefulWidget { State createState() => FlNutritionalDiaryChartWidgetState(); } -class FlNutritionalDiaryChartWidgetState extends State { +class FlNutritionalDiaryChartWidgetState + extends State { final Duration animDuration = const Duration(milliseconds: 250); int touchedIndex = -1; @@ -429,7 +434,8 @@ class FlNutritionalDiaryChartWidgetState extends State dateList = []; DateTime currentDate = startDate; - while (currentDate.isBefore(endDate) || currentDate.isAtSameMomentAs(endDate)) { + while (currentDate.isBefore(endDate) || + currentDate.isAtSameMomentAs(endDate)) { dateList.add(currentDate); currentDate = currentDate.add(const Duration(days: 1)); } @@ -470,7 +476,8 @@ class FlNutritionalDiaryChartWidgetState extends State showingGroups() { final logEntries = widget._nutritionalPlan.logEntriesValues; final List out = []; - final dateList = getDatesBetween(logEntries.keys.first, logEntries.keys.last); + final dateList = + getDatesBetween(logEntries.keys.first, logEntries.keys.last); for (final date in dateList.reversed) { out.add( diff --git a/lib/widgets/nutrition/forms.dart b/lib/widgets/nutrition/forms.dart index b0b00225..170be621 100644 --- a/lib/widgets/nutrition/forms.dart +++ b/lib/widgets/nutrition/forms.dart @@ -54,7 +54,8 @@ class MealForm extends StatelessWidget { children: [ TextFormField( key: const Key('field-time'), - decoration: InputDecoration(labelText: AppLocalizations.of(context).time), + decoration: + InputDecoration(labelText: AppLocalizations.of(context).time), controller: _timeController, onTap: () async { // Stop keyboard from appearing @@ -76,7 +77,8 @@ class MealForm extends StatelessWidget { TextFormField( maxLength: 25, key: const Key('field-name'), - decoration: InputDecoration(labelText: AppLocalizations.of(context).name), + decoration: + InputDecoration(labelText: AppLocalizations.of(context).name), controller: _nameController, onSaved: (newValue) { _meal.name = newValue as String; @@ -94,9 +96,12 @@ class MealForm extends StatelessWidget { try { _meal.id == null - ? Provider.of(context, listen: false) + ? Provider.of(context, + listen: false) .addMeal(_meal, _planId) - : Provider.of(context, listen: false).editMeal(_meal); + : Provider.of(context, + listen: false) + .editMeal(_meal); } on WgerHttpException catch (error) { showHttpExceptionErrorDialog(error, context); } catch (error) { @@ -153,7 +158,8 @@ class MealItemForm extends StatelessWidget { ), TextFormField( key: const Key('field-weight'), - decoration: InputDecoration(labelText: AppLocalizations.of(context).weight), + decoration: InputDecoration( + labelText: AppLocalizations.of(context).weight), controller: _amountController, keyboardType: TextInputType.number, onFieldSubmitted: (_) {}, @@ -177,7 +183,8 @@ class MealItemForm extends StatelessWidget { return; } _form.currentState!.save(); - _mealItem.ingredientId = int.parse(_ingredientIdController.text); + _mealItem.ingredientId = + int.parse(_ingredientIdController.text); try { Provider.of(context, listen: false) @@ -203,15 +210,19 @@ class MealItemForm extends StatelessWidget { return Card( child: ListTile( onTap: () { - _ingredientController.text = _listMealItems[index].ingredientObj.name; + _ingredientController.text = + _listMealItems[index].ingredientObj.name; _ingredientIdController.text = _listMealItems[index].ingredientObj.id.toString(); - _amountController.text = _listMealItems[index].amount.toStringAsFixed(0); - _mealItem.ingredientId = _listMealItems[index].ingredientId; + _amountController.text = + _listMealItems[index].amount.toStringAsFixed(0); + _mealItem.ingredientId = + _listMealItems[index].ingredientId; _mealItem.amount = _listMealItems[index].amount; }, title: Text(_listMealItems[index].ingredientObj.name), - subtitle: Text('${_listMealItems[index].amount.toStringAsFixed(0)}$unit'), + subtitle: Text( + '${_listMealItems[index].amount.toStringAsFixed(0)}$unit'), trailing: const Icon(Icons.copy), ), ); @@ -256,7 +267,8 @@ class IngredientLogForm extends StatelessWidget { _ingredientController, ), TextFormField( - decoration: InputDecoration(labelText: AppLocalizations.of(context).weight), + decoration: InputDecoration( + labelText: AppLocalizations.of(context).weight), controller: _amountController, keyboardType: TextInputType.number, onFieldSubmitted: (_) {}, @@ -305,11 +317,13 @@ class IngredientLogForm extends StatelessWidget { return; } _form.currentState!.save(); - _mealItem.ingredientId = int.parse(_ingredientIdController.text); + _mealItem.ingredientId = + int.parse(_ingredientIdController.text); try { - Provider.of(context, listen: false).logIngredientToDiary( - _mealItem, _plan.id!, DateTime.parse(_dateController.text)); + Provider.of(context, listen: false) + .logIngredientToDiary(_mealItem, _plan.id!, + DateTime.parse(_dateController.text)); } on WgerHttpException catch (error) { showHttpExceptionErrorDialog(error, context); } catch (error) { @@ -331,15 +345,19 @@ class IngredientLogForm extends StatelessWidget { return Card( child: ListTile( onTap: () { - _ingredientController.text = diaryEntries[index].ingredientObj.name; + _ingredientController.text = + diaryEntries[index].ingredientObj.name; _ingredientIdController.text = diaryEntries[index].ingredientObj.id.toString(); - _amountController.text = diaryEntries[index].amount.toStringAsFixed(0); - _mealItem.ingredientId = diaryEntries[index].ingredientId; + _amountController.text = + diaryEntries[index].amount.toStringAsFixed(0); + _mealItem.ingredientId = + diaryEntries[index].ingredientId; _mealItem.amount = diaryEntries[index].amount; }, title: Text(_plan.logs[index].ingredientObj.name), - subtitle: Text('${diaryEntries[index].amount.toStringAsFixed(0)}$unit'), + subtitle: Text( + '${diaryEntries[index].amount.toStringAsFixed(0)}$unit'), trailing: const Icon(Icons.copy), ), ); @@ -372,7 +390,8 @@ class PlanForm extends StatelessWidget { // Description TextFormField( key: const Key('field-description'), - decoration: InputDecoration(labelText: AppLocalizations.of(context).description), + decoration: InputDecoration( + labelText: AppLocalizations.of(context).description), controller: _descriptionController, onFieldSubmitted: (_) {}, onSaved: (newValue) { @@ -393,12 +412,15 @@ class PlanForm extends StatelessWidget { // Save to DB try { if (_plan.id != null) { - await Provider.of(context, listen: false).editPlan(_plan); + await Provider.of(context, + listen: false) + .editPlan(_plan); if (context.mounted) { Navigator.of(context).pop(); } } else { - _plan = await Provider.of(context, listen: false) + _plan = await Provider.of(context, + listen: false) .addPlan(_plan); if (context.mounted) { Navigator.of(context).pushReplacementNamed( diff --git a/lib/widgets/nutrition/helpers.dart b/lib/widgets/nutrition/helpers.dart index 9aede4fa..ed43f72d 100644 --- a/lib/widgets/nutrition/helpers.dart +++ b/lib/widgets/nutrition/helpers.dart @@ -21,7 +21,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:wger/models/nutrition/nutritional_values.dart'; -List getMutedNutritionalValues(NutritionalValues values, BuildContext context) { +List getMutedNutritionalValues( + NutritionalValues values, BuildContext context) { final List out = [ Text( '${AppLocalizations.of(context).energy}: ' diff --git a/lib/widgets/nutrition/meal.dart b/lib/widgets/nutrition/meal.dart index 9e7b4905..e41c8eb9 100644 --- a/lib/widgets/nutrition/meal.dart +++ b/lib/widgets/nutrition/meal.dart @@ -59,7 +59,8 @@ class _MealWidgetState extends State { child: Card( child: Column( children: [ - DismissibleMealHeader(_expanded, _toggleExpanded, meal: widget._meal), + DismissibleMealHeader(_expanded, _toggleExpanded, + meal: widget._meal), if (_expanded) Row( mainAxisSize: MainAxisSize.max, @@ -68,7 +69,8 @@ class _MealWidgetState extends State { IconButton( onPressed: () { // Delete the meal - Provider.of(context, listen: false) + Provider.of(context, + listen: false) .deleteMeal(widget._meal); // and inform the user @@ -93,7 +95,8 @@ class _MealWidgetState extends State { icon: const Icon(Icons.history_edu), color: Colors.white, onPressed: () { - Provider.of(context, listen: false) + Provider.of(context, + listen: false) .logMealToDiary(widget._meal); ScaffoldMessenger.of(context).showSnackBar( SnackBar( @@ -122,7 +125,9 @@ class _MealWidgetState extends State { ], ), const Divider(), - ...widget._meal.mealItems.map((item) => MealItemWidget(item, _expanded)).toList(), + ...widget._meal.mealItems + .map((item) => MealItemWidget(item, _expanded)) + .toList(), OutlinedButton( child: Text(AppLocalizations.of(context).addIngredient), onPressed: () { @@ -165,10 +170,13 @@ class MealItemWidget extends StatelessWidget { return ListTile( leading: _item.ingredientObj.image != null ? GestureDetector( - child: CircleAvatar(backgroundImage: NetworkImage(_item.ingredientObj.image!.image)), + child: CircleAvatar( + backgroundImage: + NetworkImage(_item.ingredientObj.image!.image)), onTap: () async { if (_item.ingredientObj.image!.objectUrl != '') { - return launchURL(_item.ingredientObj.image!.objectUrl, context); + return launchURL( + _item.ingredientObj.image!.objectUrl, context); } else { return; } @@ -181,7 +189,9 @@ class MealItemWidget extends StatelessWidget { ), subtitle: Column( crossAxisAlignment: CrossAxisAlignment.start, - children: [if (_expanded) ...getMutedNutritionalValues(values, context)], + children: [ + if (_expanded) ...getMutedNutritionalValues(values, context) + ], ), trailing: _expanded ? IconButton( @@ -189,7 +199,8 @@ class MealItemWidget extends StatelessWidget { iconSize: ICON_SIZE_SMALL, onPressed: () { // Delete the meal item - Provider.of(context, listen: false).deleteMealItem(_item); + Provider.of(context, listen: false) + .deleteMealItem(_item); // and inform the user ScaffoldMessenger.of(context).showSnackBar( @@ -244,7 +255,8 @@ class DismissibleMealHeader extends StatelessWidget { confirmDismiss: (direction) async { // Delete if (direction == DismissDirection.startToEnd) { - Provider.of(context, listen: false).logMealToDiary(_meal); + Provider.of(context, listen: false) + .logMealToDiary(_meal); ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text( @@ -277,7 +289,9 @@ class DismissibleMealHeader extends StatelessWidget { ), IconButton( visualDensity: VisualDensity.compact, - icon: _expanded ? const Icon(Icons.unfold_less) : const Icon(Icons.unfold_more), + icon: _expanded + ? const Icon(Icons.unfold_less) + : const Icon(Icons.unfold_more), onPressed: () { _toggle(); }, diff --git a/lib/widgets/nutrition/nutritional_diary_detail.dart b/lib/widgets/nutrition/nutritional_diary_detail.dart index 6368fbe7..2f96cfbc 100644 --- a/lib/widgets/nutrition/nutritional_diary_detail.dart +++ b/lib/widgets/nutrition/nutritional_diary_detail.dart @@ -77,10 +77,12 @@ class NutritionalDiaryDetailWidget extends StatelessWidget { child: Text(AppLocalizations.of(context).energy), ), Text( - valuesTotal.energy.toStringAsFixed(0) + AppLocalizations.of(context).kcal, + valuesTotal.energy.toStringAsFixed(0) + + AppLocalizations.of(context).kcal, ), Text( - valuesDate.energy.toStringAsFixed(0) + AppLocalizations.of(context).kcal, + valuesDate.energy.toStringAsFixed(0) + + AppLocalizations.of(context).kcal, ), Text((valuesDate.energy - valuesTotal.energy).toStringAsFixed(0)), ], @@ -91,8 +93,10 @@ class NutritionalDiaryDetailWidget extends StatelessWidget { padding: const EdgeInsets.symmetric(vertical: tablePadding), child: Text(AppLocalizations.of(context).protein), ), - Text(valuesTotal.protein.toStringAsFixed(0) + AppLocalizations.of(context).g), - Text(valuesDate.protein.toStringAsFixed(0) + AppLocalizations.of(context).g), + Text(valuesTotal.protein.toStringAsFixed(0) + + AppLocalizations.of(context).g), + Text(valuesDate.protein.toStringAsFixed(0) + + AppLocalizations.of(context).g), Text((valuesDate.protein - valuesTotal.protein).toStringAsFixed(0)), ], ), @@ -102,22 +106,28 @@ class NutritionalDiaryDetailWidget extends StatelessWidget { padding: const EdgeInsets.symmetric(vertical: tablePadding), child: Text(AppLocalizations.of(context).carbohydrates), ), - Text(valuesTotal.carbohydrates.toStringAsFixed(0) + AppLocalizations.of(context).g), - Text(valuesDate.carbohydrates.toStringAsFixed(0) + AppLocalizations.of(context).g), - Text((valuesDate.carbohydrates - valuesTotal.carbohydrates).toStringAsFixed(0)), + Text(valuesTotal.carbohydrates.toStringAsFixed(0) + + AppLocalizations.of(context).g), + Text(valuesDate.carbohydrates.toStringAsFixed(0) + + AppLocalizations.of(context).g), + Text((valuesDate.carbohydrates - valuesTotal.carbohydrates) + .toStringAsFixed(0)), ], ), TableRow( children: [ Padding( - padding: const EdgeInsets.symmetric(vertical: tablePadding, horizontal: 12), + padding: const EdgeInsets.symmetric( + vertical: tablePadding, horizontal: 12), child: Text(AppLocalizations.of(context).sugars), ), + Text(valuesTotal.carbohydratesSugar.toStringAsFixed(0) + + AppLocalizations.of(context).g), + Text(valuesDate.carbohydratesSugar.toStringAsFixed(0) + + AppLocalizations.of(context).g), Text( - valuesTotal.carbohydratesSugar.toStringAsFixed(0) + AppLocalizations.of(context).g), - Text(valuesDate.carbohydratesSugar.toStringAsFixed(0) + AppLocalizations.of(context).g), - Text((valuesDate.carbohydratesSugar - valuesTotal.carbohydratesSugar) - .toStringAsFixed(0)), + (valuesDate.carbohydratesSugar - valuesTotal.carbohydratesSugar) + .toStringAsFixed(0)), ], ), TableRow( @@ -126,20 +136,26 @@ class NutritionalDiaryDetailWidget extends StatelessWidget { padding: const EdgeInsets.symmetric(vertical: tablePadding), child: Text(AppLocalizations.of(context).fat), ), - Text(valuesTotal.fat.toStringAsFixed(0) + AppLocalizations.of(context).g), - Text(valuesDate.fat.toStringAsFixed(0) + AppLocalizations.of(context).g), + Text(valuesTotal.fat.toStringAsFixed(0) + + AppLocalizations.of(context).g), + Text(valuesDate.fat.toStringAsFixed(0) + + AppLocalizations.of(context).g), Text((valuesDate.fat - valuesTotal.fat).toStringAsFixed(0)), ], ), TableRow( children: [ Padding( - padding: const EdgeInsets.symmetric(vertical: tablePadding, horizontal: 12), + padding: const EdgeInsets.symmetric( + vertical: tablePadding, horizontal: 12), child: Text(AppLocalizations.of(context).saturatedFat), ), - Text(valuesTotal.fatSaturated.toStringAsFixed(0) + AppLocalizations.of(context).g), - Text(valuesDate.fatSaturated.toStringAsFixed(0) + AppLocalizations.of(context).g), - Text((valuesDate.fatSaturated - valuesTotal.fatSaturated).toStringAsFixed(0)), + Text(valuesTotal.fatSaturated.toStringAsFixed(0) + + AppLocalizations.of(context).g), + Text(valuesDate.fatSaturated.toStringAsFixed(0) + + AppLocalizations.of(context).g), + Text((valuesDate.fatSaturated - valuesTotal.fatSaturated) + .toStringAsFixed(0)), ], ), TableRow( @@ -148,8 +164,10 @@ class NutritionalDiaryDetailWidget extends StatelessWidget { padding: const EdgeInsets.symmetric(vertical: tablePadding), child: Text(AppLocalizations.of(context).fibres), ), - Text(valuesTotal.fibres.toStringAsFixed(0) + AppLocalizations.of(context).g), - Text(valuesDate.fibres.toStringAsFixed(0) + AppLocalizations.of(context).g), + Text(valuesTotal.fibres.toStringAsFixed(0) + + AppLocalizations.of(context).g), + Text(valuesDate.fibres.toStringAsFixed(0) + + AppLocalizations.of(context).g), Text((valuesDate.fibres - valuesTotal.fibres).toStringAsFixed(0)), ], ), @@ -159,8 +177,10 @@ class NutritionalDiaryDetailWidget extends StatelessWidget { padding: const EdgeInsets.symmetric(vertical: tablePadding), child: Text(AppLocalizations.of(context).sodium), ), - Text(valuesTotal.sodium.toStringAsFixed(0) + AppLocalizations.of(context).g), - Text(valuesDate.sodium.toStringAsFixed(0) + AppLocalizations.of(context).g), + Text(valuesTotal.sodium.toStringAsFixed(0) + + AppLocalizations.of(context).g), + Text(valuesDate.sodium.toStringAsFixed(0) + + AppLocalizations.of(context).g), Text((valuesDate.sodium - valuesTotal.sodium).toStringAsFixed(0)), ], ), @@ -177,7 +197,8 @@ class NutritionalDiaryDetailWidget extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.start, children: [ Text( - DateFormat.Hm(Localizations.localeOf(context).languageCode).format(log.datetime), + DateFormat.Hm(Localizations.localeOf(context).languageCode) + .format(log.datetime), style: const TextStyle(fontWeight: FontWeight.bold), ), const SizedBox(width: 8), diff --git a/lib/widgets/nutrition/nutritional_plan_detail.dart b/lib/widgets/nutrition/nutritional_plan_detail.dart index 993a2863..6b024e42 100644 --- a/lib/widgets/nutrition/nutritional_plan_detail.dart +++ b/lib/widgets/nutrition/nutritional_plan_detail.dart @@ -42,8 +42,10 @@ class NutritionalPlanDetailWidget extends StatelessWidget { @override Widget build(BuildContext context) { final nutritionalValues = _nutritionalPlan.nutritionalValues; - final valuesPercentage = _nutritionalPlan.energyPercentage(nutritionalValues); - final lastWeightEntry = Provider.of(context, listen: false).getLastEntry(); + final valuesPercentage = + _nutritionalPlan.energyPercentage(nutritionalValues); + final lastWeightEntry = + Provider.of(context, listen: false).getLastEntry(); final valuesGperKg = lastWeightEntry != null ? _nutritionalPlan.gPerBodyKg(lastWeightEntry.weight, nutritionalValues) : null; @@ -88,7 +90,8 @@ class NutritionalPlanDetailWidget extends StatelessWidget { TableRow( children: [ Padding( - padding: const EdgeInsets.symmetric(vertical: tablePadding), + padding: + const EdgeInsets.symmetric(vertical: tablePadding), child: Text( AppLocalizations.of(context).macronutrients, style: const TextStyle(fontWeight: FontWeight.bold), @@ -111,7 +114,8 @@ class NutritionalPlanDetailWidget extends StatelessWidget { TableRow( children: [ Padding( - padding: const EdgeInsets.symmetric(vertical: tablePadding), + padding: + const EdgeInsets.symmetric(vertical: tablePadding), child: Text(AppLocalizations.of(context).energy), ), Text( @@ -125,34 +129,42 @@ class NutritionalPlanDetailWidget extends StatelessWidget { TableRow( children: [ Padding( - padding: const EdgeInsets.symmetric(vertical: tablePadding), + padding: + const EdgeInsets.symmetric(vertical: tablePadding), child: Text(AppLocalizations.of(context).protein), ), Text(nutritionalValues.protein.toStringAsFixed(0) + AppLocalizations.of(context).g), Text(valuesPercentage.protein.toStringAsFixed(1)), - Text(valuesGperKg != null ? valuesGperKg.protein.toStringAsFixed(1) : ''), + Text(valuesGperKg != null + ? valuesGperKg.protein.toStringAsFixed(1) + : ''), ], ), TableRow( children: [ Padding( - padding: const EdgeInsets.symmetric(vertical: tablePadding), + padding: + const EdgeInsets.symmetric(vertical: tablePadding), child: Text(AppLocalizations.of(context).carbohydrates), ), Text(nutritionalValues.carbohydrates.toStringAsFixed(0) + AppLocalizations.of(context).g), Text(valuesPercentage.carbohydrates.toStringAsFixed(1)), - Text(valuesGperKg != null ? valuesGperKg.carbohydrates.toStringAsFixed(1) : ''), + Text(valuesGperKg != null + ? valuesGperKg.carbohydrates.toStringAsFixed(1) + : ''), ], ), TableRow( children: [ Padding( - padding: const EdgeInsets.symmetric(vertical: tablePadding, horizontal: 12), + padding: const EdgeInsets.symmetric( + vertical: tablePadding, horizontal: 12), child: Text(AppLocalizations.of(context).sugars), ), - Text(nutritionalValues.carbohydratesSugar.toStringAsFixed(0) + + Text(nutritionalValues.carbohydratesSugar + .toStringAsFixed(0) + AppLocalizations.of(context).g), const Text(''), const Text(''), @@ -161,18 +173,23 @@ class NutritionalPlanDetailWidget extends StatelessWidget { TableRow( children: [ Padding( - padding: const EdgeInsets.symmetric(vertical: tablePadding), + padding: + const EdgeInsets.symmetric(vertical: tablePadding), child: Text(AppLocalizations.of(context).fat), ), - Text(nutritionalValues.fat.toStringAsFixed(0) + AppLocalizations.of(context).g), + Text(nutritionalValues.fat.toStringAsFixed(0) + + AppLocalizations.of(context).g), Text(valuesPercentage.fat.toStringAsFixed(1)), - Text(valuesGperKg != null ? valuesGperKg.fat.toStringAsFixed(1) : ''), + Text(valuesGperKg != null + ? valuesGperKg.fat.toStringAsFixed(1) + : ''), ], ), TableRow( children: [ Padding( - padding: const EdgeInsets.symmetric(vertical: tablePadding, horizontal: 12), + padding: const EdgeInsets.symmetric( + vertical: tablePadding, horizontal: 12), child: Text(AppLocalizations.of(context).saturatedFat), ), Text(nutritionalValues.fatSaturated.toStringAsFixed(0) + @@ -184,7 +201,8 @@ class NutritionalPlanDetailWidget extends StatelessWidget { TableRow( children: [ Padding( - padding: const EdgeInsets.symmetric(vertical: tablePadding), + padding: + const EdgeInsets.symmetric(vertical: tablePadding), child: Text(AppLocalizations.of(context).fibres), ), Text(nutritionalValues.fibres.toStringAsFixed(0) + @@ -196,7 +214,8 @@ class NutritionalPlanDetailWidget extends StatelessWidget { TableRow( children: [ Padding( - padding: const EdgeInsets.symmetric(vertical: tablePadding), + padding: + const EdgeInsets.symmetric(vertical: tablePadding), child: Text(AppLocalizations.of(context).sodium), ), Text(nutritionalValues.sodium.toStringAsFixed(0) + @@ -217,7 +236,8 @@ class NutritionalPlanDetailWidget extends StatelessWidget { Container( padding: const EdgeInsets.only(top: 15, left: 15, right: 15), height: 300, - child: NutritionalDiaryChartWidgetFl(nutritionalPlan: _nutritionalPlan), // chart + child: NutritionalDiaryChartWidgetFl( + nutritionalPlan: _nutritionalPlan), // chart ), Padding( padding: const EdgeInsets.only(bottom: 40, left: 25, right: 25), @@ -256,7 +276,8 @@ class NutritionalPlanDetailWidget extends StatelessWidget { Container( padding: const EdgeInsets.all(15), height: 220, - child: FlNutritionalDiaryChartWidget(nutritionalPlan: _nutritionalPlan), // chart + child: FlNutritionalDiaryChartWidget( + nutritionalPlan: _nutritionalPlan), // chart ), SizedBox( height: 200, @@ -281,8 +302,8 @@ class NutritionalPlanDetailWidget extends StatelessWidget { ), ), ..._nutritionalPlan.logEntriesValues.entries - .map((entry) => - NutritionDiaryEntry(entry.key, entry.value, _nutritionalPlan)) + .map((entry) => NutritionDiaryEntry( + entry.key, entry.value, _nutritionalPlan)) .toList() .reversed, ], @@ -320,7 +341,8 @@ class NutritionDiaryEntry extends StatelessWidget { arguments: NutritionalDiaryArguments(plan, date), ), child: Text( - DateFormat.yMd(Localizations.localeOf(context).languageCode).format(date), + DateFormat.yMd(Localizations.localeOf(context).languageCode) + .format(date), )), Text(values.energy.toStringAsFixed(0)), Text(values.protein.toStringAsFixed(0)), diff --git a/lib/widgets/nutrition/nutritional_plans_list.dart b/lib/widgets/nutrition/nutritional_plans_list.dart index 6d1eae27..ddd96a3f 100644 --- a/lib/widgets/nutrition/nutritional_plans_list.dart +++ b/lib/widgets/nutrition/nutritional_plans_list.dart @@ -48,21 +48,26 @@ class NutritionalPlansList extends StatelessWidget { builder: (BuildContext contextDialog) { return AlertDialog( content: Text( - AppLocalizations.of(context).confirmDelete(currentPlan.description), + AppLocalizations.of(context) + .confirmDelete(currentPlan.description), ), actions: [ TextButton( - child: Text(MaterialLocalizations.of(context).cancelButtonLabel), - onPressed: () => Navigator.of(contextDialog).pop(), + child: Text(MaterialLocalizations.of(context) + .cancelButtonLabel), + onPressed: () => + Navigator.of(contextDialog).pop(), ), TextButton( child: Text( AppLocalizations.of(context).delete, - style: TextStyle(color: Theme.of(context).errorColor), + style: TextStyle( + color: Theme.of(context).errorColor), ), onPressed: () { // Confirmed, delete the workout - _nutritionProvider.deletePlan(currentPlan.id!); + _nutritionProvider + .deletePlan(currentPlan.id!); // Close the popup Navigator.of(contextDialog).pop(); @@ -71,7 +76,8 @@ class NutritionalPlansList extends StatelessWidget { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text( - AppLocalizations.of(context).successfullyDeleted, + AppLocalizations.of(context) + .successfullyDeleted, textAlign: TextAlign.center, ), ), @@ -107,7 +113,8 @@ class NutritionalPlansList extends StatelessWidget { }, title: Text(currentPlan.getLabel(context)), subtitle: Text( - DateFormat.yMd(Localizations.localeOf(context).languageCode) + DateFormat.yMd( + Localizations.localeOf(context).languageCode) .format(currentPlan.creationDate), ), ), diff --git a/lib/widgets/nutrition/widgets.dart b/lib/widgets/nutrition/widgets.dart index 977eae0a..055e6e7c 100644 --- a/lib/widgets/nutrition/widgets.dart +++ b/lib/widgets/nutrition/widgets.dart @@ -71,8 +71,8 @@ class _IngredientTypeaheadState extends State { Future readerscan(BuildContext context) async { String scannedcode; try { - scannedcode = - await Navigator.of(context).push(MaterialPageRoute(builder: (context) => ScanReader())); + scannedcode = await Navigator.of(context) + .push(MaterialPageRoute(builder: (context) => ScanReader())); if (scannedcode.compareTo('-1') == 0) { return ''; @@ -94,22 +94,31 @@ class _IngredientTypeaheadState extends State { decoration: InputDecoration( prefixIcon: const Icon(Icons.search), labelText: AppLocalizations.of(context).searchIngredient, - suffixIcon: (widget.showScanner && !isDesktop) ? scanButton() : null, + suffixIcon: + (widget.showScanner && !isDesktop) ? scanButton() : null, ), ), suggestionsCallback: (pattern) async { - return Provider.of(context, listen: false).searchIngredient( + return Provider.of(context, listen: false) + .searchIngredient( pattern, languageCode: Localizations.localeOf(context).languageCode, searchEnglish: _searchEnglish, ); }, itemBuilder: (context, dynamic suggestion) { - final url = context.read().baseProvider.auth.serverUrl; + final url = context + .read() + .baseProvider + .auth + .serverUrl; return ListTile( leading: suggestion['data']['image'] != null - ? CircleAvatar(backgroundImage: NetworkImage(url! + suggestion['data']['image'])) - : const CircleIconAvatar(Icon(Icons.image, color: Colors.grey)), + ? CircleAvatar( + backgroundImage: + NetworkImage(url! + suggestion['data']['image'])) + : const CircleIconAvatar( + Icon(Icons.image, color: Colors.grey)), title: Text(suggestion['value']), subtitle: Text(suggestion['data']['id'].toString()), ); @@ -118,7 +127,8 @@ class _IngredientTypeaheadState extends State { return suggestionsBox; }, onSuggestionSelected: (dynamic suggestion) { - widget._ingredientIdController.text = suggestion['data']['id'].toString(); + widget._ingredientIdController.text = + suggestion['data']['id'].toString(); widget._ingredientController.text = suggestion['value']; }, validator: (value) { @@ -128,7 +138,8 @@ class _IngredientTypeaheadState extends State { return null; }, ), - if (Localizations.localeOf(context).languageCode != LANGUAGE_SHORT_ENGLISH) + if (Localizations.localeOf(context).languageCode != + LANGUAGE_SHORT_ENGLISH) SwitchListTile( title: Text(AppLocalizations.of(context).searchNamesInEnglish), value: _searchEnglish, @@ -153,7 +164,8 @@ class _IngredientTypeaheadState extends State { } if (widget.barcode!.isNotEmpty) { - final result = await Provider.of(context, listen: false) + final result = await Provider.of(context, + listen: false) .searchIngredientWithCode(widget.barcode!); if (result != null) { @@ -162,20 +174,24 @@ class _IngredientTypeaheadState extends State { builder: (ctx) => AlertDialog( key: const Key('found-dialog'), title: Text(AppLocalizations.of(context).productFound), - content: Text(AppLocalizations.of(context).productFoundDescription(result.name)), + content: Text(AppLocalizations.of(context) + .productFoundDescription(result.name)), actions: [ TextButton( key: const Key('found-dialog-confirm-button'), - child: Text(MaterialLocalizations.of(context).continueButtonLabel), + child: Text(MaterialLocalizations.of(context) + .continueButtonLabel), onPressed: () { widget._ingredientController.text = result.name; - widget._ingredientIdController.text = result.id.toString(); + widget._ingredientIdController.text = + result.id.toString(); Navigator.of(ctx).pop(); }, ), TextButton( key: const Key('found-dialog-close-button'), - child: Text(MaterialLocalizations.of(context).closeButtonLabel), + child: Text( + MaterialLocalizations.of(context).closeButtonLabel), onPressed: () { Navigator.of(ctx).pop(); }, @@ -191,12 +207,14 @@ class _IngredientTypeaheadState extends State { key: const Key('notFound-dialog'), title: Text(AppLocalizations.of(context).productNotFound), content: Text( - AppLocalizations.of(context).productNotFoundDescription(widget.barcode!), + AppLocalizations.of(context) + .productNotFoundDescription(widget.barcode!), ), actions: [ TextButton( key: const Key('notFound-dialog-close-button'), - child: Text(MaterialLocalizations.of(context).closeButtonLabel), + child: Text( + MaterialLocalizations.of(context).closeButtonLabel), onPressed: () { Navigator.of(ctx).pop(); }, diff --git a/lib/widgets/user/forms.dart b/lib/widgets/user/forms.dart index 87907f8e..077b554c 100644 --- a/lib/widgets/user/forms.dart +++ b/lib/widgets/user/forms.dart @@ -83,7 +83,8 @@ class UserProfileForm extends StatelessWidget { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text( - AppLocalizations.of(context).verifiedEmailInfo(_profile.email), + AppLocalizations.of(context) + .verifiedEmailInfo(_profile.email), ), ), ); @@ -93,7 +94,8 @@ class UserProfileForm extends StatelessWidget { ElevatedButton( style: ElevatedButton.styleFrom( backgroundColor: wgerPrimaryButtonColor, - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(50))), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(50))), onPressed: () async { // Validate and save the current values to the weightEntry final isValid = _form.currentState!.validate(); @@ -106,7 +108,9 @@ class UserProfileForm extends StatelessWidget { context.read().saveProfile(); Navigator.of(context).pop(); ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(AppLocalizations.of(context).successfullySaved)), + SnackBar( + content: + Text(AppLocalizations.of(context).successfullySaved)), ); }, child: Text(AppLocalizations.of(context).save), diff --git a/lib/widgets/weight/entries_list.dart b/lib/widgets/weight/entries_list.dart index 10e51dcc..95ce526d 100644 --- a/lib/widgets/weight/entries_list.dart +++ b/lib/widgets/weight/entries_list.dart @@ -30,7 +30,8 @@ import 'package:wger/widgets/weight/forms.dart'; class WeightEntriesList extends StatelessWidget { @override Widget build(BuildContext context) { - final _weightProvider = Provider.of(context, listen: false); + final _weightProvider = + Provider.of(context, listen: false); return Column( children: [ @@ -38,8 +39,9 @@ class WeightEntriesList extends StatelessWidget { color: Theme.of(context).cardColor, padding: const EdgeInsets.all(15), height: 220, - child: MeasurementChartWidgetFl( - _weightProvider.items.map((e) => MeasurementChartEntry(e.weight, e.date)).toList()), + child: MeasurementChartWidgetFl(_weightProvider.items + .map((e) => MeasurementChartEntry(e.weight, e.date)) + .toList()), ), TextButton( onPressed: () => Navigator.pushNamed( @@ -125,7 +127,8 @@ class WeightEntriesList extends StatelessWidget { child: ListTile( title: Text('${currentEntry.weight} kg'), subtitle: Text( - DateFormat.yMd(Localizations.localeOf(context).languageCode) + DateFormat.yMd( + Localizations.localeOf(context).languageCode) .format(currentEntry.date), ), ), diff --git a/lib/widgets/weight/forms.dart b/lib/widgets/weight/forms.dart index c4b6f676..f09adbed 100644 --- a/lib/widgets/weight/forms.dart +++ b/lib/widgets/weight/forms.dart @@ -34,7 +34,8 @@ class WeightForm extends StatelessWidget { WeightForm([WeightEntry? weightEntry]) { _weightEntry = weightEntry ?? WeightEntry(date: DateTime.now()); - weightController.text = _weightEntry.id == null ? '' : _weightEntry.weight.toString(); + weightController.text = + _weightEntry.id == null ? '' : _weightEntry.weight.toString(); dateController.text = toDate(_weightEntry.date)!; } @@ -67,7 +68,8 @@ class WeightForm extends StatelessWidget { } // if the date is known, don't allow it - return Provider.of(context, listen: false).findByDate(day) == + return Provider.of(context, listen: false) + .findByDate(day) == null; }, ); @@ -83,7 +85,8 @@ class WeightForm extends StatelessWidget { // Weight TextFormField( - decoration: InputDecoration(labelText: AppLocalizations.of(context).weight), + decoration: + InputDecoration(labelText: AppLocalizations.of(context).weight), controller: weightController, keyboardType: TextInputType.number, onSaved: (newValue) { @@ -114,9 +117,11 @@ class WeightForm extends StatelessWidget { // Save the entry on the server try { _weightEntry.id == null - ? await Provider.of(context, listen: false) + ? await Provider.of(context, + listen: false) .addEntry(_weightEntry) - : await Provider.of(context, listen: false) + : await Provider.of(context, + listen: false) .editEntry(_weightEntry); } on WgerHttpException catch (error) { if (context.mounted) { diff --git a/lib/widgets/workouts/app_bar.dart b/lib/widgets/workouts/app_bar.dart index 73ce790d..d0ca21f2 100644 --- a/lib/widgets/workouts/app_bar.dart +++ b/lib/widgets/workouts/app_bar.dart @@ -26,7 +26,8 @@ enum _WorkoutAppBarOptions { contribute, } -class WorkoutOverviewAppBar extends StatelessWidget implements PreferredSizeWidget { +class WorkoutOverviewAppBar extends StatelessWidget + implements PreferredSizeWidget { @override Widget build(BuildContext context) { return AppBar( diff --git a/lib/widgets/workouts/charts.dart b/lib/widgets/workouts/charts.dart index cbf5bbd5..4c71a625 100644 --- a/lib/widgets/workouts/charts.dart +++ b/lib/widgets/workouts/charts.dart @@ -55,7 +55,8 @@ class _LogChartWidgetFlState extends State { touchTooltipData: LineTouchTooltipData( getTooltipItems: (touchedSpots) { return touchedSpots.map((touchedSpot) { - final reps = widget._data['chart_data'][touchedSpot.barIndex].first['reps']; + final reps = + widget._data['chart_data'][touchedSpot.barIndex].first['reps']; return LineTooltipItem( '$reps × ${touchedSpot.y} kg', @@ -68,7 +69,8 @@ class _LogChartWidgetFlState extends State { } LineChartData mainData() { - final colors = generateChartColors(widget._data['chart_data'].length).iterator; + final colors = + generateChartColors(widget._data['chart_data'].length).iterator; return LineChartData( lineTouchData: tooltipData(), @@ -106,9 +108,11 @@ class _LogChartWidgetFlState extends State { return const Text(''); } - final DateTime date = DateTime.fromMillisecondsSinceEpoch(value.toInt()); + final DateTime date = + DateTime.fromMillisecondsSinceEpoch(value.toInt()); return Text( - DateFormat.yMd(Localizations.localeOf(context).languageCode).format(date), + DateFormat.yMd(Localizations.localeOf(context).languageCode) + .format(date), ); }, interval: chartGetInterval( @@ -138,7 +142,9 @@ class _LogChartWidgetFlState extends State { spots: [ ...e.map( (entry) => FlSpot( - DateTime.parse(entry['date']).millisecondsSinceEpoch.toDouble(), + DateTime.parse(entry['date']) + .millisecondsSinceEpoch + .toDouble(), double.parse(entry['weight']), ), ) diff --git a/lib/widgets/workouts/day.dart b/lib/widgets/workouts/day.dart index 1ea0c3a5..dc0de045 100644 --- a/lib/widgets/workouts/day.dart +++ b/lib/widgets/workouts/day.dart @@ -51,7 +51,8 @@ class SettingWidget extends StatelessWidget { leading: InkWell( child: SizedBox( width: 45, - child: ExerciseImageWidget(image: setting.exerciseBaseObj.getMainImage), + child: + ExerciseImageWidget(image: setting.exerciseBaseObj.getMainImage), ), onTap: () { showDialog( @@ -64,7 +65,8 @@ class SettingWidget extends StatelessWidget { content: ExerciseDetail(setting.exerciseBaseObj), actions: [ TextButton( - child: Text(MaterialLocalizations.of(context).closeButtonLabel), + child: Text( + MaterialLocalizations.of(context).closeButtonLabel), onPressed: () { Navigator.of(context).pop(); }, @@ -75,12 +77,16 @@ class SettingWidget extends StatelessWidget { ); }, ), - title: Text( - setting.exerciseBaseObj.getExercise(Localizations.localeOf(context).languageCode).name), + title: Text(setting.exerciseBaseObj + .getExercise(Localizations.localeOf(context).languageCode) + .name), subtitle: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - ...set.getSmartRepr(setting.exerciseBaseObj).map((e) => Text(e)).toList(), + ...set + .getSmartRepr(setting.exerciseBaseObj) + .map((e) => Text(e)) + .toList(), ], ), ); @@ -124,7 +130,8 @@ class _WorkoutDayWidgetState extends State { icon: const Icon(Icons.delete), iconSize: ICON_SIZE_SMALL, onPressed: () { - Provider.of(context, listen: false).deleteSet(set); + Provider.of(context, listen: false) + .deleteSet(set); }, ), Expanded( @@ -177,7 +184,8 @@ class _WorkoutDayWidgetState extends State { children: [ IconButton( onPressed: () { - Provider.of(context, listen: false).deleteDay( + Provider.of(context, listen: false) + .deleteDay( widget._day, ); }, @@ -208,7 +216,8 @@ class _WorkoutDayWidgetState extends State { arguments: FormScreenArguments( AppLocalizations.of(context).edit, DayFormWidget( - Provider.of(context, listen: false) + Provider.of(context, + listen: false) .findById(widget._day.workoutId), widget._day), hasListView: true, @@ -235,11 +244,13 @@ class _WorkoutDayWidgetState extends State { setState(() { _sets.insert(newIndex, _sets.removeAt(oldIndex)); }); - _sets = await Provider.of(context, listen: false) + _sets = await Provider.of(context, + listen: false) .reorderSets(_sets, startIndex); }, children: [ - for (var i = 0; i < widget._day.sets.length; i++) getSetRow(widget._day.sets[i], i), + for (var i = 0; i < widget._day.sets.length; i++) + getSetRow(widget._day.sets[i], i), ], ), OutlinedButton( @@ -304,7 +315,8 @@ class DayHeaderDismissible extends StatelessWidget { confirmDismiss: (direction) async { // Delete day if (direction == DismissDirection.startToEnd) { - Navigator.of(context).pushNamed(GymModeScreen.routeName, arguments: _day); + Navigator.of(context) + .pushNamed(GymModeScreen.routeName, arguments: _day); } return false; }, @@ -323,12 +335,15 @@ class DayHeaderDismissible extends StatelessWidget { style: Theme.of(context).textTheme.headline5, overflow: TextOverflow.ellipsis, ), - Text(_day.getDaysTextTranslated(Localizations.localeOf(context).languageCode)), + Text(_day.getDaysTextTranslated( + Localizations.localeOf(context).languageCode)), ], ), ), IconButton( - icon: _expanded ? const Icon(Icons.unfold_less) : const Icon(Icons.unfold_more), + icon: _expanded + ? const Icon(Icons.unfold_less) + : const Icon(Icons.unfold_more), onPressed: () { _toggle(); }, diff --git a/lib/widgets/workouts/forms.dart b/lib/widgets/workouts/forms.dart index 3de5b3a6..caabb2cc 100644 --- a/lib/widgets/workouts/forms.dart +++ b/lib/widgets/workouts/forms.dart @@ -41,7 +41,8 @@ class WorkoutForm extends StatelessWidget { WorkoutForm(this._plan); final TextEditingController workoutNameController = TextEditingController(); - final TextEditingController workoutDescriptionController = TextEditingController(); + final TextEditingController workoutDescriptionController = + TextEditingController(); @override Widget build(BuildContext context) { @@ -56,13 +57,17 @@ class WorkoutForm extends StatelessWidget { children: [ TextFormField( key: const Key('field-name'), - decoration: InputDecoration(labelText: AppLocalizations.of(context).name), + decoration: + InputDecoration(labelText: AppLocalizations.of(context).name), controller: workoutNameController, validator: (value) { const minLength = 1; const maxLength = 100; - if (value!.isEmpty || value.length < minLength || value.length > maxLength) { - return AppLocalizations.of(context).enterCharacters(minLength, maxLength); + if (value!.isEmpty || + value.length < minLength || + value.length > maxLength) { + return AppLocalizations.of(context) + .enterCharacters(minLength, maxLength); } return null; }, @@ -73,7 +78,8 @@ class WorkoutForm extends StatelessWidget { ), TextFormField( key: const Key('field-description'), - decoration: InputDecoration(labelText: AppLocalizations.of(context).description), + decoration: InputDecoration( + labelText: AppLocalizations.of(context).description), minLines: 3, maxLines: 10, controller: workoutDescriptionController, @@ -81,7 +87,8 @@ class WorkoutForm extends StatelessWidget { const minLength = 0; const maxLength = 1000; if (value!.length > maxLength) { - return AppLocalizations.of(context).enterCharacters(minLength, maxLength); + return AppLocalizations.of(context) + .enterCharacters(minLength, maxLength); } return null; }, @@ -103,13 +110,15 @@ class WorkoutForm extends StatelessWidget { // Save to DB if (_plan.id != null) { - await Provider.of(context, listen: false).editWorkout(_plan); + await Provider.of(context, listen: false) + .editWorkout(_plan); if (context.mounted) { Navigator.of(context).pop(); } } else { final WorkoutPlan newPlan = - await Provider.of(context, listen: false) + await Provider.of(context, + listen: false) .addWorkout(_plan); if (context.mounted) { Navigator.of(context).pushReplacementNamed( @@ -199,8 +208,11 @@ class _DayFormWidgetState extends State { validator: (value) { const minLength = 1; const maxLength = 100; - if (value!.isEmpty || value.length < minLength || value.length > maxLength) { - return AppLocalizations.of(context).enterCharacters(minLength, maxLength); + if (value!.isEmpty || + value.length < minLength || + value.length > maxLength) { + return AppLocalizations.of(context) + .enterCharacters(minLength, maxLength); } if (widget._day.daysOfWeek.isEmpty) { @@ -210,7 +222,9 @@ class _DayFormWidgetState extends State { }, ), const SizedBox(height: 10), - ...Day.weekdays.keys.map((dayNr) => DayCheckbox(dayNr, widget._day)).toList(), + ...Day.weekdays.keys + .map((dayNr) => DayCheckbox(dayNr, widget._day)) + .toList(), ElevatedButton( key: const Key(SUBMIT_BUTTON_KEY_NAME), child: Text(AppLocalizations.of(context).save), @@ -222,12 +236,14 @@ class _DayFormWidgetState extends State { try { if (widget._day.id == null) { - Provider.of(context, listen: false).addDay( + Provider.of(context, listen: false) + .addDay( widget._day, widget.workout, ); } else { - Provider.of(context, listen: false).editDay( + Provider.of(context, listen: false) + .editDay( widget._day, ); } @@ -327,7 +343,8 @@ class _SetFormWidgetState extends State { child: Column( //crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text(AppLocalizations.of(context).nrOfSets(_currentSetSliderValue.round())), + Text(AppLocalizations.of(context) + .nrOfSets(_currentSetSliderValue.round())), Slider( value: _currentSetSliderValue, min: 1, @@ -367,7 +384,8 @@ class _SetFormWidgetState extends State { textFieldConfiguration: TextFieldConfiguration( controller: _exercisesController, decoration: InputDecoration( - labelText: AppLocalizations.of(context).searchExercise, + labelText: + AppLocalizations.of(context).searchExercise, prefixIcon: const Icon(Icons.search), suffixIcon: IconButton( icon: const Icon(Icons.help), @@ -378,15 +396,18 @@ class _SetFormWidgetState extends State { content: Column( mainAxisSize: MainAxisSize.min, children: [ - Text(AppLocalizations.of(context).selectExercises), + Text(AppLocalizations.of(context) + .selectExercises), const SizedBox(height: 10), - Text(AppLocalizations.of(context).sameRepetitions) + Text(AppLocalizations.of(context) + .sameRepetitions) ], ), actions: [ TextButton( child: Text( - MaterialLocalizations.of(context).closeButtonLabel), + MaterialLocalizations.of(context) + .closeButtonLabel), onPressed: () { Navigator.of(context).pop(); }, @@ -401,32 +422,40 @@ class _SetFormWidgetState extends State { ), ), suggestionsCallback: (pattern) { - return context.read().searchExercise( + return context + .read() + .searchExercise( pattern, - languageCode: Localizations.localeOf(context).languageCode, + languageCode: Localizations.localeOf(context) + .languageCode, searchEnglish: _searchEnglish, ); }, - itemBuilder: (BuildContext context, ExerciseBase exerciseSuggestion) { + itemBuilder: (BuildContext context, + ExerciseBase exerciseSuggestion) { return ListTile( leading: SizedBox( width: 45, - child: ExerciseImageWidget(image: exerciseSuggestion.getMainImage), + child: ExerciseImageWidget( + image: exerciseSuggestion.getMainImage), ), title: Text( exerciseSuggestion - .getExercise(Localizations.localeOf(context).languageCode) + .getExercise(Localizations.localeOf(context) + .languageCode) .name, ), subtitle: Text( - '${exerciseSuggestion.category.name} / ${exerciseSuggestion.equipment.map((e) => e.name).join(', ')}', + '${exerciseSuggestion.category!.name} / ${exerciseSuggestion.equipment.map((e) => e.name).join(', ')}', ), ); }, - transitionBuilder: (context, suggestionsBox, controller) { + transitionBuilder: + (context, suggestionsBox, controller) { return suggestionsBox; }, - onSuggestionSelected: (ExerciseBase exerciseSuggestion) { + onSuggestionSelected: + (ExerciseBase exerciseSuggestion) { addExercise(exerciseSuggestion); this._exercisesController.text = ''; }, @@ -438,17 +467,21 @@ class _SetFormWidgetState extends State { // At least one setting has to be filled in if (widget._set.settings - .where((s) => s.weight == null && s.reps == null) + .where( + (s) => s.weight == null && s.reps == null) .length == widget._set.settings.length) { - return AppLocalizations.of(context).enterRepetitionsOrWeight; + return AppLocalizations.of(context) + .enterRepetitionsOrWeight; } return null; }, ), - if (Localizations.localeOf(context).languageCode != LANGUAGE_SHORT_ENGLISH) + if (Localizations.localeOf(context).languageCode != + LANGUAGE_SHORT_ENGLISH) SwitchListTile( - title: Text(AppLocalizations.of(context).searchNamesInEnglish), + title: Text(AppLocalizations.of(context) + .searchNamesInEnglish), value: _searchEnglish, onChanged: (_) { setState(() { @@ -471,7 +504,8 @@ class _SetFormWidgetState extends State { const minLength = 0; const maxLength = 200; if (value!.length > maxLength) { - return AppLocalizations.of(context).enterCharacters(minLength, maxLength); + return AppLocalizations.of(context) + .enterCharacters(minLength, maxLength); } return null; }, @@ -483,7 +517,8 @@ class _SetFormWidgetState extends State { ...widget._set.exerciseBasesObj.asMap().entries.map((entry) { final index = entry.key; final exercise = entry.value; - final showSupersetInfo = (index + 1) < widget._set.exerciseBasesObj.length; + final showSupersetInfo = + (index + 1) < widget._set.exerciseBasesObj.length; final settings = widget._set.settings .where((e) => e.exerciseBaseObj.id == exercise.id) .toList(); @@ -502,7 +537,8 @@ class _SetFormWidgetState extends State { padding: EdgeInsets.all(3.0), child: Text('+'), ), - if (showSupersetInfo) Text(AppLocalizations.of(context).supersetWith), + if (showSupersetInfo) + Text(AppLocalizations.of(context).supersetWith), if (showSupersetInfo) const Padding( padding: EdgeInsets.all(3.0), @@ -521,22 +557,25 @@ class _SetFormWidgetState extends State { } _formKey.currentState!.save(); - final workoutProvider = - Provider.of(context, listen: false); + final workoutProvider = Provider.of( + context, + listen: false); // Save set final Set setDb = await workoutProvider.addSet(widget._set); widget._set.id = setDb.id; // Remove unused settings - widget._set.settings.removeWhere((s) => s.weight == null && s.reps == null); + widget._set.settings + .removeWhere((s) => s.weight == null && s.reps == null); // Save remaining settings for (final setting in widget._set.settings) { setting.setId = setDb.id!; setting.comment = ''; - final Setting settingDb = await workoutProvider.addSetting(setting); + final Setting settingDb = + await workoutProvider.addSetting(setting); setting.id = settingDb.id; } @@ -614,7 +653,8 @@ class ExerciseSetting extends StatelessWidget { const SizedBox(width: 4), Flexible( flex: 3, - child: WeightUnitInputWidget(setting, key: Key(i.toString())), + child: + WeightUnitInputWidget(setting, key: Key(i.toString())), ), ], ), @@ -660,10 +700,12 @@ class ExerciseSetting extends StatelessWidget { children: [ ListTile( title: Text( - _exerciseBase.getExercise(Localizations.localeOf(context).languageCode).name, + _exerciseBase + .getExercise(Localizations.localeOf(context).languageCode) + .name, style: Theme.of(context).textTheme.headline6, ), - subtitle: Text(_exerciseBase.category.name), + subtitle: Text(_exerciseBase.category!.name), contentPadding: EdgeInsets.zero, leading: ExerciseImageWidget(image: _exerciseBase.getMainImage), trailing: IconButton( @@ -861,7 +903,8 @@ class _WeightUnitInputWidgetState extends State { return DropdownButtonFormField( value: selectedWeightUnit, - decoration: InputDecoration(labelText: AppLocalizations.of(context).weightUnit), + decoration: + InputDecoration(labelText: AppLocalizations.of(context).weightUnit), onChanged: (WeightUnit? newValue) { setState(() { selectedWeightUnit = newValue!; @@ -890,7 +933,8 @@ class RepetitionUnitInputWidget extends StatefulWidget { const RepetitionUnitInputWidget(this._setting); @override - _RepetitionUnitInputWidgetState createState() => _RepetitionUnitInputWidgetState(); + _RepetitionUnitInputWidgetState createState() => + _RepetitionUnitInputWidgetState(); } class _RepetitionUnitInputWidgetState extends State { @@ -900,7 +944,8 @@ class _RepetitionUnitInputWidgetState extends State { return DropdownButtonFormField( value: selectedWeightUnit, - decoration: InputDecoration(labelText: AppLocalizations.of(context).repetitionUnit), + decoration: InputDecoration( + labelText: AppLocalizations.of(context).repetitionUnit), isDense: true, onChanged: (RepetitionUnit? newValue) { setState(() { diff --git a/lib/widgets/workouts/gym_mode.dart b/lib/widgets/workouts/gym_mode.dart index c6731a46..65c95b7b 100644 --- a/lib/widgets/workouts/gym_mode.dart +++ b/lib/widgets/workouts/gym_mode.dart @@ -85,8 +85,9 @@ class _GymModeState extends State { for (final set in widget._workoutDay.sets) { var firstPage = true; for (final setting in set.settingsComputed) { - final exerciseBase = Provider.of(context, listen: false) - .findExerciseBaseById(setting.exerciseBaseId); + final exerciseBase = + Provider.of(context, listen: false) + .findExerciseBaseById(setting.exerciseBaseId); if (firstPage) { _exercisePages[exerciseBase.uuid!] = currentPage; @@ -105,8 +106,10 @@ class _GymModeState extends State { // Returns the list of exercise overview, sets and pause pages List getContent() { - final exerciseProvider = Provider.of(context, listen: false); - final workoutProvider = Provider.of(context, listen: false); + final exerciseProvider = + Provider.of(context, listen: false); + final workoutProvider = + Provider.of(context, listen: false); var currentElement = 1; final List out = []; @@ -114,7 +117,8 @@ class _GymModeState extends State { var firstPage = true; for (final setting in set.settingsComputed) { final ratioCompleted = currentElement / _totalElements; - final exerciseBase = exerciseProvider.findExerciseBaseById(setting.exerciseBaseId); + final exerciseBase = + exerciseProvider.findExerciseBaseById(setting.exerciseBaseId); currentElement++; if (firstPage) { @@ -195,11 +199,15 @@ class StartPage extends StatelessWidget { children: [ Text( s.exerciseBaseObj - .getExercise(Localizations.localeOf(context).languageCode) + .getExercise(Localizations.localeOf(context) + .languageCode) .name, style: Theme.of(context).textTheme.headline6, ), - ...set.getSmartRepr(s.exerciseBaseObj).map((e) => Text(e)).toList(), + ...set + .getSmartRepr(s.exerciseBaseObj) + .map((e) => Text(e)) + .toList(), const SizedBox(height: 15), ], ); @@ -215,7 +223,8 @@ class StartPage extends StatelessWidget { child: Text(AppLocalizations.of(context).start), onPressed: () { _controller.nextPage( - duration: const Duration(milliseconds: 200), curve: Curves.bounceIn); + duration: const Duration(milliseconds: 200), + curve: Curves.bounceIn); }, ), NavigationFooter( @@ -358,7 +367,8 @@ class _LogPageState extends State { ), onPressed: () { try { - final double newValue = double.parse(_weightController.text) - (2 * minPlateWeight); + final double newValue = + double.parse(_weightController.text) - (2 * minPlateWeight); if (newValue > 0) { setState(() { widget._log.weight = newValue; @@ -406,7 +416,8 @@ class _LogPageState extends State { ), onPressed: () { try { - final double newValue = double.parse(_weightController.text) + (2 * minPlateWeight); + final double newValue = + double.parse(_weightController.text) + (2 * minPlateWeight); setState(() { widget._log.weight = newValue; _weightController.text = newValue.toString(); @@ -479,7 +490,8 @@ class _LogPageState extends State { // Save the entry on the server try { - await Provider.of(context, listen: false) + await Provider.of(context, + listen: false) .addLog(widget._log); ScaffoldMessenger.of(context).showSnackBar( SnackBar( @@ -535,8 +547,9 @@ class _LogPageState extends State { .map((log) { return ListTile( title: Text(log.singleLogRepTextNoNl), - subtitle: - Text(DateFormat.yMd(Localizations.localeOf(context).languageCode).format(log.date)), + subtitle: Text( + DateFormat.yMd(Localizations.localeOf(context).languageCode) + .format(log.date)), trailing: const Icon(Icons.copy), onTap: () { setState(() { @@ -550,8 +563,8 @@ class _LogPageState extends State { widget._log.weightUnit = log.weightUnitObj; ScaffoldMessenger.of(context).hideCurrentSnackBar(); - ScaffoldMessenger.of(context) - .showSnackBar(SnackBar(content: Text(AppLocalizations.of(context).dataCopied))); + ScaffoldMessenger.of(context).showSnackBar(SnackBar( + content: Text(AppLocalizations.of(context).dataCopied))); }); }, contentPadding: const EdgeInsets.symmetric(horizontal: 40), @@ -593,7 +606,8 @@ class _LogPageState extends State { shape: BoxShape.circle, ), child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 3), + padding: + const EdgeInsets.symmetric(horizontal: 3), child: SizedBox( height: 35, width: 35, @@ -601,7 +615,8 @@ class _LogPageState extends State { alignment: Alignment.center, child: Text( key.toString(), - style: const TextStyle(fontWeight: FontWeight.bold), + style: const TextStyle( + fontWeight: FontWeight.bold), ), ), ), @@ -614,7 +629,8 @@ class _LogPageState extends State { .toList() ], ) - : MutedText(AppLocalizations.of(context).plateCalculatorNotDivisible), + : MutedText( + AppLocalizations.of(context).plateCalculatorNotDivisible), ), const SizedBox(height: 3), ], @@ -626,7 +642,9 @@ class _LogPageState extends State { return Column( children: [ NavigationHeader( - widget._exerciseBase.getExercise(Localizations.localeOf(context).languageCode).name, + widget._exerciseBase + .getExercise(Localizations.localeOf(context).languageCode) + .name, widget._controller, exercisePages: widget._exercisePages, ), @@ -644,11 +662,15 @@ class _LogPageState extends State { ), const SizedBox(height: 10), Expanded( - child: (widget._workoutPlan.filterLogsByExerciseBase(widget._exerciseBase).isNotEmpty) + child: (widget._workoutPlan + .filterLogsByExerciseBase(widget._exerciseBase) + .isNotEmpty) ? getPastLogs() : Container()), // Only show calculator for barbell - if (widget._log.exerciseBaseObj.equipment.map((e) => e.id).contains(ID_EQUIPMENT_BARBELL)) + if (widget._log.exerciseBaseObj.equipment + .map((e) => e.id) + .contains(ID_EQUIPMENT_BARBELL)) getPlates(), Padding( padding: const EdgeInsets.symmetric(horizontal: 15), @@ -681,7 +703,9 @@ class ExerciseOverview extends StatelessWidget { return Column( children: [ NavigationHeader( - _exerciseBase.getExercise(Localizations.localeOf(context).languageCode).name, + _exerciseBase + .getExercise(Localizations.localeOf(context).languageCode) + .name, _controller, exercisePages: _exercisePages, ), @@ -691,7 +715,7 @@ class ExerciseOverview extends StatelessWidget { padding: const EdgeInsets.symmetric(horizontal: 15), children: [ Text( - getTranslation(_exerciseBase.category.name, context), + getTranslation(_exerciseBase.category!.name, context), style: Theme.of(context).textTheme.headline6, textAlign: TextAlign.center, ), @@ -709,7 +733,9 @@ class ExerciseOverview extends StatelessWidget { child: ListView( scrollDirection: Axis.horizontal, children: [ - ..._exerciseBase.images.map((e) => ExerciseImageWidget(image: e)).toList(), + ..._exerciseBase.images + .map((e) => ExerciseImageWidget(image: e)) + .toList(), ], ), ), @@ -847,7 +873,8 @@ class _SessionPageState extends State { ); if (pickedTime != null) { - timeStartController.text = timeToString(pickedTime)!; + timeStartController.text = + timeToString(pickedTime)!; _session.timeStart = pickedTime; } }, @@ -855,10 +882,13 @@ class _SessionPageState extends State { _session.timeStart = stringToTime(newValue); }, validator: (_) { - final TimeOfDay startTime = stringToTime(timeStartController.text); - final TimeOfDay endTime = stringToTime(timeEndController.text); + final TimeOfDay startTime = + stringToTime(timeStartController.text); + final TimeOfDay endTime = + stringToTime(timeEndController.text); if (startTime.isAfter(endTime)) { - return AppLocalizations.of(context).timeStartAhead; + return AppLocalizations.of(context) + .timeStartAhead; } return null; }), @@ -866,8 +896,8 @@ class _SessionPageState extends State { const SizedBox(width: 10), Flexible( child: TextFormField( - decoration: - InputDecoration(labelText: AppLocalizations.of(context).timeEnd), + decoration: InputDecoration( + labelText: AppLocalizations.of(context).timeEnd), controller: timeEndController, onFieldSubmitted: (_) {}, onTap: () async { @@ -904,7 +934,8 @@ class _SessionPageState extends State { // Save the entry on the server try { - await Provider.of(context, listen: false) + await Provider.of(context, + listen: false) .addSession(_session); if (mounted) { Navigator.of(context).pop(); @@ -939,7 +970,8 @@ class TimerWidget extends StatefulWidget { final double _ratioCompleted; final Map _exercisePages; - const TimerWidget(this._controller, this._ratioCompleted, this._exercisePages); + const TimerWidget( + this._controller, this._ratioCompleted, this._exercisePages); @override _TimerWidgetState createState() => _TimerWidgetState(); @@ -1002,7 +1034,10 @@ class _TimerWidgetState extends State { child: Center( child: Text( DateFormat('m:ss').format(today.add(Duration(seconds: _seconds))), - style: Theme.of(context).textTheme.headline1!.copyWith(color: wgerPrimaryColor), + style: Theme.of(context) + .textTheme + .headline1! + .copyWith(color: wgerPrimaryColor), ), ), ), diff --git a/lib/widgets/workouts/log.dart b/lib/widgets/workouts/log.dart index c9feff23..d51c7790 100644 --- a/lib/widgets/workouts/log.dart +++ b/lib/widgets/workouts/log.dart @@ -36,7 +36,8 @@ class ExerciseLogChart extends StatelessWidget { @override Widget build(BuildContext context) { - final workoutPlansData = Provider.of(context, listen: false); + final workoutPlansData = + Provider.of(context, listen: false); final workout = workoutPlansData.currentPlan; var colors = generateChartColors(1).iterator; @@ -48,7 +49,8 @@ class ExerciseLogChart extends StatelessWidget { future: getChartEntries(context), builder: (context, AsyncSnapshot> snapshot) { if (snapshot.connectionState == ConnectionState.done) { - colors = generateChartColors(snapshot.data!['chart_data'].length).iterator; + colors = generateChartColors(snapshot.data!['chart_data'].length) + .iterator; } return SizedBox( @@ -109,12 +111,14 @@ class _DayLogWidgetState extends State { child: Column( children: [ Text( - DateFormat.yMd(Localizations.localeOf(context).languageCode).format(widget._date), + DateFormat.yMd(Localizations.localeOf(context).languageCode) + .format(widget._date), style: Theme.of(context).textTheme.headline5, ), if (widget._session != null) const Text('Session data here'), ...widget._exerciseData.keys.map((base) { - final exercise = base.getExercise(Localizations.localeOf(context).languageCode); + final exercise = + base.getExercise(Localizations.localeOf(context).languageCode); return Column( children: [ if (widget._exerciseData[base]!.isNotEmpty) @@ -133,8 +137,8 @@ class _DayLogWidgetState extends State { IconButton( icon: const Icon(Icons.delete), onPressed: () async { - showDeleteDialog( - context, exercise.name, log, exercise, widget._exerciseData); + showDeleteDialog(context, exercise.name, log, + exercise, widget._exerciseData); }, ), ], diff --git a/lib/widgets/workouts/workout_plan_detail.dart b/lib/widgets/workouts/workout_plan_detail.dart index cf0fbd6e..47d789e9 100644 --- a/lib/widgets/workouts/workout_plan_detail.dart +++ b/lib/widgets/workouts/workout_plan_detail.dart @@ -57,7 +57,9 @@ class _WorkoutPlanDetailState extends State { padding: const EdgeInsets.all(15), child: Text(widget._workoutPlan.description), ), - ...widget._workoutPlan.days.map((workoutDay) => WorkoutDayWidget(workoutDay)).toList(), + ...widget._workoutPlan.days + .map((workoutDay) => WorkoutDayWidget(workoutDay)) + .toList(), Column( children: [ ElevatedButton( diff --git a/lib/widgets/workouts/workout_plans_list.dart b/lib/widgets/workouts/workout_plans_list.dart index 92723dd4..5064e9e5 100644 --- a/lib/widgets/workouts/workout_plans_list.dart +++ b/lib/widgets/workouts/workout_plans_list.dart @@ -49,21 +49,26 @@ class WorkoutPlansList extends StatelessWidget { builder: (BuildContext contextDialog) { return AlertDialog( content: Text( - AppLocalizations.of(context).confirmDelete(currentWorkout.name), + AppLocalizations.of(context) + .confirmDelete(currentWorkout.name), ), actions: [ TextButton( - child: Text(MaterialLocalizations.of(context).cancelButtonLabel), - onPressed: () => Navigator.of(contextDialog).pop(), + child: Text(MaterialLocalizations.of(context) + .cancelButtonLabel), + onPressed: () => + Navigator.of(contextDialog).pop(), ), TextButton( child: Text( AppLocalizations.of(context).delete, - style: TextStyle(color: Theme.of(context).errorColor), + style: TextStyle( + color: Theme.of(context).errorColor), ), onPressed: () { // Confirmed, delete the workout - Provider.of(context, listen: false) + Provider.of(context, + listen: false) .deleteWorkout(currentWorkout.id!); // Close the popup @@ -73,7 +78,8 @@ class WorkoutPlansList extends StatelessWidget { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text( - AppLocalizations.of(context).successfullyDeleted, + AppLocalizations.of(context) + .successfullyDeleted, textAlign: TextAlign.center, ), ), @@ -104,12 +110,14 @@ class WorkoutPlansList extends StatelessWidget { onTap: () { _workoutProvider.setCurrentPlan(currentWorkout.id!); - Navigator.of(context) - .pushNamed(WorkoutPlanScreen.routeName, arguments: currentWorkout); + Navigator.of(context).pushNamed( + WorkoutPlanScreen.routeName, + arguments: currentWorkout); }, title: Text(currentWorkout.name), subtitle: Text( - DateFormat.yMd(Localizations.localeOf(context).languageCode) + DateFormat.yMd( + Localizations.localeOf(context).languageCode) .format(currentWorkout.creationDate), ), ), diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index 7299b5cf..9f99dda7 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -7,12 +7,16 @@ #include "generated_plugin_registrant.h" #include +#include #include void fl_register_plugins(FlPluginRegistry* registry) { g_autoptr(FlPluginRegistrar) file_selector_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin"); file_selector_plugin_register_with_registrar(file_selector_linux_registrar); + g_autoptr(FlPluginRegistrar) sqlite3_flutter_libs_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "Sqlite3FlutterLibsPlugin"); + sqlite3_flutter_libs_plugin_register_with_registrar(sqlite3_flutter_libs_registrar); g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 7566c769..74369f25 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -4,6 +4,7 @@ list(APPEND FLUTTER_PLUGIN_LIST file_selector_linux + sqlite3_flutter_libs url_launcher_linux ) diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 0c54ca11..e5d0d308 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -7,16 +7,20 @@ import Foundation import file_selector_macos import package_info_plus +import path_provider_foundation import rive_common import shared_preferences_foundation +import sqlite3_flutter_libs import url_launcher_macos import video_player_avfoundation func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) + PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) RivePlugin.register(with: registry.registrar(forPlugin: "RivePlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) + Sqlite3FlutterLibsPlugin.register(with: registry.registrar(forPlugin: "Sqlite3FlutterLibsPlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) FVPVideoPlayerPlugin.register(with: registry.registrar(forPlugin: "FVPVideoPlayerPlugin")) } diff --git a/pubspec.lock b/pubspec.lock index 9debeabb..163fc9fa 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -17,6 +17,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.13.0" + analyzer_plugin: + dependency: transitive + description: + name: analyzer_plugin + sha256: c1d5f167683de03d5ab6c3b53fc9aeefc5d59476e7810ba7bbddff50c6f4392d + url: "https://pub.dev" + source: hosted + version: "0.11.2" android_metadata: dependency: "direct main" description: @@ -185,6 +193,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" + charcode: + dependency: transitive + description: + name: charcode + sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306 + url: "https://pub.dev" + source: hosted + version: "1.3.1" checked_yaml: dependency: transitive description: @@ -281,6 +297,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.2" + drift: + dependency: "direct main" + description: + name: drift + sha256: ef2ddafe89c1f5f26767e5eada65d739de4e9d2820303f7249f15a005999d5fc + url: "https://pub.dev" + source: hosted + version: "2.13.1" + drift_dev: + dependency: "direct dev" + description: + name: drift_dev + sha256: f79281f13411abe4229d6b57956202f047cc49b2c4e0d26ffae7273d6e5e97b1 + url: "https://pub.dev" + source: hosted + version: "2.13.1" equatable: dependency: "direct main" description: @@ -443,14 +475,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" - flutter_launcher_icons: - dependency: "direct dev" - description: - name: flutter_launcher_icons - sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea" - url: "https://pub.dev" - source: hosted - version: "0.13.1" flutter_lints: dependency: "direct dev" description: @@ -535,6 +559,14 @@ packages: description: flutter source: sdk version: "0.0.0" + get_it: + dependency: "direct main" + description: + name: get_it + sha256: f79870884de16d689cf9a7d15eedf31ed61d750e813c538a6efb92660fea83c3 + url: "https://pub.dev" + source: hosted + version: "7.6.4" glob: dependency: transitive description: @@ -829,7 +861,7 @@ packages: source: hosted version: "2.0.1" path: - dependency: transitive + dependency: "direct main" description: name: path sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" @@ -844,6 +876,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" + path_provider: + dependency: "direct main" + description: + name: path_provider + sha256: a1aa8aaa2542a6bc57e381f132af822420216c80d4781f7aa085ca3229208aaa + url: "https://pub.dev" + source: hosted + version: "2.1.1" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: e595b98692943b4881b219f0a9e3945118d3c16bd7e2813f98ec6e532d905f72 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "19314d595120f82aca0ba62787d58dde2cc6b5df7d2f0daf72489e38d1b57f2d" + url: "https://pub.dev" + source: hosted + version: "2.3.1" path_provider_linux: dependency: transitive description: @@ -956,6 +1012,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.2.1" + recase: + dependency: transitive + description: + name: recase + sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 + url: "https://pub.dev" + source: hosted + version: "4.1.0" rfc_6901: dependency: transitive description: @@ -1089,6 +1153,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + sqlite3: + dependency: transitive + description: + name: sqlite3 + sha256: db65233e6b99e99b2548932f55a987961bc06d82a31a0665451fa0b4fff4c3fb + url: "https://pub.dev" + source: hosted + version: "2.1.0" + sqlite3_flutter_libs: + dependency: "direct main" + description: + name: sqlite3_flutter_libs + sha256: "3e3583b77cf888a68eae2e49ee4f025f66b86623ef0d83c297c8d903daa14871" + url: "https://pub.dev" + source: hosted + version: "0.5.18" + sqlparser: + dependency: transitive + description: + name: sqlparser + sha256: db6354e8ba71acc50bc4afeafff2a248710ae2c00c9412e2c8b796916d4b1c45 + url: "https://pub.dev" + source: hosted + version: "0.32.1" stack_trace: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 570dab00..270bfe74 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -59,6 +59,11 @@ dependencies: flutter_svg: ^2.0.5 fl_chart: ^0.64.0 flutter_zxing: ^1.1.2 + drift: ^2.13.1 + path: ^1.8.3 + path_provider: ^2.1.1 + sqlite3_flutter_libs: ^0.5.18 + get_it: ^7.6.4 dev_dependencies: flutter_test: @@ -71,6 +76,7 @@ dev_dependencies: network_image_mock: ^2.1.1 flutter_lints: ^3.0.1 cider: ^0.2.4 + drift_dev: ^2.13.1 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/schema.json b/schema.json new file mode 100644 index 00000000..495d9422 --- /dev/null +++ b/schema.json @@ -0,0 +1 @@ +{"_meta":{"description":"This file contains a serialized version of schema entities for drift.","version":"1.1.0"},"options":{"store_date_time_values_as_text":false},"entities":[{"id":0,"references":[],"type":"table","data":{"name":"exercise_table_items","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"exercisebase","getter_name":"exercisebase","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const ExerciseBaseConverter()","dart_type_name":"ExerciseBase"}},{"name":"muscle","getter_name":"muscle","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const MuscleConverter()","dart_type_name":"Muscle"}},{"name":"category","getter_name":"category","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const ExerciseCategoryConverter()","dart_type_name":"ExerciseCategory"}},{"name":"variation","getter_name":"variation","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const VariationConverter()","dart_type_name":"Variation"}},{"name":"language","getter_name":"language","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const LanguageConverter()","dart_type_name":"Language"}},{"name":"equipment","getter_name":"equipment","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EquipmentConverter()","dart_type_name":"Equipment"}},{"name":"expires_in","getter_name":"expiresIn","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[]}}]} \ No newline at end of file diff --git a/test/auth/auth_provider_test.dart b/test/auth/auth_provider_test.dart index 93c280f6..2df0775f 100644 --- a/test/auth/auth_provider_test.dart +++ b/test/auth/auth_provider_test.dart @@ -27,8 +27,10 @@ void main() { test('app version higher than min version', () async { // arrange - when(mockClient.get(tVersionUri)).thenAnswer((_) => Future(() => Response('"1.2.0"', 200))); - final updateNeeded = await authProvider.applicationUpdateRequired('1.3.0', testMetadata); + when(mockClient.get(tVersionUri)) + .thenAnswer((_) => Future(() => Response('"1.2.0"', 200))); + final updateNeeded = + await authProvider.applicationUpdateRequired('1.3.0', testMetadata); // assert expect(updateNeeded, false); @@ -36,8 +38,10 @@ void main() { test('app version higher than min version', () async { // arrange - when(mockClient.get(tVersionUri)).thenAnswer((_) => Future(() => Response('"1.3"', 200))); - final updateNeeded = await authProvider.applicationUpdateRequired('1.1', testMetadata); + when(mockClient.get(tVersionUri)) + .thenAnswer((_) => Future(() => Response('"1.3"', 200))); + final updateNeeded = + await authProvider.applicationUpdateRequired('1.1', testMetadata); // assert expect(updateNeeded, true); @@ -45,8 +49,10 @@ void main() { test('app version higher than min version', () async { // arrange - when(mockClient.get(tVersionUri)).thenAnswer((_) => Future(() => Response('"1.3.0"', 200))); - final updateNeeded = await authProvider.applicationUpdateRequired('1.1', testMetadata); + when(mockClient.get(tVersionUri)) + .thenAnswer((_) => Future(() => Response('"1.3.0"', 200))); + final updateNeeded = + await authProvider.applicationUpdateRequired('1.1', testMetadata); // assert expect(updateNeeded, true); @@ -54,8 +60,10 @@ void main() { test('app version equal as min version', () async { // arrange - when(mockClient.get(tVersionUri)).thenAnswer((_) => Future(() => Response('"1.3.0"', 200))); - final updateNeeded = await authProvider.applicationUpdateRequired('1.3.0', testMetadata); + when(mockClient.get(tVersionUri)) + .thenAnswer((_) => Future(() => Response('"1.3.0"', 200))); + final updateNeeded = + await authProvider.applicationUpdateRequired('1.3.0', testMetadata); // assert expect(updateNeeded, false); diff --git a/test/auth/auth_screen_test.dart b/test/auth/auth_screen_test.dart index b5b80433..2e3bc3bd 100644 --- a/test/auth/auth_screen_test.dart +++ b/test/auth/auth_screen_test.dart @@ -24,7 +24,8 @@ import 'package:wger/providers/auth.dart'; import 'package:wger/screens/auth_screen.dart'; void main() { - testWidgets('Test the widgets on the auth screen, login mode', (WidgetTester tester) async { + testWidgets('Test the widgets on the auth screen, login mode', + (WidgetTester tester) async { // Wrap screen in material app so that the media query gets a context await tester.pumpWidget( MultiProvider( @@ -80,7 +81,8 @@ void main() { // either the provider wasn't found or, if the call was removed, the // localization data could not be loaded... - testWidgets('Test the widgets on the auth screen, registration', (WidgetTester tester) async { + testWidgets('Test the widgets on the auth screen, registration', + (WidgetTester tester) async { // Wrap screen in material app so that the media query gets a context await tester.pumpWidget(MaterialApp(home: AuthScreen())); await tester.tap(find.byKey(const Key('toggleActionButton'))); diff --git a/test/exercises/contribute_exercise_test.dart b/test/exercises/contribute_exercise_test.dart index 0b887902..5311a75d 100644 --- a/test/exercises/contribute_exercise_test.dart +++ b/test/exercises/contribute_exercise_test.dart @@ -41,9 +41,12 @@ void main() { Widget createExerciseScreen({locale = 'en'}) { return MultiProvider( providers: [ - ChangeNotifierProvider(create: (context) => mockExerciseProvider), - ChangeNotifierProvider(create: (context) => mockAddExerciseProvider), - ChangeNotifierProvider(create: (context) => mockUserProvider), + ChangeNotifierProvider( + create: (context) => mockExerciseProvider), + ChangeNotifierProvider( + create: (context) => mockAddExerciseProvider), + ChangeNotifierProvider( + create: (context) => mockUserProvider), ], child: MaterialApp( locale: Locale(locale), @@ -54,7 +57,8 @@ void main() { ); } - testWidgets('Unverified users see an info widget', (WidgetTester tester) async { + testWidgets('Unverified users see an info widget', + (WidgetTester tester) async { // Arrange tProfile1.isTrustworthy = false; when(mockUserProvider.profile).thenReturn(tProfile1); @@ -67,7 +71,8 @@ void main() { expect(find.byType(AddExerciseStepper), findsNothing); }); - testWidgets('Verified users see the stepper to add exercises', (WidgetTester tester) async { + testWidgets('Verified users see the stepper to add exercises', + (WidgetTester tester) async { // Arrange tProfile1.isTrustworthy = true; when(mockUserProvider.profile).thenReturn(tProfile1); diff --git a/test/exercises/contribute_exercise_test.mocks.dart b/test/exercises/contribute_exercise_test.mocks.dart index 415e960c..d57a4f90 100644 --- a/test/exercises/contribute_exercise_test.mocks.dart +++ b/test/exercises/contribute_exercise_test.mocks.dart @@ -32,7 +32,8 @@ import 'package:wger/providers/user.dart' as _i15; // ignore_for_file: camel_case_types // ignore_for_file: subtype_of_sealed_class -class _FakeWgerBaseProvider_0 extends _i1.SmartFake implements _i2.WgerBaseProvider { +class _FakeWgerBaseProvider_0 extends _i1.SmartFake + implements _i2.WgerBaseProvider { _FakeWgerBaseProvider_0( Object parent, Invocation parentInvocation, @@ -85,7 +86,8 @@ class _FakeAlias_4 extends _i1.SmartFake implements _i6.Alias { /// A class which mocks [AddExerciseProvider]. /// /// See the documentation for Mockito's code generation for more information. -class MockAddExerciseProvider extends _i1.Mock implements _i7.AddExerciseProvider { +class MockAddExerciseProvider extends _i1.Mock + implements _i7.AddExerciseProvider { MockAddExerciseProvider() { _i1.throwOnMissingStub(this); } @@ -374,7 +376,8 @@ class MockAddExerciseProvider extends _i1.Mock implements _i7.AddExerciseProvide ) as _i13.Future); @override - _i13.Future<_i4.Translation> addExerciseTranslation(_i4.Translation? exercise) => + _i13.Future<_i4.Translation> addExerciseTranslation( + _i4.Translation? exercise) => (super.noSuchMethod( Invocation.method( #addExerciseTranslation, diff --git a/test/exercises/exercise_provider_load_test.dart b/test/exercises/exercise_provider_load_test.dart index 0cde07f8..a7ac526e 100644 --- a/test/exercises/exercise_provider_load_test.dart +++ b/test/exercises/exercise_provider_load_test.dart @@ -83,13 +83,16 @@ void main() { 'd8aa5990-bb47-4111-9823-e2fbd98fe07f', '49a159e1-1e00-409a-81c9-b4d4489fbd67' ]); - expect(base.videos.map((v) => v.uuid), ['63e996e9-a772-4ca5-9d09-8b4be03f6be4']); + expect(base.videos.map((v) => v.uuid), + ['63e996e9-a772-4ca5-9d09-8b4be03f6be4']); final exercise1 = base.translations[0]; expect(exercise1.name, '2 Handed Kettlebell Swing'); expect(exercise1.languageObj.shortName, 'en'); - expect(exercise1.notes[0].comment, "it's important to do the exercise correctly"); - expect(exercise1.notes[1].comment, 'put a lot of effort into this exercise'); + expect(exercise1.notes[0].comment, + "it's important to do the exercise correctly"); + expect( + exercise1.notes[1].comment, 'put a lot of effort into this exercise'); expect(exercise1.notes[2].comment, 'have fun'); expect(exercise1.alias[0].alias, 'double handed kettlebell'); expect(exercise1.alias[1].alias, 'Kettlebell russian style'); diff --git a/test/exercises/exercise_provider_test.dart b/test/exercises/exercise_provider_test.dart index b580f61b..b6735e34 100644 --- a/test/exercises/exercise_provider_test.dart +++ b/test/exercises/exercise_provider_test.dart @@ -62,7 +62,8 @@ void main() { ); const category1 = ExerciseCategory(id: 1, name: 'Arms'); - const muscle1 = Muscle(id: 1, name: 'Biceps brachii', nameEn: 'Biceps', isFront: true); + const muscle1 = + Muscle(id: 1, name: 'Biceps brachii', nameEn: 'Biceps', isFront: true); const equipment1 = Equipment(id: 1, name: 'Barbell'); const language1 = Language(id: 1, shortName: 'de', fullName: 'Deutsch'); @@ -97,7 +98,8 @@ void main() { .thenAnswer((_) => Future.value(tMuscleMap['results'])); // Mock equipment - when(mockBaseProvider.makeUrl(equipmentUrl)).thenReturn(tEquipmentEntriesUri); + when(mockBaseProvider.makeUrl(equipmentUrl)) + .thenReturn(tEquipmentEntriesUri); when(mockBaseProvider.fetchPaginated(tEquipmentEntriesUri)) .thenAnswer((_) => Future.value(tEquipmentMap['results'])); @@ -108,7 +110,8 @@ void main() { .thenAnswer((_) => Future.value(tLanguageMap['results'])); // Mock base info response - when(mockBaseProvider.makeUrl(exerciseBaseInfoUrl)).thenReturn(texerciseBaseInfoUri); + when(mockBaseProvider.makeUrl(exerciseBaseInfoUrl)) + .thenReturn(texerciseBaseInfoUri); when(mockBaseProvider.fetch(texerciseBaseInfoUri)) .thenAnswer((_) => Future.value(tExerciseBaseInfoMap)); }); @@ -127,7 +130,8 @@ void main() { test('should throw a NoResultException if no category is found', () { // act & assert - expect(() => provider.findCategoryById(3), throwsA(isA())); + expect(() => provider.findCategoryById(3), + throwsA(isA())); }); }); @@ -145,7 +149,8 @@ void main() { test('should throw a NoResultException if no muscle is found', () { // act & assert - expect(() => provider.findMuscleById(3), throwsA(isA())); + expect(() => provider.findMuscleById(3), + throwsA(isA())); }); }); @@ -163,7 +168,8 @@ void main() { test('should throw a NoResultException if no equipment is found', () { // act & assert - expect(() => provider.findEquipmentById(10), throwsA(isA())); + expect(() => provider.findEquipmentById(10), + throwsA(isA())); }); }); @@ -181,7 +187,8 @@ void main() { test('should throw a NoResultException if no equipment is found', () { // act & assert - expect(() => provider.findLanguageById(10), throwsA(isA())); + expect(() => provider.findLanguageById(10), + throwsA(isA())); }); }); @@ -204,7 +211,8 @@ void main() { SharedPreferences.setMockInitialValues({}); filters = Filters( - exerciseCategories: FilterCategory(title: 'Muscle Groups', items: {}), + exerciseCategories: FilterCategory( + title: 'Muscle Groups', items: {}), equipment: FilterCategory(title: 'Equipment', items: {}), ); @@ -227,10 +235,12 @@ void main() { ); }); - test('A muscle is selected with no search term. Should find results', () async { + test('A muscle is selected with no search term. Should find results', + () async { // arrange final Filters tFilters = filters.copyWith( - exerciseCategories: filters.exerciseCategories.copyWith(items: {data.tCategory1: true}), + exerciseCategories: filters.exerciseCategories + .copyWith(items: {data.tCategory1: true}), ); // act @@ -238,13 +248,16 @@ void main() { // assert verifyNever(provider.baseProvider.fetch(tSearchByNameUri)); - expect(provider.filteredExerciseBases, [data.getTestExerciseBases()[0]]); + expect( + provider.filteredExerciseBases, [data.getTestExerciseBases()[0]]); }); - test('A muscle is selected with no search term. Should not find results', () async { + test('A muscle is selected with no search term. Should not find results', + () async { // arrange final Filters tFilters = filters.copyWith( - exerciseCategories: filters.exerciseCategories.copyWith(items: {data.tCategory5: true}), + exerciseCategories: filters.exerciseCategories + .copyWith(items: {data.tCategory5: true}), ); // act @@ -255,10 +268,12 @@ void main() { expect(provider.filteredExerciseBases, isEmpty); }); - test('An equipment is selected with no search term. Should find results', () async { + test('An equipment is selected with no search term. Should find results', + () async { // arrange final Filters tFilters = filters.copyWith( - equipment: filters.equipment.copyWith(items: {data.tEquipment1: true}), + equipment: + filters.equipment.copyWith(items: {data.tEquipment1: true}), ); // act @@ -266,13 +281,17 @@ void main() { // assert verifyNever(provider.baseProvider.fetch(tSearchByNameUri)); - expect(provider.filteredExerciseBases, [data.getTestExerciseBases()[0]]); + expect( + provider.filteredExerciseBases, [data.getTestExerciseBases()[0]]); }); - test('An equipment is selected with no search term. Should not find results', () async { + test( + 'An equipment is selected with no search term. Should not find results', + () async { // arrange final Filters tFilters = filters.copyWith( - equipment: filters.equipment.copyWith(items: {data.tEquipment3: true}), + equipment: + filters.equipment.copyWith(items: {data.tEquipment3: true}), ); // act @@ -286,8 +305,10 @@ void main() { test('A muscle and equipment is selected and there is a match', () async { // arrange final Filters tFilters = filters.copyWith( - exerciseCategories: filters.exerciseCategories.copyWith(items: {data.tCategory2: true}), - equipment: filters.equipment.copyWith(items: {data.tEquipment2: true}), + exerciseCategories: filters.exerciseCategories + .copyWith(items: {data.tCategory2: true}), + equipment: + filters.equipment.copyWith(items: {data.tEquipment2: true}), ); // act @@ -295,13 +316,15 @@ void main() { // assert verifyNever(provider.baseProvider.fetch(tSearchByNameUri)); - expect(provider.filteredExerciseBases, [data.getTestExerciseBases()[1]]); + expect( + provider.filteredExerciseBases, [data.getTestExerciseBases()[1]]); }); test('A muscle and equipment is selected but no match', () async { // arrange final Filters tFilters = filters.copyWith( - exerciseCategories: filters.exerciseCategories.copyWith(items: {data.tCategory2: true}), + exerciseCategories: filters.exerciseCategories + .copyWith(items: {data.tCategory2: true}), equipment: filters.equipment.copyWith(items: {equipment1: true}), ); @@ -318,7 +341,10 @@ void main() { setUp(() { const String tSearchTerm = 'press'; const String tSearchLanguage = 'en'; - final Map query = {'term': tSearchTerm, 'language': tSearchLanguage}; + final Map query = { + 'term': tSearchTerm, + 'language': tSearchLanguage + }; tSearchByNameUri = Uri( scheme: 'http', host: 'localhost', @@ -336,7 +362,8 @@ void main() { query: {'term': tSearchTerm, 'language': tSearchLanguage}, ), ).thenReturn(tSearchByNameUri); - when(mockBaseProvider.fetch(tSearchByNameUri)).thenAnswer((_) async => tSearchResponse); + when(mockBaseProvider.fetch(tSearchByNameUri)) + .thenAnswer((_) async => tSearchResponse); }); test('Should find results from search term', () async { @@ -353,11 +380,14 @@ void main() { [data.getTestExerciseBases()[0], data.getTestExerciseBases()[1]], ); }); - test('Should find items from selection but should filter them by search term', () async { + test( + 'Should find items from selection but should filter them by search term', + () async { // arrange final Filters tFilters = filters.copyWith( searchTerm: 'press', - exerciseCategories: filters.exerciseCategories.copyWith(items: {data.tCategory3: true}), + exerciseCategories: filters.exerciseCategories + .copyWith(items: {data.tCategory3: true}), ); // act diff --git a/test/exercises/exercises_detail_widget_test.dart b/test/exercises/exercises_detail_widget_test.dart index b7725633..88fa70c9 100644 --- a/test/exercises/exercises_detail_widget_test.dart +++ b/test/exercises/exercises_detail_widget_test.dart @@ -44,7 +44,8 @@ void main() { ); } - testWidgets('Test the widgets on the exercise detail widget', (WidgetTester tester) async { + testWidgets('Test the widgets on the exercise detail widget', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen()); await tester.pumpAndSettle(); @@ -53,9 +54,12 @@ void main() { expect(find.text('Bench'), findsOneWidget, reason: 'Equipment'); expect(find.text('Dumbbell'), findsOneWidget, reason: 'Equipment'); - expect(find.text('Muscles'), findsNWidgets(2), reason: 'One header, one sub header'); - expect(find.text('Flutterus maximus (Glutes)'), findsOneWidget, reason: 'Muscles'); - expect(find.text('Biceps brachii (Biceps)'), findsOneWidget, reason: 'Muscles'); + expect(find.text('Muscles'), findsNWidgets(2), + reason: 'One header, one sub header'); + expect(find.text('Flutterus maximus (Glutes)'), findsOneWidget, + reason: 'Muscles'); + expect(find.text('Biceps brachii (Biceps)'), findsOneWidget, + reason: 'Muscles'); expect(find.text('Secondary muscles'), findsOneWidget); expect( @@ -63,8 +67,10 @@ void main() { findsNWidgets(2), reason: 'Two diagrams, one for front, one for the back', ); - expect(find.text('Gluteus maximus'), findsOneWidget, reason: 'Secondary muscles'); - expect(find.text('Description'), findsOneWidget, reason: 'Description header'); + expect(find.text('Gluteus maximus'), findsOneWidget, + reason: 'Secondary muscles'); + expect(find.text('Description'), findsOneWidget, + reason: 'Description header'); expect(find.text('add clever text'), findsOneWidget, reason: 'Description'); expect(find.text('Variations'), findsNothing); }); diff --git a/test/gallery/gallery_form_test.dart b/test/gallery/gallery_form_test.dart index fcf26cf7..0c5a3af8 100644 --- a/test/gallery/gallery_form_test.dart +++ b/test/gallery/gallery_form_test.dart @@ -53,8 +53,10 @@ void main() { ); } - testWidgets('Test opening the form for an existing image', (WidgetTester tester) async { - await mockNetworkImagesFor(() => tester.pumpWidget(createScreen(useImage: true))); + testWidgets('Test opening the form for an existing image', + (WidgetTester tester) async { + await mockNetworkImagesFor( + () => tester.pumpWidget(createScreen(useImage: true))); await tester.pump(); expect(find.byType(TextFormField), findsNWidgets(2)); @@ -74,8 +76,10 @@ void main() { verify(mockGalleryProvider.editImage(any, any)); }); - testWidgets('Test opening the form for a new image', (WidgetTester tester) async { - await mockNetworkImagesFor(() => tester.pumpWidget(createScreen(useImage: false))); + testWidgets('Test opening the form for a new image', + (WidgetTester tester) async { + await mockNetworkImagesFor( + () => tester.pumpWidget(createScreen(useImage: false))); await tester.pumpAndSettle(); expect(find.text('Please select an image'), findsOneWidget); diff --git a/test/gallery/gallery_form_test.mocks.dart b/test/gallery/gallery_form_test.mocks.dart index c207984d..68ca4e78 100644 --- a/test/gallery/gallery_form_test.mocks.dart +++ b/test/gallery/gallery_form_test.mocks.dart @@ -193,7 +193,8 @@ class MockGalleryProvider extends _i1.Mock implements _i4.GalleryProvider { ) as _i6.Future); @override - Map getDefaultHeaders({dynamic includeAuth = false}) => (super.noSuchMethod( + Map getDefaultHeaders({dynamic includeAuth = false}) => + (super.noSuchMethod( Invocation.method( #getDefaultHeaders, [], @@ -239,7 +240,8 @@ class MockGalleryProvider extends _i1.Mock implements _i4.GalleryProvider { #fetch, [uri], ), - returnValue: _i6.Future>.value({}), + returnValue: + _i6.Future>.value({}), ) as _i6.Future>); @override @@ -264,7 +266,8 @@ class MockGalleryProvider extends _i1.Mock implements _i4.GalleryProvider { uri, ], ), - returnValue: _i6.Future>.value({}), + returnValue: + _i6.Future>.value({}), ) as _i6.Future>); @override @@ -280,7 +283,8 @@ class MockGalleryProvider extends _i1.Mock implements _i4.GalleryProvider { uri, ], ), - returnValue: _i6.Future>.value({}), + returnValue: + _i6.Future>.value({}), ) as _i6.Future>); @override diff --git a/test/gallery/gallery_provider_test.dart b/test/gallery/gallery_provider_test.dart index 1c6021a8..e8e09850 100644 --- a/test/gallery/gallery_provider_test.dart +++ b/test/gallery/gallery_provider_test.dart @@ -69,7 +69,8 @@ void main() { final image = gallery.Image( id: 58, date: DateTime(2022, 01, 09), - url: 'https://wger.de/media/gallery/170335/d2b9c9e0-d541-41ae-8786-a2ab459e3538.jpg', + url: + 'https://wger.de/media/gallery/170335/d2b9c9e0-d541-41ae-8786-a2ab459e3538.jpg', description: "eggsaddjujuit\'ddayhadIforcanview"); galleryProvider.images.add(image); diff --git a/test/gallery/gallery_screen_test.dart b/test/gallery/gallery_screen_test.dart index dfb08a16..e0ab883f 100644 --- a/test/gallery/gallery_screen_test.dart +++ b/test/gallery/gallery_screen_test.dart @@ -55,14 +55,16 @@ void main() { ); } - testWidgets('Test the widgets on the gallery screen', (WidgetTester tester) async { + testWidgets('Test the widgets on the gallery screen', + (WidgetTester tester) async { await mockNetworkImagesFor(() => tester.pumpWidget(createScreen())); expect(find.byType(SliverMasonryGrid), findsOneWidget); expect(find.byType(GestureDetector, skipOffstage: false), findsNWidgets(4)); }); - testWidgets('Test opening the form for an existing image', (WidgetTester tester) async { + testWidgets('Test opening the form for an existing image', + (WidgetTester tester) async { await mockNetworkImagesFor(() => tester.pumpWidget(createScreen())); await tester.tap(find.byKey(const Key('image-1'))); @@ -70,7 +72,8 @@ void main() { // Detail dialog opens expect(find.byKey(const Key('image-1-detail')), findsOneWidget); - expect(find.byType(Image), findsNWidgets(5)); // four in the overview, one in the popup + expect(find.byType(Image), + findsNWidgets(5)); // four in the overview, one in the popup expect(find.text('A very cool image from the gym'), findsOneWidget); expect(find.byIcon(Icons.edit), findsOneWidget); expect(find.byIcon(Icons.delete), findsOneWidget); @@ -84,7 +87,8 @@ void main() { expect(find.byType(ElevatedButton), findsOneWidget); }); - testWidgets('Tests the localization of dates - EN', (WidgetTester tester) async { + testWidgets('Tests the localization of dates - EN', + (WidgetTester tester) async { await mockNetworkImagesFor(() => tester.pumpWidget(createScreen())); await tester.tap(find.byKey(const Key('image-1'))); await tester.pumpAndSettle(); @@ -92,8 +96,10 @@ void main() { expect(find.text('5/30/2021'), findsOneWidget); }); - testWidgets('Tests the localization of dates - DE', (WidgetTester tester) async { - await mockNetworkImagesFor(() => tester.pumpWidget(createScreen(locale: 'de'))); + testWidgets('Tests the localization of dates - DE', + (WidgetTester tester) async { + await mockNetworkImagesFor( + () => tester.pumpWidget(createScreen(locale: 'de'))); await tester.tap(find.byKey(const Key('image-1'))); await tester.pumpAndSettle(); diff --git a/test/gallery/gallery_screen_test.mocks.dart b/test/gallery/gallery_screen_test.mocks.dart index 0642ae7d..5bf657f7 100644 --- a/test/gallery/gallery_screen_test.mocks.dart +++ b/test/gallery/gallery_screen_test.mocks.dart @@ -193,7 +193,8 @@ class MockGalleryProvider extends _i1.Mock implements _i4.GalleryProvider { ) as _i6.Future); @override - Map getDefaultHeaders({dynamic includeAuth = false}) => (super.noSuchMethod( + Map getDefaultHeaders({dynamic includeAuth = false}) => + (super.noSuchMethod( Invocation.method( #getDefaultHeaders, [], @@ -239,7 +240,8 @@ class MockGalleryProvider extends _i1.Mock implements _i4.GalleryProvider { #fetch, [uri], ), - returnValue: _i6.Future>.value({}), + returnValue: + _i6.Future>.value({}), ) as _i6.Future>); @override @@ -264,7 +266,8 @@ class MockGalleryProvider extends _i1.Mock implements _i4.GalleryProvider { uri, ], ), - returnValue: _i6.Future>.value({}), + returnValue: + _i6.Future>.value({}), ) as _i6.Future>); @override @@ -280,7 +283,8 @@ class MockGalleryProvider extends _i1.Mock implements _i4.GalleryProvider { uri, ], ), - returnValue: _i6.Future>.value({}), + returnValue: + _i6.Future>.value({}), ) as _i6.Future>); @override diff --git a/test/measurements/measurement_categories_screen_test.dart b/test/measurements/measurement_categories_screen_test.dart index 1fa899e4..f0f0b3f6 100644 --- a/test/measurements/measurement_categories_screen_test.dart +++ b/test/measurements/measurement_categories_screen_test.dart @@ -38,12 +38,32 @@ void main() { mockMeasurementProvider = MockMeasurementProvider(); when(mockMeasurementProvider.categories).thenReturn([ MeasurementCategory(id: 1, name: 'body fat', unit: '%', entries: [ - MeasurementEntry(id: 1, category: 1, date: DateTime(2021, 9, 1), value: 10, notes: ''), - MeasurementEntry(id: 2, category: 1, date: DateTime(2021, 9, 5), value: 11, notes: ''), + MeasurementEntry( + id: 1, + category: 1, + date: DateTime(2021, 9, 1), + value: 10, + notes: ''), + MeasurementEntry( + id: 2, + category: 1, + date: DateTime(2021, 9, 5), + value: 11, + notes: ''), ]), MeasurementCategory(id: 2, name: 'biceps', unit: 'cm', entries: [ - MeasurementEntry(id: 3, category: 2, date: DateTime(2021, 9, 1), value: 30, notes: ''), - MeasurementEntry(id: 4, category: 2, date: DateTime(2021, 9, 5), value: 40, notes: ''), + MeasurementEntry( + id: 3, + category: 2, + date: DateTime(2021, 9, 1), + value: 30, + notes: ''), + MeasurementEntry( + id: 4, + category: 2, + date: DateTime(2021, 9, 5), + value: 40, + notes: ''), ]), ]); }); @@ -60,7 +80,8 @@ void main() { ); } - testWidgets('Test the widgets on the measurement category screen', (WidgetTester tester) async { + testWidgets('Test the widgets on the measurement category screen', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen()); await tester.pumpAndSettle(); diff --git a/test/measurements/measurement_categories_screen_test.mocks.dart b/test/measurements/measurement_categories_screen_test.mocks.dart index 1ef3dc24..4459e9d6 100644 --- a/test/measurements/measurement_categories_screen_test.mocks.dart +++ b/test/measurements/measurement_categories_screen_test.mocks.dart @@ -23,7 +23,8 @@ import 'package:wger/providers/measurement.dart' as _i4; // ignore_for_file: camel_case_types // ignore_for_file: subtype_of_sealed_class -class _FakeWgerBaseProvider_0 extends _i1.SmartFake implements _i2.WgerBaseProvider { +class _FakeWgerBaseProvider_0 extends _i1.SmartFake + implements _i2.WgerBaseProvider { _FakeWgerBaseProvider_0( Object parent, Invocation parentInvocation, @@ -33,7 +34,8 @@ class _FakeWgerBaseProvider_0 extends _i1.SmartFake implements _i2.WgerBaseProvi ); } -class _FakeMeasurementCategory_1 extends _i1.SmartFake implements _i3.MeasurementCategory { +class _FakeMeasurementCategory_1 extends _i1.SmartFake + implements _i3.MeasurementCategory { _FakeMeasurementCategory_1( Object parent, Invocation parentInvocation, @@ -46,7 +48,8 @@ class _FakeMeasurementCategory_1 extends _i1.SmartFake implements _i3.Measuremen /// A class which mocks [MeasurementProvider]. /// /// See the documentation for Mockito's code generation for more information. -class MockMeasurementProvider extends _i1.Mock implements _i4.MeasurementProvider { +class MockMeasurementProvider extends _i1.Mock + implements _i4.MeasurementProvider { MockMeasurementProvider() { _i1.throwOnMissingStub(this); } @@ -127,7 +130,8 @@ class MockMeasurementProvider extends _i1.Mock implements _i4.MeasurementProvide ) as _i5.Future); @override - _i5.Future addCategory(_i3.MeasurementCategory? category) => (super.noSuchMethod( + _i5.Future addCategory(_i3.MeasurementCategory? category) => + (super.noSuchMethod( Invocation.method( #addCategory, [category], diff --git a/test/measurements/measurement_category_test.dart b/test/measurements/measurement_category_test.dart index 0f66a73e..04b2e8e2 100644 --- a/test/measurements/measurement_category_test.dart +++ b/test/measurements/measurement_category_test.dart @@ -76,7 +76,8 @@ void main() { test('should copyWith objects of this class', () { // arrange - final MeasurementCategory tMeasurementCategoryCopied = MeasurementCategory( + final MeasurementCategory tMeasurementCategoryCopied = + MeasurementCategory( id: 1234, name: 'Coolness', unit: 'lp', @@ -107,9 +108,11 @@ void main() { expect(result, tMeasurementEntry); }); - test('should throw a NoSuchEntryException if no MeasurementEntry was found', () { + test('should throw a NoSuchEntryException if no MeasurementEntry was found', + () { // act & assert - expect(() => tMeasurementCategory.findEntryById(83), throwsA(isA())); + expect(() => tMeasurementCategory.findEntryById(83), + throwsA(isA())); }); }); } diff --git a/test/measurements/measurement_entries_screen_test.dart b/test/measurements/measurement_entries_screen_test.dart index 20b9b5dc..2c31780f 100644 --- a/test/measurements/measurement_entries_screen_test.dart +++ b/test/measurements/measurement_entries_screen_test.dart @@ -35,8 +35,18 @@ void main() { mockMeasurementProvider = MockMeasurementProvider(); when(mockMeasurementProvider.findCategoryById(any)).thenReturn( MeasurementCategory(id: 1, name: 'body fat', unit: '%', entries: [ - MeasurementEntry(id: 1, category: 1, date: DateTime(2021, 8, 1), value: 10.2, notes: ''), - MeasurementEntry(id: 1, category: 1, date: DateTime(2021, 8, 10), value: 18.1, notes: 'a'), + MeasurementEntry( + id: 1, + category: 1, + date: DateTime(2021, 8, 1), + value: 10.2, + notes: ''), + MeasurementEntry( + id: 1, + category: 1, + date: DateTime(2021, 8, 10), + value: 18.1, + notes: 'a'), ]), ); }); @@ -64,7 +74,8 @@ void main() { ); } - testWidgets('Test the widgets on the measurement entries screen', (WidgetTester tester) async { + testWidgets('Test the widgets on the measurement entries screen', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen()); await tester.tap(find.byType(TextButton)); await tester.pumpAndSettle(); @@ -77,7 +88,8 @@ void main() { expect(find.text('18.1 %'), findsNWidgets(2)); }); - testWidgets('Tests the localization of dates - EN', (WidgetTester tester) async { + testWidgets('Tests the localization of dates - EN', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen()); await tester.tap(find.byType(TextButton)); await tester.pumpAndSettle(); @@ -87,7 +99,8 @@ void main() { expect(find.text('8/10/2021'), findsWidgets); }); - testWidgets('Tests the localization of dates - DE', (WidgetTester tester) async { + testWidgets('Tests the localization of dates - DE', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen(locale: 'de')); await tester.tap(find.byType(TextButton)); await tester.pumpAndSettle(); diff --git a/test/measurements/measurement_entry_test.dart b/test/measurements/measurement_entry_test.dart index 8c535b06..bf61ffa4 100644 --- a/test/measurements/measurement_entry_test.dart +++ b/test/measurements/measurement_entry_test.dart @@ -47,7 +47,11 @@ void main() { // act final result = tMeasurementEntry.copyWith( - id: 83, category: 17, date: DateTime(1960), value: 93, notes: 'Interesting'); + id: 83, + category: 17, + date: DateTime(1960), + value: 93, + notes: 'Interesting'); // assert expect(result, tMeasurementEntryCopied); diff --git a/test/measurements/measurement_provider_test.dart b/test/measurements/measurement_provider_test.dart index 68157513..523a87a1 100644 --- a/test/measurements/measurement_provider_test.dart +++ b/test/measurements/measurement_provider_test.dart @@ -48,13 +48,15 @@ void main() { measurementProvider = MeasurementProvider(mockWgerBaseProvider); when(mockWgerBaseProvider.makeUrl(any)).thenReturn(tCategoryUri); - when(mockWgerBaseProvider.makeUrl(any, id: anyNamed('id'))).thenReturn(tCategoryUri); - when(mockWgerBaseProvider.fetch(any)) - .thenAnswer((realInvocation) => Future.value(tMeasurementCategoriesMap)); + when(mockWgerBaseProvider.makeUrl(any, id: anyNamed('id'))) + .thenReturn(tCategoryUri); + when(mockWgerBaseProvider.fetch(any)).thenAnswer( + (realInvocation) => Future.value(tMeasurementCategoriesMap)); when(mockWgerBaseProvider.makeUrl(entryUrl, query: anyNamed('query'))) .thenReturn(tCategoryEntriesUri); - when(mockWgerBaseProvider.makeUrl(entryUrl, id: anyNamed('id'), query: anyNamed('query'))) + when(mockWgerBaseProvider.makeUrl(entryUrl, + id: anyNamed('id'), query: anyNamed('query'))) .thenReturn(tCategoryEntriesUri); when(mockWgerBaseProvider.fetch(tCategoryEntriesUri)) .thenAnswer((realInvocation) => Future.value(tMeasurementCategoryMap)); @@ -90,7 +92,8 @@ void main() { test('should throw a NoResultException if no category is found', () { // act & assert - expect(() => measurementProvider.findCategoryById(3), throwsA(isA())); + expect(() => measurementProvider.findCategoryById(3), + throwsA(isA())); }); }); @@ -130,7 +133,8 @@ void main() { await measurementProvider.fetchAndSetCategoryEntries(tCategoryId); // assert - verify(mockWgerBaseProvider.makeUrl(entryUrl, query: {'category': tCategoryId.toString()})); + verify(mockWgerBaseProvider + .makeUrl(entryUrl, query: {'category': tCategoryId.toString()})); }); test('should fetch categories entries for id', () async { @@ -176,16 +180,16 @@ void main() { MeasurementCategory(id: null, name: 'Strength', unit: 'kN'); final Map tMeasurementCategoryMap = jsonDecode(fixture('measurement/measurement_category.json')); - final Map tMeasurementCategoryMapWithoutId = - jsonDecode(fixture('measurement/measurement_category_without_id_to_json.json')); + final Map tMeasurementCategoryMapWithoutId = jsonDecode( + fixture('measurement/measurement_category_without_id_to_json.json')); final List tMeasurementCategoriesAdded = [ const MeasurementCategory(id: 2, name: 'Biceps', unit: 'cm'), const MeasurementCategory(id: 1, name: 'Strength', unit: 'kN'), const MeasurementCategory(id: 1, name: 'Strength', unit: 'kN'), ]; setUp(() { - when(mockWgerBaseProvider.post(any, any)) - .thenAnswer((realInvocation) => Future.value(tMeasurementCategoryMap)); + when(mockWgerBaseProvider.post(any, any)).thenAnswer( + (realInvocation) => Future.value(tMeasurementCategoryMap)); }); test("should post the MeasurementCategorie's Map", () async { @@ -193,7 +197,8 @@ void main() { await measurementProvider.addCategory(tMeasurementCategoryWithoutId); // assert - verify(mockWgerBaseProvider.post(tMeasurementCategoryMapWithoutId, tCategoryUri)); + verify(mockWgerBaseProvider.post( + tMeasurementCategoryMapWithoutId, tCategoryUri)); }); test( @@ -229,20 +234,23 @@ void main() { await measurementProvider.deleteCategory(tCategoryId); // assert - verify(mockWgerBaseProvider.deleteRequest('measurement-category', tCategoryId)); + verify(mockWgerBaseProvider.deleteRequest( + 'measurement-category', tCategoryId)); expect(measurementProvider.categories, tMeasurementCategoriesOneDeleted); }); test('should throw a NoSuchEntryException if no category is found', () { // act & assert - expect(() => measurementProvider.deleteCategory(83), throwsA(isA())); + expect(() => measurementProvider.deleteCategory(83), + throwsA(isA())); }); test( 'should re-add the "removed" MeasurementCategory and relay the exception on WgerHttpException', () async { // arrange - when(mockWgerBaseProvider.deleteRequest(any, any)).thenThrow(WgerHttpException('{}')); + when(mockWgerBaseProvider.deleteRequest(any, any)) + .thenThrow(WgerHttpException('{}')); // act & assert expect(() async => measurementProvider.deleteCategory(tCategoryId), @@ -254,8 +262,8 @@ void main() { group('editCategory()', () { const String tCategoryEditedName = 'Triceps'; const String tCategoryEditedUnit = 'm'; - final Map tCategoryMapEditedToJson = - jsonDecode(fixture('measurement/measurement_category_edited_to_json.json')); + final Map tCategoryMapEditedToJson = jsonDecode( + fixture('measurement/measurement_category_edited_to_json.json')); final Map tCategoryMapEdited = jsonDecode(fixture('measurement/measurement_category_edited.json')); setUp(() async { @@ -263,7 +271,8 @@ void main() { .thenAnswer((realInvocation) => Future.value(tCategoryMapEdited)); await measurementProvider.fetchAndSetCategories(); }); - test('should add the new MeasurementCategory and remove the old one', () async { + test('should add the new MeasurementCategory and remove the old one', + () async { // arrange final List tMeasurementCategoriesEdited = [ const MeasurementCategory(id: 1, name: 'Triceps', unit: 'm'), @@ -271,7 +280,8 @@ void main() { ]; // act - await measurementProvider.editCategory(tCategoryId, tCategoryEditedName, tCategoryEditedUnit); + await measurementProvider.editCategory( + tCategoryId, tCategoryEditedName, tCategoryEditedUnit); // assert expect(measurementProvider.categories, tMeasurementCategoriesEdited); @@ -280,22 +290,25 @@ void main() { test("should throw a NoSuchEntryException if category doesn't exist", () { // act & assert expect( - () async => - measurementProvider.editCategory(83, tCategoryEditedName, tCategoryEditedUnit), + () async => measurementProvider.editCategory( + 83, tCategoryEditedName, tCategoryEditedUnit), throwsA(isA())); }); test('should call api to patch the category', () async { // act - await measurementProvider.editCategory(tCategoryId, tCategoryEditedName, tCategoryEditedUnit); + await measurementProvider.editCategory( + tCategoryId, tCategoryEditedName, tCategoryEditedUnit); // assert - verify(mockWgerBaseProvider.patch(tCategoryMapEditedToJson, tCategoryUri)); + verify( + mockWgerBaseProvider.patch(tCategoryMapEditedToJson, tCategoryUri)); }); test('should keep categories list as is on WgerHttpException', () { // arrange - when(mockWgerBaseProvider.patch(any, any)).thenThrow(WgerHttpException('{}')); + when(mockWgerBaseProvider.patch(any, any)) + .thenThrow(WgerHttpException('{}')); // act & assert expect( @@ -370,7 +383,8 @@ void main() { await measurementProvider.addEntry(tMeasurementEntryWithoutId); // assert - verify(mockWgerBaseProvider.post(measurementEntryMapWithoutId, tCategoryEntriesUri)); + verify(mockWgerBaseProvider.post( + measurementEntryMapWithoutId, tCategoryEntriesUri)); }); test( @@ -395,10 +409,10 @@ void main() { value: 15.00, notes: '', ); - final Map measurementEntryMapWrongCategory = - jsonDecode(fixture('measurement/measurement_entry_wrong_category.json')); - when(mockWgerBaseProvider.post(any, any)) - .thenAnswer((realInvocation) => Future.value(measurementEntryMapWrongCategory)); + final Map measurementEntryMapWrongCategory = jsonDecode( + fixture('measurement/measurement_entry_wrong_category.json')); + when(mockWgerBaseProvider.post(any, any)).thenAnswer( + (realInvocation) => Future.value(measurementEntryMapWrongCategory)); // act & assert expect(() => measurementProvider.addEntry(tMeasurementEntryWrongCategory), @@ -429,7 +443,9 @@ void main() { .thenAnswer((realInvocation) => Future.value(Response('', 200))); }); - test("should remove a MeasurementEntry from the category's entries List for an id", () async { + test( + "should remove a MeasurementEntry from the category's entries List for an id", + () async { // act await measurementProvider.deleteEntry(tEntryId, tCategoryId); @@ -482,7 +498,8 @@ void main() { ]), const MeasurementCategory(id: 2, name: 'Biceps', unit: 'cm') ]; - when(mockWgerBaseProvider.deleteRequest(any, any)).thenThrow(WgerHttpException('{}')); + when(mockWgerBaseProvider.deleteRequest(any, any)) + .thenThrow(WgerHttpException('{}')); // act & assert expect(() async => measurementProvider.deleteEntry(tEntryId, tCategoryId), @@ -501,7 +518,8 @@ void main() { const int tEntryId = 1; const num tEntryEditedValue = 23; final DateTime tEntryEditedDate = DateTime(2021, 07, 21); - const String tEntryEditedNote = 'I just wanted to edit this to see what happens'; + const String tEntryEditedNote = + 'I just wanted to edit this to see what happens'; final Map tEntryMapEdited = jsonDecode(fixture('measurement/measurement_entry_edited.json')); setUp(() async { @@ -510,7 +528,8 @@ void main() { await measurementProvider.fetchAndSetCategories(); await measurementProvider.fetchAndSetCategoryEntries(1); }); - test('should add the new MeasurementEntry and remove the old one', () async { + test('should add the new MeasurementEntry and remove the old one', + () async { // arrange final List tMeasurementCategoriesEdited = [ MeasurementCategory(id: 1, name: 'Strength', unit: 'kN', entries: [ diff --git a/test/measurements/measurement_provider_test.mocks.dart b/test/measurements/measurement_provider_test.mocks.dart index 746c0bcc..b18f41ef 100644 --- a/test/measurements/measurement_provider_test.mocks.dart +++ b/test/measurements/measurement_provider_test.mocks.dart @@ -106,7 +106,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { ); @override - Map getDefaultHeaders({dynamic includeAuth = false}) => (super.noSuchMethod( + Map getDefaultHeaders({dynamic includeAuth = false}) => + (super.noSuchMethod( Invocation.method( #getDefaultHeaders, [], @@ -152,7 +153,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { #fetch, [uri], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override @@ -177,7 +179,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { uri, ], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override @@ -193,7 +196,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { uri, ], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override diff --git a/test/nutrition/nutrition_provider_test.dart b/test/nutrition/nutrition_provider_test.dart index 8f3f4f95..8c344afa 100644 --- a/test/nutrition/nutrition_provider_test.dart +++ b/test/nutrition/nutrition_provider_test.dart @@ -63,9 +63,12 @@ void main() { host: 'localhost', path: 'api/v2/$diaryUrl', ); - when(mockWgerBaseProvider.makeUrl(planInfoUrl, id: anyNamed('id'))).thenReturn(planInfoUri); - when(mockWgerBaseProvider.makeUrl(planUrl, id: anyNamed('id'))).thenReturn(planUri); - when(mockWgerBaseProvider.makeUrl(diaryUrl, query: anyNamed('query'))).thenReturn(diaryUri); + when(mockWgerBaseProvider.makeUrl(planInfoUrl, id: anyNamed('id'))) + .thenReturn(planInfoUri); + when(mockWgerBaseProvider.makeUrl(planUrl, id: anyNamed('id'))) + .thenReturn(planUri); + when(mockWgerBaseProvider.makeUrl(diaryUrl, query: anyNamed('query'))) + .thenReturn(diaryUri); when(mockWgerBaseProvider.fetch(planInfoUri)).thenAnswer( (realInvocation) => Future.value(nutritionalPlanInfoResponse), ); diff --git a/test/nutrition/nutritional_diary_test.dart b/test/nutrition/nutritional_diary_test.dart index a1372b7d..8b128372 100644 --- a/test/nutrition/nutritional_diary_test.dart +++ b/test/nutrition/nutritional_diary_test.dart @@ -32,13 +32,15 @@ void main() { supportedLocales: AppLocalizations.supportedLocales, home: SingleChildScrollView( child: Card( - child: NutritionalDiaryDetailWidget(getNutritionalPlan(), DateTime(2021, 6, 1)), + child: NutritionalDiaryDetailWidget( + getNutritionalPlan(), DateTime(2021, 6, 1)), ), ), ); } - testWidgets('Test the detail view for the nutritional plan', (WidgetTester tester) async { + testWidgets('Test the detail view for the nutritional plan', + (WidgetTester tester) async { await tester.pumpWidget(getWidget()); expect(find.byType(FlNutritionalPlanPieChartWidget), findsOneWidget); @@ -49,11 +51,14 @@ void main() { expect(find.text('18g'), findsOneWidget, reason: 'find grams of carbs'); expect(find.text('4g'), findsOneWidget, reason: 'find grams of sugar'); expect(find.text('29g'), findsOneWidget, reason: 'find grams of fat'); - expect(find.text('14g'), findsOneWidget, reason: 'find grams of saturated fat'); + expect(find.text('14g'), findsOneWidget, + reason: 'find grams of saturated fat'); expect(find.text('50g'), findsOneWidget, reason: 'find grams of fibre'); - expect(find.text('100g Water'), findsOneWidget, reason: 'Name of ingredient'); - expect(find.text('75g Burger soup'), findsOneWidget, reason: 'Name of ingredient'); + expect(find.text('100g Water'), findsOneWidget, + reason: 'Name of ingredient'); + expect(find.text('75g Burger soup'), findsOneWidget, + reason: 'Name of ingredient'); expect(find.byIcon(Icons.delete_outline), findsNWidgets(2)); }); } diff --git a/test/nutrition/nutritional_meal_form_test.dart b/test/nutrition/nutritional_meal_form_test.dart index 303e291b..9d43d81c 100644 --- a/test/nutrition/nutritional_meal_form_test.dart +++ b/test/nutrition/nutritional_meal_form_test.dart @@ -104,7 +104,8 @@ void main() { verifyNever(mockNutrition.addMeal(any, any)); }); - testWidgets('Test creating a new nutritional plan', (WidgetTester tester) async { + testWidgets('Test creating a new nutritional plan', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen(meal2)); await tester.pumpAndSettle(); diff --git a/test/nutrition/nutritional_meal_form_test.mocks.dart b/test/nutrition/nutritional_meal_form_test.mocks.dart index a4d10af4..8ed74c57 100644 --- a/test/nutrition/nutritional_meal_form_test.mocks.dart +++ b/test/nutrition/nutritional_meal_form_test.mocks.dart @@ -25,7 +25,8 @@ import 'package:wger/providers/nutrition.dart' as _i7; // ignore_for_file: camel_case_types // ignore_for_file: subtype_of_sealed_class -class _FakeWgerBaseProvider_0 extends _i1.SmartFake implements _i2.WgerBaseProvider { +class _FakeWgerBaseProvider_0 extends _i1.SmartFake + implements _i2.WgerBaseProvider { _FakeWgerBaseProvider_0( Object parent, Invocation parentInvocation, @@ -35,7 +36,8 @@ class _FakeWgerBaseProvider_0 extends _i1.SmartFake implements _i2.WgerBaseProvi ); } -class _FakeNutritionalPlan_1 extends _i1.SmartFake implements _i3.NutritionalPlan { +class _FakeNutritionalPlan_1 extends _i1.SmartFake + implements _i3.NutritionalPlan { _FakeNutritionalPlan_1( Object parent, Invocation parentInvocation, @@ -78,7 +80,8 @@ class _FakeIngredient_4 extends _i1.SmartFake implements _i6.Ingredient { /// A class which mocks [NutritionPlansProvider]. /// /// See the documentation for Mockito's code generation for more information. -class MockNutritionPlansProvider extends _i1.Mock implements _i7.NutritionPlansProvider { +class MockNutritionPlansProvider extends _i1.Mock + implements _i7.NutritionPlansProvider { MockNutritionPlansProvider() { _i1.throwOnMissingStub(this); } @@ -164,12 +167,14 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i7.NutritionPlansP ) as _i8.Future); @override - _i8.Future<_i3.NutritionalPlan> fetchAndSetPlanSparse(int? planId) => (super.noSuchMethod( + _i8.Future<_i3.NutritionalPlan> fetchAndSetPlanSparse(int? planId) => + (super.noSuchMethod( Invocation.method( #fetchAndSetPlanSparse, [planId], ), - returnValue: _i8.Future<_i3.NutritionalPlan>.value(_FakeNutritionalPlan_1( + returnValue: + _i8.Future<_i3.NutritionalPlan>.value(_FakeNutritionalPlan_1( this, Invocation.method( #fetchAndSetPlanSparse, @@ -179,12 +184,14 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i7.NutritionPlansP ) as _i8.Future<_i3.NutritionalPlan>); @override - _i8.Future<_i3.NutritionalPlan> fetchAndSetPlanFull(int? planId) => (super.noSuchMethod( + _i8.Future<_i3.NutritionalPlan> fetchAndSetPlanFull(int? planId) => + (super.noSuchMethod( Invocation.method( #fetchAndSetPlanFull, [planId], ), - returnValue: _i8.Future<_i3.NutritionalPlan>.value(_FakeNutritionalPlan_1( + returnValue: + _i8.Future<_i3.NutritionalPlan>.value(_FakeNutritionalPlan_1( this, Invocation.method( #fetchAndSetPlanFull, @@ -194,12 +201,14 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i7.NutritionPlansP ) as _i8.Future<_i3.NutritionalPlan>); @override - _i8.Future<_i3.NutritionalPlan> addPlan(_i3.NutritionalPlan? planData) => (super.noSuchMethod( + _i8.Future<_i3.NutritionalPlan> addPlan(_i3.NutritionalPlan? planData) => + (super.noSuchMethod( Invocation.method( #addPlan, [planData], ), - returnValue: _i8.Future<_i3.NutritionalPlan>.value(_FakeNutritionalPlan_1( + returnValue: + _i8.Future<_i3.NutritionalPlan>.value(_FakeNutritionalPlan_1( this, Invocation.method( #addPlan, @@ -304,7 +313,8 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i7.NutritionPlansP ) as _i8.Future<_i5.MealItem>); @override - _i8.Future deleteMealItem(_i5.MealItem? mealItem) => (super.noSuchMethod( + _i8.Future deleteMealItem(_i5.MealItem? mealItem) => + (super.noSuchMethod( Invocation.method( #deleteMealItem, [mealItem], @@ -314,7 +324,8 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i7.NutritionPlansP ) as _i8.Future); @override - _i8.Future<_i6.Ingredient> fetchIngredient(int? ingredientId) => (super.noSuchMethod( + _i8.Future<_i6.Ingredient> fetchIngredient(int? ingredientId) => + (super.noSuchMethod( Invocation.method( #fetchIngredient, [ingredientId], @@ -357,7 +368,8 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i7.NutritionPlansP ) as _i8.Future>); @override - _i8.Future<_i6.Ingredient?> searchIngredientWithCode(String? code) => (super.noSuchMethod( + _i8.Future<_i6.Ingredient?> searchIngredientWithCode(String? code) => + (super.noSuchMethod( Invocation.method( #searchIngredientWithCode, [code], @@ -412,7 +424,8 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i7.NutritionPlansP ) as _i8.Future); @override - _i8.Future fetchAndSetLogs(_i3.NutritionalPlan? plan) => (super.noSuchMethod( + _i8.Future fetchAndSetLogs(_i3.NutritionalPlan? plan) => + (super.noSuchMethod( Invocation.method( #fetchAndSetLogs, [plan], diff --git a/test/nutrition/nutritional_meal_item_form_test.dart b/test/nutrition/nutritional_meal_item_form_test.dart index f593619c..e03bbc00 100644 --- a/test/nutrition/nutritional_meal_item_form_test.dart +++ b/test/nutrition/nutritional_meal_item_form_test.dart @@ -51,20 +51,26 @@ void main() { var plan1 = NutritionalPlan.empty(); var meal1 = Meal(); - final Uri tUriRightCode = Uri.parse('https://localhost/api/v2/ingredient/?code=123'); - final Uri tUriEmptyCode = Uri.parse('https://localhost/api/v2/ingredient/?code=\"%20\"'); - final Uri tUriBadCode = Uri.parse('https://localhost/api/v2/ingredient/?code=222'); + final Uri tUriRightCode = + Uri.parse('https://localhost/api/v2/ingredient/?code=123'); + final Uri tUriEmptyCode = + Uri.parse('https://localhost/api/v2/ingredient/?code=\"%20\"'); + final Uri tUriBadCode = + Uri.parse('https://localhost/api/v2/ingredient/?code=222'); when(client.get(tUriRightCode, headers: anyNamed('headers'))).thenAnswer( - (_) => Future.value(http.Response(fixture('nutrition/search_ingredient_right_code.json'), 200)), + (_) => Future.value(http.Response( + fixture('nutrition/search_ingredient_right_code.json'), 200)), ); when(client.get(tUriEmptyCode, headers: anyNamed('headers'))).thenAnswer( - (_) => Future.value(http.Response(fixture('nutrition/search_ingredient_wrong_code.json'), 200)), + (_) => Future.value(http.Response( + fixture('nutrition/search_ingredient_wrong_code.json'), 200)), ); when(client.get(tUriBadCode, headers: anyNamed('headers'))).thenAnswer( - (_) => Future.value(http.Response(fixture('nutrition/search_ingredient_wrong_code.json'), 200)), + (_) => Future.value(http.Response( + fixture('nutrition/search_ingredient_wrong_code.json'), 200)), ); setUp(() { @@ -73,16 +79,22 @@ void main() { final MealItem mealItem = MealItem(ingredientId: ingredient.id, amount: 2); mockNutrition = MockNutritionPlansProvider(); - when(mockNutrition.searchIngredientWithCode('123')).thenAnswer((_) => Future.value(ingredient)); - when(mockNutrition.searchIngredientWithCode('')).thenAnswer((_) => Future.value(null)); - when(mockNutrition.searchIngredientWithCode('222')).thenAnswer((_) => Future.value(null)); - when(mockNutrition.searchIngredient(any)).thenAnswer((_) => - Future.value(json.decode(fixture('nutrition/ingredient_suggestions')) as List)); + when(mockNutrition.searchIngredientWithCode('123')) + .thenAnswer((_) => Future.value(ingredient)); + when(mockNutrition.searchIngredientWithCode('')) + .thenAnswer((_) => Future.value(null)); + when(mockNutrition.searchIngredientWithCode('222')) + .thenAnswer((_) => Future.value(null)); + when(mockNutrition.searchIngredient(any)).thenAnswer((_) => Future.value( + json.decode(fixture('nutrition/ingredient_suggestions')) + as List)); - when(mockNutrition.addMealItem(any, meal1)).thenAnswer((_) => Future.value(mealItem)); + when(mockNutrition.addMealItem(any, meal1)) + .thenAnswer((_) => Future.value(mealItem)); }); - Widget createMealItemFormScreen(Meal meal, String code, bool test, {locale = 'en'}) { + Widget createMealItemFormScreen(Meal meal, String code, bool test, + {locale = 'en'}) { final key = GlobalKey(); return ChangeNotifierProvider( @@ -105,7 +117,8 @@ void main() { ); } - testWidgets('Test the widgets on the meal item form', (WidgetTester tester) async { + testWidgets('Test the widgets on the meal item form', + (WidgetTester tester) async { await tester.pumpWidget(createMealItemFormScreen(meal1, '', true)); await tester.pumpAndSettle(); @@ -264,7 +277,8 @@ void main() { expect(find.text('Please enter a valid number'), findsOneWidget); }); - testWidgets('save ingredient with incorrect weight input type', (WidgetTester tester) async { + testWidgets('save ingredient with incorrect weight input type', + (WidgetTester tester) async { await tester.pumpWidget(createMealItemFormScreen(meal1, '123', true)); await tester.tap(find.byKey(const Key('scan-button'))); diff --git a/test/nutrition/nutritional_plan_form_test.dart b/test/nutrition/nutritional_plan_form_test.dart index 059f1637..111945e5 100644 --- a/test/nutrition/nutritional_plan_form_test.dart +++ b/test/nutrition/nutritional_plan_form_test.dart @@ -68,7 +68,8 @@ void main() { ); } - testWidgets('Test the widgets on the nutritional plan form', (WidgetTester tester) async { + testWidgets('Test the widgets on the nutritional plan form', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen(plan1)); await tester.pumpAndSettle(); @@ -77,7 +78,8 @@ void main() { expect(find.byKey(const Key(SUBMIT_BUTTON_KEY_NAME)), findsOneWidget); }); - testWidgets('Test editing an existing nutritional plan', (WidgetTester tester) async { + testWidgets('Test editing an existing nutritional plan', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen(plan1)); await tester.pumpAndSettle(); @@ -86,7 +88,8 @@ void main() { findsOneWidget, reason: 'Description of existing nutritional plan is filled in', ); - await tester.enterText(find.byKey(const Key('field-description')), 'New description'); + await tester.enterText( + find.byKey(const Key('field-description')), 'New description'); await tester.tap(find.byKey(const Key(SUBMIT_BUTTON_KEY_NAME))); // Correct method was called @@ -107,12 +110,15 @@ void main() { //); }); - testWidgets('Test creating a new nutritional plan', (WidgetTester tester) async { + testWidgets('Test creating a new nutritional plan', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen(plan2)); await tester.pumpAndSettle(); - expect(find.text(''), findsOneWidget, reason: 'New nutritional plan has no description'); - await tester.enterText(find.byKey(const Key('field-description')), 'New cool plan'); + expect(find.text(''), findsOneWidget, + reason: 'New nutritional plan has no description'); + await tester.enterText( + find.byKey(const Key('field-description')), 'New cool plan'); await tester.tap(find.byKey(const Key(SUBMIT_BUTTON_KEY_NAME))); // Correct method was called @@ -121,6 +127,7 @@ void main() { // Detail page await tester.pumpAndSettle(); - expect(find.text('New cool plan'), findsOneWidget, reason: 'Nutritional plan detail page'); + expect(find.text('New cool plan'), findsOneWidget, + reason: 'Nutritional plan detail page'); }); } diff --git a/test/nutrition/nutritional_plan_form_test.mocks.dart b/test/nutrition/nutritional_plan_form_test.mocks.dart index ad0fb5e1..a2b1b970 100644 --- a/test/nutrition/nutritional_plan_form_test.mocks.dart +++ b/test/nutrition/nutritional_plan_form_test.mocks.dart @@ -25,7 +25,8 @@ import 'package:wger/providers/nutrition.dart' as _i7; // ignore_for_file: camel_case_types // ignore_for_file: subtype_of_sealed_class -class _FakeWgerBaseProvider_0 extends _i1.SmartFake implements _i2.WgerBaseProvider { +class _FakeWgerBaseProvider_0 extends _i1.SmartFake + implements _i2.WgerBaseProvider { _FakeWgerBaseProvider_0( Object parent, Invocation parentInvocation, @@ -35,7 +36,8 @@ class _FakeWgerBaseProvider_0 extends _i1.SmartFake implements _i2.WgerBaseProvi ); } -class _FakeNutritionalPlan_1 extends _i1.SmartFake implements _i3.NutritionalPlan { +class _FakeNutritionalPlan_1 extends _i1.SmartFake + implements _i3.NutritionalPlan { _FakeNutritionalPlan_1( Object parent, Invocation parentInvocation, @@ -78,7 +80,8 @@ class _FakeIngredient_4 extends _i1.SmartFake implements _i6.Ingredient { /// A class which mocks [NutritionPlansProvider]. /// /// See the documentation for Mockito's code generation for more information. -class MockNutritionPlansProvider extends _i1.Mock implements _i7.NutritionPlansProvider { +class MockNutritionPlansProvider extends _i1.Mock + implements _i7.NutritionPlansProvider { MockNutritionPlansProvider() { _i1.throwOnMissingStub(this); } @@ -164,12 +167,14 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i7.NutritionPlansP ) as _i8.Future); @override - _i8.Future<_i3.NutritionalPlan> fetchAndSetPlanSparse(int? planId) => (super.noSuchMethod( + _i8.Future<_i3.NutritionalPlan> fetchAndSetPlanSparse(int? planId) => + (super.noSuchMethod( Invocation.method( #fetchAndSetPlanSparse, [planId], ), - returnValue: _i8.Future<_i3.NutritionalPlan>.value(_FakeNutritionalPlan_1( + returnValue: + _i8.Future<_i3.NutritionalPlan>.value(_FakeNutritionalPlan_1( this, Invocation.method( #fetchAndSetPlanSparse, @@ -179,12 +184,14 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i7.NutritionPlansP ) as _i8.Future<_i3.NutritionalPlan>); @override - _i8.Future<_i3.NutritionalPlan> fetchAndSetPlanFull(int? planId) => (super.noSuchMethod( + _i8.Future<_i3.NutritionalPlan> fetchAndSetPlanFull(int? planId) => + (super.noSuchMethod( Invocation.method( #fetchAndSetPlanFull, [planId], ), - returnValue: _i8.Future<_i3.NutritionalPlan>.value(_FakeNutritionalPlan_1( + returnValue: + _i8.Future<_i3.NutritionalPlan>.value(_FakeNutritionalPlan_1( this, Invocation.method( #fetchAndSetPlanFull, @@ -194,12 +201,14 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i7.NutritionPlansP ) as _i8.Future<_i3.NutritionalPlan>); @override - _i8.Future<_i3.NutritionalPlan> addPlan(_i3.NutritionalPlan? planData) => (super.noSuchMethod( + _i8.Future<_i3.NutritionalPlan> addPlan(_i3.NutritionalPlan? planData) => + (super.noSuchMethod( Invocation.method( #addPlan, [planData], ), - returnValue: _i8.Future<_i3.NutritionalPlan>.value(_FakeNutritionalPlan_1( + returnValue: + _i8.Future<_i3.NutritionalPlan>.value(_FakeNutritionalPlan_1( this, Invocation.method( #addPlan, @@ -304,7 +313,8 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i7.NutritionPlansP ) as _i8.Future<_i5.MealItem>); @override - _i8.Future deleteMealItem(_i5.MealItem? mealItem) => (super.noSuchMethod( + _i8.Future deleteMealItem(_i5.MealItem? mealItem) => + (super.noSuchMethod( Invocation.method( #deleteMealItem, [mealItem], @@ -314,7 +324,8 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i7.NutritionPlansP ) as _i8.Future); @override - _i8.Future<_i6.Ingredient> fetchIngredient(int? ingredientId) => (super.noSuchMethod( + _i8.Future<_i6.Ingredient> fetchIngredient(int? ingredientId) => + (super.noSuchMethod( Invocation.method( #fetchIngredient, [ingredientId], @@ -357,7 +368,8 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i7.NutritionPlansP ) as _i8.Future>); @override - _i8.Future<_i6.Ingredient?> searchIngredientWithCode(String? code) => (super.noSuchMethod( + _i8.Future<_i6.Ingredient?> searchIngredientWithCode(String? code) => + (super.noSuchMethod( Invocation.method( #searchIngredientWithCode, [code], @@ -412,7 +424,8 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i7.NutritionPlansP ) as _i8.Future); @override - _i8.Future fetchAndSetLogs(_i3.NutritionalPlan? plan) => (super.noSuchMethod( + _i8.Future fetchAndSetLogs(_i3.NutritionalPlan? plan) => + (super.noSuchMethod( Invocation.method( #fetchAndSetLogs, [plan], diff --git a/test/nutrition/nutritional_plan_model_test.dart b/test/nutrition/nutritional_plan_model_test.dart index 8eb86cc5..eb70e52e 100644 --- a/test/nutrition/nutritional_plan_model_test.dart +++ b/test/nutrition/nutritional_plan_model_test.dart @@ -31,18 +31,21 @@ void main() { group('model tests', () { test('Test the nutritionalValues method for nutritional plans', () { - final values = NutritionalValues.values(4118.75, 32.75, 347.5, 9.5, 59.0, 37.75, 52.5, 30.5); + final values = NutritionalValues.values( + 4118.75, 32.75, 347.5, 9.5, 59.0, 37.75, 52.5, 30.5); expect(plan.nutritionalValues, values); }); test('Test the nutritionalValues method for meals', () { final meal = plan.meals.first; - final values = NutritionalValues.values(518.75, 5.75, 17.5, 3.5, 29.0, 13.75, 49.5, 0.5); + final values = NutritionalValues.values( + 518.75, 5.75, 17.5, 3.5, 29.0, 13.75, 49.5, 0.5); expect(meal.nutritionalValues, values); }); test('Test that the getter returns all meal items for a plan', () { - expect(plan.allMealItems, plan.meals[0].mealItems + plan.meals[1].mealItems); + expect( + plan.allMealItems, plan.meals[0].mealItems + plan.meals[1].mealItems); }); }); } diff --git a/test/nutrition/nutritional_plan_screen_test.dart b/test/nutrition/nutritional_plan_screen_test.dart index af66d005..6dcf8c23 100644 --- a/test/nutrition/nutritional_plan_screen_test.dart +++ b/test/nutrition/nutritional_plan_screen_test.dart @@ -67,7 +67,8 @@ void main() { ); } - testWidgets('Test the widgets on the nutritional plan screen', (WidgetTester tester) async { + testWidgets('Test the widgets on the nutritional plan screen', + (WidgetTester tester) async { await tester.pumpWidget(createNutritionalPlan()); await tester.tap(find.byType(TextButton)); await tester.pumpAndSettle(); @@ -84,7 +85,8 @@ void main() { expect(find.byType(FlNutritionalDiaryChartWidget), findsNothing); }); - testWidgets('Tests the localization of times - EN', (WidgetTester tester) async { + testWidgets('Tests the localization of times - EN', + (WidgetTester tester) async { await tester.pumpWidget(createNutritionalPlan()); await tester.tap(find.byType(TextButton)); await tester.pumpAndSettle(); @@ -92,7 +94,8 @@ void main() { expect(find.text('5:00 PM'), findsOneWidget); }); - testWidgets('Tests the localization of times - DE', (WidgetTester tester) async { + testWidgets('Tests the localization of times - DE', + (WidgetTester tester) async { await tester.pumpWidget(createNutritionalPlan(locale: 'de')); await tester.tap(find.byType(TextButton)); await tester.pumpAndSettle(); diff --git a/test/nutrition/nutritional_plan_screen_test.mocks.dart b/test/nutrition/nutritional_plan_screen_test.mocks.dart index eee84b13..da991af9 100644 --- a/test/nutrition/nutritional_plan_screen_test.mocks.dart +++ b/test/nutrition/nutritional_plan_screen_test.mocks.dart @@ -65,7 +65,8 @@ class _FakeResponse_3 extends _i1.SmartFake implements _i3.Response { ); } -class _FakeStreamedResponse_4 extends _i1.SmartFake implements _i3.StreamedResponse { +class _FakeStreamedResponse_4 extends _i1.SmartFake + implements _i3.StreamedResponse { _FakeStreamedResponse_4( Object parent, Invocation parentInvocation, @@ -120,7 +121,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { ); @override - Map getDefaultHeaders({dynamic includeAuth = false}) => (super.noSuchMethod( + Map getDefaultHeaders({dynamic includeAuth = false}) => + (super.noSuchMethod( Invocation.method( #getDefaultHeaders, [], @@ -166,7 +168,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { #fetch, [uri], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override @@ -191,7 +194,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { uri, ], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override @@ -207,7 +211,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { uri, ], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override @@ -272,7 +277,8 @@ class MockAuthProvider extends _i1.Mock implements _i2.AuthProvider { ); @override - set applicationVersion(_i6.PackageInfo? _applicationVersion) => super.noSuchMethod( + set applicationVersion(_i6.PackageInfo? _applicationVersion) => + super.noSuchMethod( Invocation.setter( #applicationVersion, _applicationVersion, @@ -404,7 +410,8 @@ class MockAuthProvider extends _i1.Mock implements _i2.AuthProvider { #serverUrl: serverUrl, }, ), - returnValue: _i5.Future>.value({}), + returnValue: _i5.Future>.value( + {}), ) as _i5.Future>); @override @@ -422,7 +429,8 @@ class MockAuthProvider extends _i1.Mock implements _i2.AuthProvider { serverUrl, ], ), - returnValue: _i5.Future>.value({}), + returnValue: _i5.Future>.value( + {}), ) as _i5.Future>); @override @@ -703,12 +711,14 @@ class MockClient extends _i1.Mock implements _i3.Client { ) as _i5.Future<_i9.Uint8List>); @override - _i5.Future<_i3.StreamedResponse> send(_i3.BaseRequest? request) => (super.noSuchMethod( + _i5.Future<_i3.StreamedResponse> send(_i3.BaseRequest? request) => + (super.noSuchMethod( Invocation.method( #send, [request], ), - returnValue: _i5.Future<_i3.StreamedResponse>.value(_FakeStreamedResponse_4( + returnValue: + _i5.Future<_i3.StreamedResponse>.value(_FakeStreamedResponse_4( this, Invocation.method( #send, diff --git a/test/nutrition/nutritional_plans_screen_test.dart b/test/nutrition/nutritional_plans_screen_test.dart index b7fd34dc..668c390c 100644 --- a/test/nutrition/nutritional_plans_screen_test.dart +++ b/test/nutrition/nutritional_plans_screen_test.dart @@ -81,7 +81,8 @@ void main() { ); } - testWidgets('Test the widgets on the nutritional plans screen', (WidgetTester tester) async { + testWidgets('Test the widgets on the nutritional plans screen', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen()); //debugDumpApp(); @@ -90,7 +91,8 @@ void main() { expect(find.byType(ListTile), findsNWidgets(2)); }); - testWidgets('Test deleting an item by dragging the dismissible', (WidgetTester tester) async { + testWidgets('Test deleting an item by dragging the dismissible', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen()); await tester.drag(find.byKey(const Key('1')), const Offset(-500.0, 0.0)); @@ -105,7 +107,8 @@ void main() { expect(find.byType(ListTile), findsOneWidget); }); - testWidgets('Test the form on the nutritional plan screen', (WidgetTester tester) async { + testWidgets('Test the form on the nutritional plan screen', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen()); expect(find.byType(PlanForm), findsNothing); @@ -114,14 +117,16 @@ void main() { expect(find.byType(PlanForm), findsOneWidget); }); - testWidgets('Tests the localization of dates - EN', (WidgetTester tester) async { + testWidgets('Tests the localization of dates - EN', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen()); expect(find.text('1/1/2021'), findsOneWidget); expect(find.text('1/10/2021'), findsOneWidget); }); - testWidgets('Tests the localization of dates - DE', (WidgetTester tester) async { + testWidgets('Tests the localization of dates - DE', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen(locale: 'de')); expect(find.text('1.1.2021'), findsOneWidget); diff --git a/test/nutrition/nutritional_plans_screen_test.mocks.dart b/test/nutrition/nutritional_plans_screen_test.mocks.dart index 4cda1a3d..2cee1227 100644 --- a/test/nutrition/nutritional_plans_screen_test.mocks.dart +++ b/test/nutrition/nutritional_plans_screen_test.mocks.dart @@ -65,7 +65,8 @@ class _FakeResponse_3 extends _i1.SmartFake implements _i2.Response { ); } -class _FakeStreamedResponse_4 extends _i1.SmartFake implements _i2.StreamedResponse { +class _FakeStreamedResponse_4 extends _i1.SmartFake + implements _i2.StreamedResponse { _FakeStreamedResponse_4( Object parent, Invocation parentInvocation, @@ -111,7 +112,8 @@ class MockAuthProvider extends _i1.Mock implements _i3.AuthProvider { ); @override - set applicationVersion(_i4.PackageInfo? _applicationVersion) => super.noSuchMethod( + set applicationVersion(_i4.PackageInfo? _applicationVersion) => + super.noSuchMethod( Invocation.setter( #applicationVersion, _applicationVersion, @@ -243,7 +245,8 @@ class MockAuthProvider extends _i1.Mock implements _i3.AuthProvider { #serverUrl: serverUrl, }, ), - returnValue: _i5.Future>.value({}), + returnValue: _i5.Future>.value( + {}), ) as _i5.Future>); @override @@ -261,7 +264,8 @@ class MockAuthProvider extends _i1.Mock implements _i3.AuthProvider { serverUrl, ], ), - returnValue: _i5.Future>.value({}), + returnValue: _i5.Future>.value( + {}), ) as _i5.Future>); @override @@ -384,7 +388,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i7.WgerBaseProvider { ); @override - Map getDefaultHeaders({dynamic includeAuth = false}) => (super.noSuchMethod( + Map getDefaultHeaders({dynamic includeAuth = false}) => + (super.noSuchMethod( Invocation.method( #getDefaultHeaders, [], @@ -430,7 +435,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i7.WgerBaseProvider { #fetch, [uri], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override @@ -455,7 +461,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i7.WgerBaseProvider { uri, ], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override @@ -471,7 +478,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i7.WgerBaseProvider { uri, ], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override @@ -703,12 +711,14 @@ class MockClient extends _i1.Mock implements _i2.Client { ) as _i5.Future<_i9.Uint8List>); @override - _i5.Future<_i2.StreamedResponse> send(_i2.BaseRequest? request) => (super.noSuchMethod( + _i5.Future<_i2.StreamedResponse> send(_i2.BaseRequest? request) => + (super.noSuchMethod( Invocation.method( #send, [request], ), - returnValue: _i5.Future<_i2.StreamedResponse>.value(_FakeStreamedResponse_4( + returnValue: + _i5.Future<_i2.StreamedResponse>.value(_FakeStreamedResponse_4( this, Invocation.method( #send, diff --git a/test/nutrition/nutritional_values_class_test.dart b/test/nutrition/nutritional_values_class_test.dart index 495f95fe..f6ea1a68 100644 --- a/test/nutrition/nutritional_values_class_test.dart +++ b/test/nutrition/nutritional_values_class_test.dart @@ -27,9 +27,12 @@ void main() { group('Test the NutritionalValues class', () { setUp(() { - values1 = NutritionalValues.values(4000, 30.5, 340.5, 11.7, 41.0, 31.75, 21.3, 33.3); - values2 = NutritionalValues.values(4000, 30.5, 340.5, 11.7, 41.0, 31.75, 21.3, 33.3); - values3 = NutritionalValues.values(5000, 30.5, 340.5, 11.7, 41.0, 31.75, 21.3, 33.3); + values1 = NutritionalValues.values( + 4000, 30.5, 340.5, 11.7, 41.0, 31.75, 21.3, 33.3); + values2 = NutritionalValues.values( + 4000, 30.5, 340.5, 11.7, 41.0, 31.75, 21.3, 33.3); + values3 = NutritionalValues.values( + 5000, 30.5, 340.5, 11.7, 41.0, 31.75, 21.3, 33.3); values4 = NutritionalValues.values(1000, 10, 100, 1, 10.0, 10, 10, 10); }); @@ -40,13 +43,15 @@ void main() { test('Test the plus operator', () { final values5 = values1 + values4; - final result = NutritionalValues.values(5000, 40.5, 440.5, 12.7, 51.0, 41.75, 31.3, 43.3); + final result = NutritionalValues.values( + 5000, 40.5, 440.5, 12.7, 51.0, 41.75, 31.3, 43.3); expect(values5, result); }); test('Test the add method', () { values1.add(values4); - final result = NutritionalValues.values(5000, 40.5, 440.5, 12.7, 51.0, 41.75, 31.3, 43.3); + final result = NutritionalValues.values( + 5000, 40.5, 440.5, 12.7, 51.0, 41.75, 31.3, 43.3); expect(values1, result); }); }); diff --git a/test/other/base_provider_test.dart b/test/other/base_provider_test.dart index e416e1b8..b5129318 100644 --- a/test/other/base_provider_test.dart +++ b/test/other/base_provider_test.dart @@ -50,16 +50,20 @@ void main() { provider.makeUrl('endpoint', query: {'a': '2', 'b': 'c'}), ); expect( - Uri.https('localhost', '/api/v2/endpoint/log_data/', {'a': '2', 'b': 'c'}), - provider.makeUrl('endpoint', objectMethod: 'log_data', query: {'a': '2', 'b': 'c'}), + Uri.https( + 'localhost', '/api/v2/endpoint/log_data/', {'a': '2', 'b': 'c'}), + provider.makeUrl('endpoint', + objectMethod: 'log_data', query: {'a': '2', 'b': 'c'}), ); expect( Uri.https('localhost', '/api/v2/endpoint/42/', {'a': '2', 'b': 'c'}), provider.makeUrl('endpoint', id: 42, query: {'a': '2', 'b': 'c'}), ); expect( - Uri.https('localhost', '/api/v2/endpoint/42/log_data/', {'a': '2', 'b': 'c'}), - provider.makeUrl('endpoint', id: 42, objectMethod: 'log_data', query: {'a': '2', 'b': 'c'}), + Uri.https( + 'localhost', '/api/v2/endpoint/42/log_data/', {'a': '2', 'b': 'c'}), + provider.makeUrl('endpoint', + id: 42, objectMethod: 'log_data', query: {'a': '2', 'b': 'c'}), ); }); @@ -81,20 +85,26 @@ void main() { provider.makeUrl('endpoint', id: 5, objectMethod: 'log_data'), ); expect( - Uri.https('example.com', '/wger-url/api/v2/endpoint/', {'a': '2', 'b': 'c'}), + Uri.https( + 'example.com', '/wger-url/api/v2/endpoint/', {'a': '2', 'b': 'c'}), provider.makeUrl('endpoint', query: {'a': '2', 'b': 'c'}), ); expect( - Uri.https('example.com', '/wger-url/api/v2/endpoint/log_data/', {'a': '2', 'b': 'c'}), - provider.makeUrl('endpoint', objectMethod: 'log_data', query: {'a': '2', 'b': 'c'}), + Uri.https('example.com', '/wger-url/api/v2/endpoint/log_data/', + {'a': '2', 'b': 'c'}), + provider.makeUrl('endpoint', + objectMethod: 'log_data', query: {'a': '2', 'b': 'c'}), ); expect( - Uri.https('example.com', '/wger-url/api/v2/endpoint/42/', {'a': '2', 'b': 'c'}), + Uri.https('example.com', '/wger-url/api/v2/endpoint/42/', + {'a': '2', 'b': 'c'}), provider.makeUrl('endpoint', id: 42, query: {'a': '2', 'b': 'c'}), ); expect( - Uri.https('example.com', '/wger-url/api/v2/endpoint/42/log_data/', {'a': '2', 'b': 'c'}), - provider.makeUrl('endpoint', id: 42, objectMethod: 'log_data', query: {'a': '2', 'b': 'c'}), + Uri.https('example.com', '/wger-url/api/v2/endpoint/42/log_data/', + {'a': '2', 'b': 'c'}), + provider.makeUrl('endpoint', + id: 42, objectMethod: 'log_data', query: {'a': '2', 'b': 'c'}), ); }); }); @@ -132,7 +142,8 @@ void main() { .thenAnswer((_) => Future.value(response3)); // Act - final WgerBaseProvider provider = WgerBaseProvider(testAuthProvider, mockHttpClient); + final WgerBaseProvider provider = + WgerBaseProvider(testAuthProvider, mockHttpClient); final data = await provider.fetchPaginated(paginationUri1); // Assert diff --git a/test/other/base_provider_test.mocks.dart b/test/other/base_provider_test.mocks.dart index b9f7770e..aeb648c7 100644 --- a/test/other/base_provider_test.mocks.dart +++ b/test/other/base_provider_test.mocks.dart @@ -31,7 +31,8 @@ class _FakeResponse_0 extends _i1.SmartFake implements _i2.Response { ); } -class _FakeStreamedResponse_1 extends _i1.SmartFake implements _i2.StreamedResponse { +class _FakeStreamedResponse_1 extends _i1.SmartFake + implements _i2.StreamedResponse { _FakeStreamedResponse_1( Object parent, Invocation parentInvocation, @@ -244,12 +245,14 @@ class MockClient extends _i1.Mock implements _i2.Client { ) as _i3.Future<_i5.Uint8List>); @override - _i3.Future<_i2.StreamedResponse> send(_i2.BaseRequest? request) => (super.noSuchMethod( + _i3.Future<_i2.StreamedResponse> send(_i2.BaseRequest? request) => + (super.noSuchMethod( Invocation.method( #send, [request], ), - returnValue: _i3.Future<_i2.StreamedResponse>.value(_FakeStreamedResponse_1( + returnValue: + _i3.Future<_i2.StreamedResponse>.value(_FakeStreamedResponse_1( this, Invocation.method( #send, diff --git a/test/user/provider_test.mocks.dart b/test/user/provider_test.mocks.dart index 3f8bd77a..d6dc8d6e 100644 --- a/test/user/provider_test.mocks.dart +++ b/test/user/provider_test.mocks.dart @@ -106,7 +106,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { ); @override - Map getDefaultHeaders({dynamic includeAuth = false}) => (super.noSuchMethod( + Map getDefaultHeaders({dynamic includeAuth = false}) => + (super.noSuchMethod( Invocation.method( #getDefaultHeaders, [], @@ -152,7 +153,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { #fetch, [uri], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override @@ -177,7 +179,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { uri, ], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override @@ -193,7 +196,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { uri, ], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override diff --git a/test/utils.dart b/test/utils.dart index 9244b4da..798e8031 100644 --- a/test/utils.dart +++ b/test/utils.dart @@ -29,4 +29,5 @@ final AuthProvider testAuthProvider = AuthProvider(MockClient(), false) // Test Exercises provider final mockBaseProvider = MockWgerBaseProvider(); -final ExercisesProvider testExercisesProvider = ExercisesProvider(mockBaseProvider); +final ExercisesProvider testExercisesProvider = + ExercisesProvider(mockBaseProvider); diff --git a/test/weight/weight_model_test.dart b/test/weight/weight_model_test.dart index 1a3698f8..05313b99 100644 --- a/test/weight/weight_model_test.dart +++ b/test/weight/weight_model_test.dart @@ -21,15 +21,21 @@ import 'package:wger/models/body_weight/weight_entry.dart'; void main() { group('fetchPost', () { - test('Test that the weight entries are correctly converted to json', () async { - WeightEntry weightEntry = WeightEntry(id: 1, weight: 80, date: DateTime(2020, 12, 31)); - expect(weightEntry.toJson(), {'id': 1, 'weight': '80', 'date': '2020-12-31'}); + test('Test that the weight entries are correctly converted to json', + () async { + WeightEntry weightEntry = + WeightEntry(id: 1, weight: 80, date: DateTime(2020, 12, 31)); + expect(weightEntry.toJson(), + {'id': 1, 'weight': '80', 'date': '2020-12-31'}); - weightEntry = WeightEntry(id: 2, weight: 70.2, date: DateTime(2020, 12, 01)); - expect(weightEntry.toJson(), {'id': 2, 'weight': '70.2', 'date': '2020-12-01'}); + weightEntry = + WeightEntry(id: 2, weight: 70.2, date: DateTime(2020, 12, 01)); + expect(weightEntry.toJson(), + {'id': 2, 'weight': '70.2', 'date': '2020-12-01'}); }); - test('Test that the weight entries are correctly converted from json', () async { + test('Test that the weight entries are correctly converted from json', + () async { final WeightEntry weightEntryObj = WeightEntry(id: 1, weight: 80, date: DateTime(2020, 12, 31)); final WeightEntry weightEntry = WeightEntry.fromJson({ @@ -47,7 +53,8 @@ void main() { test('Test the individual values from the model', () { WeightEntry _weightModel; //_weightModel = WeightEntry(); - _weightModel = WeightEntry(id: 1, weight: 80, date: DateTime(2020, 10, 01)); + _weightModel = + WeightEntry(id: 1, weight: 80, date: DateTime(2020, 10, 01)); expect(_weightModel.id, 1); expect(_weightModel.weight, 80); diff --git a/test/weight/weight_provider_test.dart b/test/weight/weight_provider_test.dart index 6f4dccad..ccb52bf9 100644 --- a/test/weight/weight_provider_test.dart +++ b/test/weight/weight_provider_test.dart @@ -44,7 +44,8 @@ void main() { host: 'localhost', path: 'api/v2/weightentry/', ); - when(mockBaseProvider.makeUrl(any, query: anyNamed('query'))).thenReturn(uri); + when(mockBaseProvider.makeUrl(any, query: anyNamed('query'))) + .thenReturn(uri); final Map weightEntries = jsonDecode( fixture('weight/weight_entries.json'), ); @@ -69,13 +70,17 @@ void main() { host: 'localhost', path: 'api/v2/weightentry/', ); - when(mockBaseProvider.makeUrl(any, query: anyNamed('query'))).thenReturn(uri); - when(mockBaseProvider.post({'id': null, 'weight': '80', 'date': '2021-01-01'}, uri)) - .thenAnswer((_) => Future.value({'id': 25, 'date': '2021-01-01', 'weight': '80'})); + when(mockBaseProvider.makeUrl(any, query: anyNamed('query'))) + .thenReturn(uri); + when(mockBaseProvider + .post({'id': null, 'weight': '80', 'date': '2021-01-01'}, uri)) + .thenAnswer((_) => + Future.value({'id': 25, 'date': '2021-01-01', 'weight': '80'})); // Act final BodyWeightProvider provider = BodyWeightProvider(mockBaseProvider); - final WeightEntry weightEntry = WeightEntry(date: DateTime(2021, 1, 1), weight: 80); + final WeightEntry weightEntry = + WeightEntry(date: DateTime(2021, 1, 1), weight: 80); final WeightEntry weightEntryNew = await provider.addEntry(weightEntry); // Assert @@ -91,9 +96,11 @@ void main() { host: 'localhost', path: 'api/v2/weightentry/4/', ); - when(mockBaseProvider.makeUrl(any, query: anyNamed('query'))).thenReturn(uri); - when(mockBaseProvider.deleteRequest('weightentry', 4)).thenAnswer( - (_) => Future.value(Response("{'id': 4, 'date': '2021-01-01', 'weight': '80'}", 204))); + when(mockBaseProvider.makeUrl(any, query: anyNamed('query'))) + .thenReturn(uri); + when(mockBaseProvider.deleteRequest('weightentry', 4)).thenAnswer((_) => + Future.value(Response( + "{'id': 4, 'date': '2021-01-01', 'weight': '80'}", 204))); // DELETE the data from the server final BodyWeightProvider provider = BodyWeightProvider(mockBaseProvider); diff --git a/test/weight/weight_provider_test.mocks.dart b/test/weight/weight_provider_test.mocks.dart index 8d12e498..352c53ad 100644 --- a/test/weight/weight_provider_test.mocks.dart +++ b/test/weight/weight_provider_test.mocks.dart @@ -106,7 +106,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { ); @override - Map getDefaultHeaders({dynamic includeAuth = false}) => (super.noSuchMethod( + Map getDefaultHeaders({dynamic includeAuth = false}) => + (super.noSuchMethod( Invocation.method( #getDefaultHeaders, [], @@ -152,7 +153,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { #fetch, [uri], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override @@ -177,7 +179,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { uri, ], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override @@ -193,7 +196,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { uri, ], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override diff --git a/test/weight/weight_screen_test.dart b/test/weight/weight_screen_test.dart index 10bd75bd..aa626c6d 100644 --- a/test/weight/weight_screen_test.dart +++ b/test/weight/weight_screen_test.dart @@ -53,7 +53,8 @@ void main() { ); } - testWidgets('Test the widgets on the body weight screen', (WidgetTester tester) async { + testWidgets('Test the widgets on the body weight screen', + (WidgetTester tester) async { await tester.pumpWidget(createWeightScreen()); expect(find.text('Weight'), findsOneWidget); @@ -62,7 +63,8 @@ void main() { expect(find.byType(ListTile), findsNWidgets(2)); }); - testWidgets('Test deleting an item by dragging the dismissible', (WidgetTester tester) async { + testWidgets('Test deleting an item by dragging the dismissible', + (WidgetTester tester) async { await tester.pumpWidget(createWeightScreen()); await tester.drag(find.byKey(const Key('1')), const Offset(-500.0, 0.0)); @@ -71,7 +73,8 @@ void main() { expect(find.byType(ListTile), findsOneWidget); }); - testWidgets('Test the form on the body weight screen', (WidgetTester tester) async { + testWidgets('Test the form on the body weight screen', + (WidgetTester tester) async { await tester.pumpWidget(createWeightScreen()); expect(find.byType(WeightForm), findsNothing); @@ -80,7 +83,8 @@ void main() { expect(find.byType(WeightForm), findsOneWidget); }); - testWidgets('Tests the localization of dates - EN', (WidgetTester tester) async { + testWidgets('Tests the localization of dates - EN', + (WidgetTester tester) async { await tester.pumpWidget(createWeightScreen()); // One in the entries list, one in the chart @@ -88,7 +92,8 @@ void main() { expect(find.text('1/10/2021'), findsOneWidget); }); - testWidgets('Tests the localization of dates - DE', (WidgetTester tester) async { + testWidgets('Tests the localization of dates - DE', + (WidgetTester tester) async { await tester.pumpWidget(createWeightScreen(locale: 'de')); expect(find.text('1.1.2021'), findsOneWidget); diff --git a/test/weight/weight_screen_test.mocks.dart b/test/weight/weight_screen_test.mocks.dart index f53b8c2f..a63186b3 100644 --- a/test/weight/weight_screen_test.mocks.dart +++ b/test/weight/weight_screen_test.mocks.dart @@ -22,7 +22,8 @@ import 'package:wger/providers/body_weight.dart' as _i4; // ignore_for_file: camel_case_types // ignore_for_file: subtype_of_sealed_class -class _FakeWgerBaseProvider_0 extends _i1.SmartFake implements _i2.WgerBaseProvider { +class _FakeWgerBaseProvider_0 extends _i1.SmartFake + implements _i2.WgerBaseProvider { _FakeWgerBaseProvider_0( Object parent, Invocation parentInvocation, @@ -45,7 +46,8 @@ class _FakeWeightEntry_1 extends _i1.SmartFake implements _i3.WeightEntry { /// A class which mocks [BodyWeightProvider]. /// /// See the documentation for Mockito's code generation for more information. -class MockBodyWeightProvider extends _i1.Mock implements _i4.BodyWeightProvider { +class MockBodyWeightProvider extends _i1.Mock + implements _i4.BodyWeightProvider { MockBodyWeightProvider() { _i1.throwOnMissingStub(this); } @@ -105,7 +107,8 @@ class MockBodyWeightProvider extends _i1.Mock implements _i4.BodyWeightProvider ) as _i3.WeightEntry); @override - _i3.WeightEntry? findByDate(DateTime? date) => (super.noSuchMethod(Invocation.method( + _i3.WeightEntry? findByDate(DateTime? date) => + (super.noSuchMethod(Invocation.method( #findByDate, [date], )) as _i3.WeightEntry?); @@ -116,11 +119,13 @@ class MockBodyWeightProvider extends _i1.Mock implements _i4.BodyWeightProvider #fetchAndSetEntries, [], ), - returnValue: _i5.Future>.value(<_i3.WeightEntry>[]), + returnValue: + _i5.Future>.value(<_i3.WeightEntry>[]), ) as _i5.Future>); @override - _i5.Future<_i3.WeightEntry> addEntry(_i3.WeightEntry? entry) => (super.noSuchMethod( + _i5.Future<_i3.WeightEntry> addEntry(_i3.WeightEntry? entry) => + (super.noSuchMethod( Invocation.method( #addEntry, [entry], diff --git a/test/workout/gym_mode_screen_test.dart b/test/workout/gym_mode_screen_test.dart index 54efa024..503e6273 100644 --- a/test/workout/gym_mode_screen_test.dart +++ b/test/workout/gym_mode_screen_test.dart @@ -74,7 +74,8 @@ void main() { ); } - testWidgets('Test the widgets on the gym mode screen', (WidgetTester tester) async { + testWidgets('Test the widgets on the gym mode screen', + (WidgetTester tester) async { when(mockExerciseProvider.findExerciseBaseById(1)).thenReturn(bases[0]); when(mockExerciseProvider.findExerciseBaseById(6)).thenReturn(bases[5]); @@ -114,10 +115,12 @@ void main() { expect(find.text('Bench press'), findsOneWidget); expect(find.byType(LogPage), findsOneWidget); expect(find.byType(Form), findsOneWidget); - expect(find.byType(ListTile), findsNWidgets(3), reason: 'Two logs and the switch tile'); + expect(find.byType(ListTile), findsNWidgets(3), + reason: 'Two logs and the switch tile'); expect(find.text('10 × 10 kg (1.5 RiR)'), findsOneWidget); expect(find.text('12 × 10 kg (2 RiR)'), findsOneWidget); - expect(find.text('Make sure to warm up'), findsOneWidget, reason: 'Set comment'); + expect(find.text('Make sure to warm up'), findsOneWidget, + reason: 'Set comment'); expect(find.byIcon(Icons.close), findsOneWidget); expect(find.byIcon(Icons.menu), findsOneWidget); expect(find.byIcon(Icons.chevron_left), findsOneWidget); diff --git a/test/workout/gym_mode_screen_test.mocks.dart b/test/workout/gym_mode_screen_test.mocks.dart index 033e344e..b32f8587 100644 --- a/test/workout/gym_mode_screen_test.mocks.dart +++ b/test/workout/gym_mode_screen_test.mocks.dart @@ -68,7 +68,8 @@ class _FakeResponse_3 extends _i1.SmartFake implements _i3.Response { ); } -class _FakeWgerBaseProvider_4 extends _i1.SmartFake implements _i4.WgerBaseProvider { +class _FakeWgerBaseProvider_4 extends _i1.SmartFake + implements _i4.WgerBaseProvider { _FakeWgerBaseProvider_4( Object parent, Invocation parentInvocation, @@ -88,7 +89,8 @@ class _FakeExerciseBase_5 extends _i1.SmartFake implements _i5.ExerciseBase { ); } -class _FakeExerciseCategory_6 extends _i1.SmartFake implements _i6.ExerciseCategory { +class _FakeExerciseCategory_6 extends _i1.SmartFake + implements _i6.ExerciseCategory { _FakeExerciseCategory_6( Object parent, Invocation parentInvocation, @@ -173,7 +175,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { ); @override - Map getDefaultHeaders({dynamic includeAuth = false}) => (super.noSuchMethod( + Map getDefaultHeaders({dynamic includeAuth = false}) => + (super.noSuchMethod( Invocation.method( #getDefaultHeaders, [], @@ -219,7 +222,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { #fetch, [uri], ), - returnValue: _i10.Future>.value({}), + returnValue: + _i10.Future>.value({}), ) as _i10.Future>); @override @@ -244,7 +248,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { uri, ], ), - returnValue: _i10.Future>.value({}), + returnValue: + _i10.Future>.value({}), ) as _i10.Future>); @override @@ -260,7 +265,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { uri, ], ), - returnValue: _i10.Future>.value({}), + returnValue: + _i10.Future>.value({}), ) as _i10.Future>); @override @@ -307,7 +313,8 @@ class MockExercisesProvider extends _i1.Mock implements _i11.ExercisesProvider { ) as _i4.WgerBaseProvider); @override - set exerciseBases(List<_i5.ExerciseBase>? exercisesBases) => super.noSuchMethod( + set exerciseBases(List<_i5.ExerciseBase>? exercisesBases) => + super.noSuchMethod( Invocation.setter( #exerciseBases, exercisesBases, @@ -322,7 +329,8 @@ class MockExercisesProvider extends _i1.Mock implements _i11.ExercisesProvider { ) as List<_i5.ExerciseBase>); @override - set filteredExerciseBases(List<_i5.ExerciseBase>? newFilteredExercises) => super.noSuchMethod( + set filteredExerciseBases(List<_i5.ExerciseBase>? newFilteredExercises) => + super.noSuchMethod( Invocation.setter( #filteredExerciseBases, newFilteredExercises, @@ -331,7 +339,8 @@ class MockExercisesProvider extends _i1.Mock implements _i11.ExercisesProvider { ); @override - Map> get exerciseBasesByVariation => (super.noSuchMethod( + Map> get exerciseBasesByVariation => + (super.noSuchMethod( Invocation.getter(#exerciseBasesByVariation), returnValue: >{}, ) as Map>); @@ -550,7 +559,8 @@ class MockExercisesProvider extends _i1.Mock implements _i11.ExercisesProvider { ) as _i10.Future); @override - _i10.Future<_i5.ExerciseBase> fetchAndSetExerciseBase(int? exerciseBaseId) => (super.noSuchMethod( + _i10.Future<_i5.ExerciseBase> fetchAndSetExerciseBase(int? exerciseBaseId) => + (super.noSuchMethod( Invocation.method( #fetchAndSetExerciseBase, [exerciseBaseId], @@ -565,7 +575,8 @@ class MockExercisesProvider extends _i1.Mock implements _i11.ExercisesProvider { ) as _i10.Future<_i5.ExerciseBase>); @override - _i5.ExerciseBase readExerciseBaseFromBaseInfo(dynamic baseData) => (super.noSuchMethod( + _i5.ExerciseBase readExerciseBaseFromBaseInfo(dynamic baseData) => + (super.noSuchMethod( Invocation.method( #readExerciseBaseFromBaseInfo, [baseData], @@ -614,7 +625,8 @@ class MockExercisesProvider extends _i1.Mock implements _i11.ExercisesProvider { #searchEnglish: searchEnglish, }, ), - returnValue: _i10.Future>.value(<_i5.ExerciseBase>[]), + returnValue: + _i10.Future>.value(<_i5.ExerciseBase>[]), ) as _i10.Future>); @override diff --git a/test/workout/plate_calculator_test.dart b/test/workout/plate_calculator_test.dart index e1150406..84927f53 100644 --- a/test/workout/plate_calculator_test.dart +++ b/test/workout/plate_calculator_test.dart @@ -25,8 +25,10 @@ void main() { test('Regular weights', () async { expect(plateCalculator(40, BAR_WEIGHT, AVAILABLE_PLATES), [10]); expect(plateCalculator(100, BAR_WEIGHT, AVAILABLE_PLATES), [15, 15, 10]); - expect(plateCalculator(102.5, BAR_WEIGHT, AVAILABLE_PLATES), [15, 15, 10, 1.25]); - expect(plateCalculator(140, BAR_WEIGHT, AVAILABLE_PLATES), [15, 15, 15, 15]); + expect(plateCalculator(102.5, BAR_WEIGHT, AVAILABLE_PLATES), + [15, 15, 10, 1.25]); + expect( + plateCalculator(140, BAR_WEIGHT, AVAILABLE_PLATES), [15, 15, 15, 15]); expect(plateCalculator(45, BAR_WEIGHT, AVAILABLE_PLATES), [10, 2.5]); expect(plateCalculator(85, BAR_WEIGHT, AVAILABLE_PLATES), [15, 15, 2.5]); }); diff --git a/test/workout/repetition_unit_form_widget_test.dart b/test/workout/repetition_unit_form_widget_test.dart index 61664d3a..c19a4297 100644 --- a/test/workout/repetition_unit_form_widget_test.dart +++ b/test/workout/repetition_unit_form_widget_test.dart @@ -52,7 +52,8 @@ void main() { setUp(() { mockWorkoutPlans = MockWorkoutPlansProvider(); - when(mockWorkoutPlans.repetitionUnits).thenAnswer((_) => [unit1, unit2, unit3]); + when(mockWorkoutPlans.repetitionUnits) + .thenAnswer((_) => [unit1, unit2, unit3]); }); Widget createHomeScreen() { @@ -86,7 +87,8 @@ void main() { expect(find.text('this is repetition number 3'), findsWidgets); }); - testWidgets('Test that the correct units are set after selection', (WidgetTester tester) async { + testWidgets('Test that the correct units are set after selection', + (WidgetTester tester) async { // arrange await tester.pumpWidget(createHomeScreen()); await tester.pump(); diff --git a/test/workout/repetition_unit_form_widget_test.mocks.dart b/test/workout/repetition_unit_form_widget_test.mocks.dart index 95658806..07ecf14b 100644 --- a/test/workout/repetition_unit_form_widget_test.mocks.dart +++ b/test/workout/repetition_unit_form_widget_test.mocks.dart @@ -31,7 +31,8 @@ import 'package:wger/providers/workout_plans.dart' as _i11; // ignore_for_file: camel_case_types // ignore_for_file: subtype_of_sealed_class -class _FakeWgerBaseProvider_0 extends _i1.SmartFake implements _i2.WgerBaseProvider { +class _FakeWgerBaseProvider_0 extends _i1.SmartFake + implements _i2.WgerBaseProvider { _FakeWgerBaseProvider_0( Object parent, Invocation parentInvocation, @@ -51,7 +52,8 @@ class _FakeWeightUnit_1 extends _i1.SmartFake implements _i3.WeightUnit { ); } -class _FakeRepetitionUnit_2 extends _i1.SmartFake implements _i4.RepetitionUnit { +class _FakeRepetitionUnit_2 extends _i1.SmartFake + implements _i4.RepetitionUnit { _FakeRepetitionUnit_2( Object parent, Invocation parentInvocation, @@ -101,7 +103,8 @@ class _FakeSetting_6 extends _i1.SmartFake implements _i8.Setting { ); } -class _FakeWorkoutSession_7 extends _i1.SmartFake implements _i9.WorkoutSession { +class _FakeWorkoutSession_7 extends _i1.SmartFake + implements _i9.WorkoutSession { _FakeWorkoutSession_7( Object parent, Invocation parentInvocation, @@ -124,7 +127,8 @@ class _FakeLog_8 extends _i1.SmartFake implements _i10.Log { /// A class which mocks [WorkoutPlansProvider]. /// /// See the documentation for Mockito's code generation for more information. -class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProvider { +class MockWorkoutPlansProvider extends _i1.Mock + implements _i11.WorkoutPlansProvider { MockWorkoutPlansProvider() { _i1.throwOnMissingStub(this); } @@ -261,7 +265,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProv ) as _i12.Future); @override - _i12.Future<_i5.WorkoutPlan> fetchAndSetPlanSparse(int? planId) => (super.noSuchMethod( + _i12.Future<_i5.WorkoutPlan> fetchAndSetPlanSparse(int? planId) => + (super.noSuchMethod( Invocation.method( #fetchAndSetPlanSparse, [planId], @@ -276,7 +281,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProv ) as _i12.Future<_i5.WorkoutPlan>); @override - _i12.Future<_i5.WorkoutPlan> fetchAndSetWorkoutPlanFull(int? workoutId) => (super.noSuchMethod( + _i12.Future<_i5.WorkoutPlan> fetchAndSetWorkoutPlanFull(int? workoutId) => + (super.noSuchMethod( Invocation.method( #fetchAndSetWorkoutPlanFull, [workoutId], @@ -291,7 +297,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProv ) as _i12.Future<_i5.WorkoutPlan>); @override - _i12.Future<_i5.WorkoutPlan> addWorkout(_i5.WorkoutPlan? workout) => (super.noSuchMethod( + _i12.Future<_i5.WorkoutPlan> addWorkout(_i5.WorkoutPlan? workout) => + (super.noSuchMethod( Invocation.method( #addWorkout, [workout], @@ -306,7 +313,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProv ) as _i12.Future<_i5.WorkoutPlan>); @override - _i12.Future editWorkout(_i5.WorkoutPlan? workout) => (super.noSuchMethod( + _i12.Future editWorkout(_i5.WorkoutPlan? workout) => + (super.noSuchMethod( Invocation.method( #editWorkout, [workout], @@ -338,7 +346,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProv base, ], ), - returnValue: _i12.Future>.value({}), + returnValue: + _i12.Future>.value({}), ) as _i12.Future>); @override @@ -458,7 +467,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProv ) as _i12.Future>); @override - _i12.Future fetchComputedSettings(_i7.Set? workoutSet) => (super.noSuchMethod( + _i12.Future fetchComputedSettings(_i7.Set? workoutSet) => + (super.noSuchMethod( Invocation.method( #fetchComputedSettings, [workoutSet], @@ -494,7 +504,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProv ) as _i12.Future); @override - _i12.Future<_i8.Setting> addSetting(_i8.Setting? workoutSetting) => (super.noSuchMethod( + _i12.Future<_i8.Setting> addSetting(_i8.Setting? workoutSetting) => + (super.noSuchMethod( Invocation.method( #addSetting, [workoutSetting], @@ -518,12 +529,14 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProv ) as _i12.Future); @override - _i12.Future<_i9.WorkoutSession> addSession(_i9.WorkoutSession? session) => (super.noSuchMethod( + _i12.Future<_i9.WorkoutSession> addSession(_i9.WorkoutSession? session) => + (super.noSuchMethod( Invocation.method( #addSession, [session], ), - returnValue: _i12.Future<_i9.WorkoutSession>.value(_FakeWorkoutSession_7( + returnValue: + _i12.Future<_i9.WorkoutSession>.value(_FakeWorkoutSession_7( this, Invocation.method( #addSession, diff --git a/test/workout/weight_unit_form_widget_test.dart b/test/workout/weight_unit_form_widget_test.dart index eb051354..188df161 100644 --- a/test/workout/weight_unit_form_widget_test.dart +++ b/test/workout/weight_unit_form_widget_test.dart @@ -87,7 +87,8 @@ void main() { expect(find.text('plates'), findsWidgets); }); - testWidgets('Test that the correct units are set after selection', (WidgetTester tester) async { + testWidgets('Test that the correct units are set after selection', + (WidgetTester tester) async { // arrange await tester.pumpWidget(createHomeScreen()); await tester.pump(); diff --git a/test/workout/weight_unit_form_widget_test.mocks.dart b/test/workout/weight_unit_form_widget_test.mocks.dart index 2bb2c28a..7dacae9e 100644 --- a/test/workout/weight_unit_form_widget_test.mocks.dart +++ b/test/workout/weight_unit_form_widget_test.mocks.dart @@ -22,7 +22,8 @@ import 'package:wger/providers/body_weight.dart' as _i4; // ignore_for_file: camel_case_types // ignore_for_file: subtype_of_sealed_class -class _FakeWgerBaseProvider_0 extends _i1.SmartFake implements _i2.WgerBaseProvider { +class _FakeWgerBaseProvider_0 extends _i1.SmartFake + implements _i2.WgerBaseProvider { _FakeWgerBaseProvider_0( Object parent, Invocation parentInvocation, @@ -45,7 +46,8 @@ class _FakeWeightEntry_1 extends _i1.SmartFake implements _i3.WeightEntry { /// A class which mocks [BodyWeightProvider]. /// /// See the documentation for Mockito's code generation for more information. -class MockBodyWeightProvider extends _i1.Mock implements _i4.BodyWeightProvider { +class MockBodyWeightProvider extends _i1.Mock + implements _i4.BodyWeightProvider { MockBodyWeightProvider() { _i1.throwOnMissingStub(this); } @@ -105,7 +107,8 @@ class MockBodyWeightProvider extends _i1.Mock implements _i4.BodyWeightProvider ) as _i3.WeightEntry); @override - _i3.WeightEntry? findByDate(DateTime? date) => (super.noSuchMethod(Invocation.method( + _i3.WeightEntry? findByDate(DateTime? date) => + (super.noSuchMethod(Invocation.method( #findByDate, [date], )) as _i3.WeightEntry?); @@ -116,11 +119,13 @@ class MockBodyWeightProvider extends _i1.Mock implements _i4.BodyWeightProvider #fetchAndSetEntries, [], ), - returnValue: _i5.Future>.value(<_i3.WeightEntry>[]), + returnValue: + _i5.Future>.value(<_i3.WeightEntry>[]), ) as _i5.Future>); @override - _i5.Future<_i3.WeightEntry> addEntry(_i3.WeightEntry? entry) => (super.noSuchMethod( + _i5.Future<_i3.WeightEntry> addEntry(_i3.WeightEntry? entry) => + (super.noSuchMethod( Invocation.method( #addEntry, [entry], diff --git a/test/workout/workout_day_form_test.dart b/test/workout/workout_day_form_test.dart index 99e321e9..9098c55b 100644 --- a/test/workout/workout_day_form_test.dart +++ b/test/workout/workout_day_form_test.dart @@ -58,7 +58,8 @@ void main() { ); } - testWidgets('Test the widgets on the DayFormWidget', (WidgetTester tester) async { + testWidgets('Test the widgets on the DayFormWidget', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen()); await tester.pumpAndSettle(); @@ -68,13 +69,15 @@ void main() { }); testWidgets('Test creating a new day', (WidgetTester tester) async { - when(mockWorkoutPlans.addDay(any, any)).thenAnswer((_) => Future.value(Day())); + when(mockWorkoutPlans.addDay(any, any)) + .thenAnswer((_) => Future.value(Day())); await tester.pumpWidget(createHomeScreen()); await tester.pumpAndSettle(); expect(find.text(''), findsOneWidget, reason: 'New day has no description'); - await tester.enterText(find.byKey(const Key('field-description')), 'Leg day!'); + await tester.enterText( + find.byKey(const Key('field-description')), 'Leg day!'); await tester.tap(find.byKey(const Key('field-checkbox-1'))); await tester.tap(find.byKey(const Key(SUBMIT_BUTTON_KEY_NAME))); @@ -85,7 +88,8 @@ void main() { //verify(mockObserver.didPop(any, any)); }); - testWidgets('Tests the localization of days - EN', (WidgetTester tester) async { + testWidgets('Tests the localization of days - EN', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen()); expect(find.text('Monday'), findsOneWidget); @@ -93,7 +97,8 @@ void main() { expect(find.text('Thursday'), findsOneWidget); }); - testWidgets('Tests the localization of days - DE', (WidgetTester tester) async { + testWidgets('Tests the localization of days - DE', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen(locale: 'de')); expect(find.text('Montag'), findsOneWidget); diff --git a/test/workout/workout_day_form_test.mocks.dart b/test/workout/workout_day_form_test.mocks.dart index 9811b312..c147b84f 100644 --- a/test/workout/workout_day_form_test.mocks.dart +++ b/test/workout/workout_day_form_test.mocks.dart @@ -31,7 +31,8 @@ import 'package:wger/providers/workout_plans.dart' as _i11; // ignore_for_file: camel_case_types // ignore_for_file: subtype_of_sealed_class -class _FakeWgerBaseProvider_0 extends _i1.SmartFake implements _i2.WgerBaseProvider { +class _FakeWgerBaseProvider_0 extends _i1.SmartFake + implements _i2.WgerBaseProvider { _FakeWgerBaseProvider_0( Object parent, Invocation parentInvocation, @@ -51,7 +52,8 @@ class _FakeWeightUnit_1 extends _i1.SmartFake implements _i3.WeightUnit { ); } -class _FakeRepetitionUnit_2 extends _i1.SmartFake implements _i4.RepetitionUnit { +class _FakeRepetitionUnit_2 extends _i1.SmartFake + implements _i4.RepetitionUnit { _FakeRepetitionUnit_2( Object parent, Invocation parentInvocation, @@ -101,7 +103,8 @@ class _FakeSetting_6 extends _i1.SmartFake implements _i8.Setting { ); } -class _FakeWorkoutSession_7 extends _i1.SmartFake implements _i9.WorkoutSession { +class _FakeWorkoutSession_7 extends _i1.SmartFake + implements _i9.WorkoutSession { _FakeWorkoutSession_7( Object parent, Invocation parentInvocation, @@ -124,7 +127,8 @@ class _FakeLog_8 extends _i1.SmartFake implements _i10.Log { /// A class which mocks [WorkoutPlansProvider]. /// /// See the documentation for Mockito's code generation for more information. -class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProvider { +class MockWorkoutPlansProvider extends _i1.Mock + implements _i11.WorkoutPlansProvider { MockWorkoutPlansProvider() { _i1.throwOnMissingStub(this); } @@ -261,7 +265,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProv ) as _i12.Future); @override - _i12.Future<_i5.WorkoutPlan> fetchAndSetPlanSparse(int? planId) => (super.noSuchMethod( + _i12.Future<_i5.WorkoutPlan> fetchAndSetPlanSparse(int? planId) => + (super.noSuchMethod( Invocation.method( #fetchAndSetPlanSparse, [planId], @@ -276,7 +281,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProv ) as _i12.Future<_i5.WorkoutPlan>); @override - _i12.Future<_i5.WorkoutPlan> fetchAndSetWorkoutPlanFull(int? workoutId) => (super.noSuchMethod( + _i12.Future<_i5.WorkoutPlan> fetchAndSetWorkoutPlanFull(int? workoutId) => + (super.noSuchMethod( Invocation.method( #fetchAndSetWorkoutPlanFull, [workoutId], @@ -291,7 +297,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProv ) as _i12.Future<_i5.WorkoutPlan>); @override - _i12.Future<_i5.WorkoutPlan> addWorkout(_i5.WorkoutPlan? workout) => (super.noSuchMethod( + _i12.Future<_i5.WorkoutPlan> addWorkout(_i5.WorkoutPlan? workout) => + (super.noSuchMethod( Invocation.method( #addWorkout, [workout], @@ -306,7 +313,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProv ) as _i12.Future<_i5.WorkoutPlan>); @override - _i12.Future editWorkout(_i5.WorkoutPlan? workout) => (super.noSuchMethod( + _i12.Future editWorkout(_i5.WorkoutPlan? workout) => + (super.noSuchMethod( Invocation.method( #editWorkout, [workout], @@ -338,7 +346,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProv base, ], ), - returnValue: _i12.Future>.value({}), + returnValue: + _i12.Future>.value({}), ) as _i12.Future>); @override @@ -458,7 +467,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProv ) as _i12.Future>); @override - _i12.Future fetchComputedSettings(_i7.Set? workoutSet) => (super.noSuchMethod( + _i12.Future fetchComputedSettings(_i7.Set? workoutSet) => + (super.noSuchMethod( Invocation.method( #fetchComputedSettings, [workoutSet], @@ -494,7 +504,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProv ) as _i12.Future); @override - _i12.Future<_i8.Setting> addSetting(_i8.Setting? workoutSetting) => (super.noSuchMethod( + _i12.Future<_i8.Setting> addSetting(_i8.Setting? workoutSetting) => + (super.noSuchMethod( Invocation.method( #addSetting, [workoutSetting], @@ -518,12 +529,14 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProv ) as _i12.Future); @override - _i12.Future<_i9.WorkoutSession> addSession(_i9.WorkoutSession? session) => (super.noSuchMethod( + _i12.Future<_i9.WorkoutSession> addSession(_i9.WorkoutSession? session) => + (super.noSuchMethod( Invocation.method( #addSession, [session], ), - returnValue: _i12.Future<_i9.WorkoutSession>.value(_FakeWorkoutSession_7( + returnValue: + _i12.Future<_i9.WorkoutSession>.value(_FakeWorkoutSession_7( this, Invocation.method( #addSession, diff --git a/test/workout/workout_form_test.dart b/test/workout/workout_form_test.dart index 44f72b28..b166e410 100644 --- a/test/workout/workout_form_test.dart +++ b/test/workout/workout_form_test.dart @@ -44,7 +44,8 @@ void main() { setUp(() { mockWorkoutPlans = MockWorkoutPlansProvider(); - when(mockWorkoutPlans.editWorkout(any)).thenAnswer((_) => Future.value(existingPlan)); + when(mockWorkoutPlans.editWorkout(any)) + .thenAnswer((_) => Future.value(existingPlan)); when(mockWorkoutPlans.fetchAndSetWorkoutPlanFull(any)) .thenAnswer((_) => Future.value(existingPlan)); }); @@ -69,7 +70,8 @@ void main() { ); } - testWidgets('Test the widgets on the workout form', (WidgetTester tester) async { + testWidgets('Test the widgets on the workout form', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen(existingPlan)); await tester.pumpAndSettle(); @@ -91,7 +93,8 @@ void main() { findsOneWidget, reason: 'Description of existing workout plan', ); - await tester.enterText(find.byKey(const Key('field-name')), 'New description'); + await tester.enterText( + find.byKey(const Key('field-name')), 'New description'); await tester.tap(find.byKey(const Key(SUBMIT_BUTTON_KEY_NAME))); // Correct method was called @@ -107,20 +110,24 @@ void main() { //expect(find.text(('New description')), findsOneWidget, reason: 'Workout plan detail page'); }); - testWidgets('Test creating a new workout - only name', (WidgetTester tester) async { + testWidgets('Test creating a new workout - only name', + (WidgetTester tester) async { final editWorkout = WorkoutPlan( id: 2, creationDate: newPlan.creationDate, name: 'New cool workout', ); - when(mockWorkoutPlans.addWorkout(any)).thenAnswer((_) => Future.value(editWorkout)); + when(mockWorkoutPlans.addWorkout(any)) + .thenAnswer((_) => Future.value(editWorkout)); await tester.pumpWidget(createHomeScreen(newPlan)); await tester.pumpAndSettle(); - expect(find.text(''), findsNWidgets(2), reason: 'New workout has no name or description'); - await tester.enterText(find.byKey(const Key('field-name')), editWorkout.name); + expect(find.text(''), findsNWidgets(2), + reason: 'New workout has no name or description'); + await tester.enterText( + find.byKey(const Key('field-name')), editWorkout.name); await tester.tap(find.byKey(const Key(SUBMIT_BUTTON_KEY_NAME))); verifyNever(mockWorkoutPlans.editWorkout(any)); @@ -128,20 +135,29 @@ void main() { // Detail page await tester.pumpAndSettle(); - expect(find.text('New cool workout'), findsOneWidget, reason: 'Workout plan detail page'); + expect(find.text('New cool workout'), findsOneWidget, + reason: 'Workout plan detail page'); }); - testWidgets('Test creating a new workout - name and description', (WidgetTester tester) async { + testWidgets('Test creating a new workout - name and description', + (WidgetTester tester) async { final editWorkout = WorkoutPlan( - id: 2, creationDate: newPlan.creationDate, name: 'My workout', description: 'Get yuuuge'); - when(mockWorkoutPlans.addWorkout(any)).thenAnswer((_) => Future.value(editWorkout)); + id: 2, + creationDate: newPlan.creationDate, + name: 'My workout', + description: 'Get yuuuge'); + when(mockWorkoutPlans.addWorkout(any)) + .thenAnswer((_) => Future.value(editWorkout)); await tester.pumpWidget(createHomeScreen(newPlan)); await tester.pumpAndSettle(); - expect(find.text(''), findsNWidgets(2), reason: 'New workout has no name or description'); - await tester.enterText(find.byKey(const Key('field-name')), editWorkout.name); - await tester.enterText(find.byKey(const Key('field-description')), editWorkout.description); + expect(find.text(''), findsNWidgets(2), + reason: 'New workout has no name or description'); + await tester.enterText( + find.byKey(const Key('field-name')), editWorkout.name); + await tester.enterText( + find.byKey(const Key('field-description')), editWorkout.description); await tester.tap(find.byKey(const Key(SUBMIT_BUTTON_KEY_NAME))); verifyNever(mockWorkoutPlans.editWorkout(any)); @@ -149,6 +165,7 @@ void main() { // Detail page await tester.pumpAndSettle(); - expect(find.text('My workout'), findsOneWidget, reason: 'Workout plan detail page'); + expect(find.text('My workout'), findsOneWidget, + reason: 'Workout plan detail page'); }); } diff --git a/test/workout/workout_form_test.mocks.dart b/test/workout/workout_form_test.mocks.dart index 26964b78..a61e2a92 100644 --- a/test/workout/workout_form_test.mocks.dart +++ b/test/workout/workout_form_test.mocks.dart @@ -31,7 +31,8 @@ import 'package:wger/providers/workout_plans.dart' as _i11; // ignore_for_file: camel_case_types // ignore_for_file: subtype_of_sealed_class -class _FakeWgerBaseProvider_0 extends _i1.SmartFake implements _i2.WgerBaseProvider { +class _FakeWgerBaseProvider_0 extends _i1.SmartFake + implements _i2.WgerBaseProvider { _FakeWgerBaseProvider_0( Object parent, Invocation parentInvocation, @@ -51,7 +52,8 @@ class _FakeWeightUnit_1 extends _i1.SmartFake implements _i3.WeightUnit { ); } -class _FakeRepetitionUnit_2 extends _i1.SmartFake implements _i4.RepetitionUnit { +class _FakeRepetitionUnit_2 extends _i1.SmartFake + implements _i4.RepetitionUnit { _FakeRepetitionUnit_2( Object parent, Invocation parentInvocation, @@ -101,7 +103,8 @@ class _FakeSetting_6 extends _i1.SmartFake implements _i8.Setting { ); } -class _FakeWorkoutSession_7 extends _i1.SmartFake implements _i9.WorkoutSession { +class _FakeWorkoutSession_7 extends _i1.SmartFake + implements _i9.WorkoutSession { _FakeWorkoutSession_7( Object parent, Invocation parentInvocation, @@ -124,7 +127,8 @@ class _FakeLog_8 extends _i1.SmartFake implements _i10.Log { /// A class which mocks [WorkoutPlansProvider]. /// /// See the documentation for Mockito's code generation for more information. -class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProvider { +class MockWorkoutPlansProvider extends _i1.Mock + implements _i11.WorkoutPlansProvider { MockWorkoutPlansProvider() { _i1.throwOnMissingStub(this); } @@ -261,7 +265,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProv ) as _i12.Future); @override - _i12.Future<_i5.WorkoutPlan> fetchAndSetPlanSparse(int? planId) => (super.noSuchMethod( + _i12.Future<_i5.WorkoutPlan> fetchAndSetPlanSparse(int? planId) => + (super.noSuchMethod( Invocation.method( #fetchAndSetPlanSparse, [planId], @@ -276,7 +281,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProv ) as _i12.Future<_i5.WorkoutPlan>); @override - _i12.Future<_i5.WorkoutPlan> fetchAndSetWorkoutPlanFull(int? workoutId) => (super.noSuchMethod( + _i12.Future<_i5.WorkoutPlan> fetchAndSetWorkoutPlanFull(int? workoutId) => + (super.noSuchMethod( Invocation.method( #fetchAndSetWorkoutPlanFull, [workoutId], @@ -291,7 +297,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProv ) as _i12.Future<_i5.WorkoutPlan>); @override - _i12.Future<_i5.WorkoutPlan> addWorkout(_i5.WorkoutPlan? workout) => (super.noSuchMethod( + _i12.Future<_i5.WorkoutPlan> addWorkout(_i5.WorkoutPlan? workout) => + (super.noSuchMethod( Invocation.method( #addWorkout, [workout], @@ -306,7 +313,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProv ) as _i12.Future<_i5.WorkoutPlan>); @override - _i12.Future editWorkout(_i5.WorkoutPlan? workout) => (super.noSuchMethod( + _i12.Future editWorkout(_i5.WorkoutPlan? workout) => + (super.noSuchMethod( Invocation.method( #editWorkout, [workout], @@ -338,7 +346,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProv base, ], ), - returnValue: _i12.Future>.value({}), + returnValue: + _i12.Future>.value({}), ) as _i12.Future>); @override @@ -458,7 +467,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProv ) as _i12.Future>); @override - _i12.Future fetchComputedSettings(_i7.Set? workoutSet) => (super.noSuchMethod( + _i12.Future fetchComputedSettings(_i7.Set? workoutSet) => + (super.noSuchMethod( Invocation.method( #fetchComputedSettings, [workoutSet], @@ -494,7 +504,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProv ) as _i12.Future); @override - _i12.Future<_i8.Setting> addSetting(_i8.Setting? workoutSetting) => (super.noSuchMethod( + _i12.Future<_i8.Setting> addSetting(_i8.Setting? workoutSetting) => + (super.noSuchMethod( Invocation.method( #addSetting, [workoutSetting], @@ -518,12 +529,14 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i11.WorkoutPlansProv ) as _i12.Future); @override - _i12.Future<_i9.WorkoutSession> addSession(_i9.WorkoutSession? session) => (super.noSuchMethod( + _i12.Future<_i9.WorkoutSession> addSession(_i9.WorkoutSession? session) => + (super.noSuchMethod( Invocation.method( #addSession, [session], ), - returnValue: _i12.Future<_i9.WorkoutSession>.value(_FakeWorkoutSession_7( + returnValue: + _i12.Future<_i9.WorkoutSession>.value(_FakeWorkoutSession_7( this, Invocation.method( #addSession, diff --git a/test/workout/workout_plan_model_test.dart b/test/workout/workout_plan_model_test.dart index 9ab1a588..8555a354 100644 --- a/test/workout/workout_plan_model_test.dart +++ b/test/workout/workout_plan_model_test.dart @@ -27,16 +27,19 @@ void main() { final workout = getWorkout(); expect(workout.logs.length, 3); - final logExercise1 = workout.filterLogsByExerciseBase(getTestExerciseBases()[0]); + final logExercise1 = + workout.filterLogsByExerciseBase(getTestExerciseBases()[0]); expect(logExercise1.length, 2); expect(logExercise1[0].id, 1); expect(logExercise1[1].id, 2); - final logExercise2 = workout.filterLogsByExerciseBase(getTestExerciseBases()[1]); + final logExercise2 = + workout.filterLogsByExerciseBase(getTestExerciseBases()[1]); expect(logExercise2.length, 1); expect(logExercise2[0].id, 3); - expect(workout.filterLogsByExerciseBase(getTestExerciseBases()[2]).length, 0); + expect(workout.filterLogsByExerciseBase(getTestExerciseBases()[2]).length, + 0); }); }); } diff --git a/test/workout/workout_plan_screen_test.dart b/test/workout/workout_plan_screen_test.dart index 838e7d41..baea18e1 100644 --- a/test/workout/workout_plan_screen_test.dart +++ b/test/workout/workout_plan_screen_test.dart @@ -37,7 +37,8 @@ void main() { final key = GlobalKey(); return ChangeNotifierProvider( - create: (context) => WorkoutPlansProvider(mockBaseProvider, exercisesProvider, []), + create: (context) => + WorkoutPlansProvider(mockBaseProvider, exercisesProvider, []), child: MaterialApp( locale: Locale(locale), localizationsDelegates: AppLocalizations.localizationsDelegates, @@ -59,7 +60,8 @@ void main() { ); } - testWidgets('Test the widgets on the nutritional plan screen', (WidgetTester tester) async { + testWidgets('Test the widgets on the nutritional plan screen', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen()); await tester.tap(find.byType(TextButton)); await tester.pumpAndSettle(); @@ -70,7 +72,8 @@ void main() { expect(find.byType(Dismissible), findsNWidgets(2)); }); - testWidgets('Tests the localization of times - EN', (WidgetTester tester) async { + testWidgets('Tests the localization of times - EN', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen()); await tester.tap(find.byType(TextButton)); await tester.pumpAndSettle(); @@ -79,7 +82,8 @@ void main() { expect(find.text('Thursday'), findsOneWidget); }); - testWidgets('Tests the localization of times - DE', (WidgetTester tester) async { + testWidgets('Tests the localization of times - DE', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen(locale: 'de')); await tester.tap(find.byType(TextButton)); await tester.pumpAndSettle(); diff --git a/test/workout/workout_plan_screen_test.mocks.dart b/test/workout/workout_plan_screen_test.mocks.dart index c47859e6..03f2be6f 100644 --- a/test/workout/workout_plan_screen_test.mocks.dart +++ b/test/workout/workout_plan_screen_test.mocks.dart @@ -106,7 +106,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { ); @override - Map getDefaultHeaders({dynamic includeAuth = false}) => (super.noSuchMethod( + Map getDefaultHeaders({dynamic includeAuth = false}) => + (super.noSuchMethod( Invocation.method( #getDefaultHeaders, [], @@ -152,7 +153,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { #fetch, [uri], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override @@ -177,7 +179,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { uri, ], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override @@ -193,7 +196,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { uri, ], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override diff --git a/test/workout/workout_plans_screen_test.dart b/test/workout/workout_plans_screen_test.dart index 45ee4879..8d352162 100644 --- a/test/workout/workout_plans_screen_test.dart +++ b/test/workout/workout_plans_screen_test.dart @@ -49,16 +49,20 @@ void main() { host: 'localhost', path: 'api/v2/workout/', ); - when(mockBaseProvider.makeUrl('workout', query: anyNamed('query'))).thenReturn(uri); - when(mockBaseProvider.deleteRequest(any, any)).thenAnswer((_) async => http.Response('', 204)); + when(mockBaseProvider.makeUrl('workout', query: anyNamed('query'))) + .thenReturn(uri); + when(mockBaseProvider.deleteRequest(any, any)) + .thenAnswer((_) async => http.Response('', 204)); return ChangeNotifierProvider( create: (context) => WorkoutPlansProvider( mockBaseProvider, testExercisesProvider, [ - WorkoutPlan(id: 1, creationDate: DateTime(2021, 01, 01), name: 'test 1'), - WorkoutPlan(id: 2, creationDate: DateTime(2021, 02, 12), name: 'test 2'), + WorkoutPlan( + id: 1, creationDate: DateTime(2021, 01, 01), name: 'test 1'), + WorkoutPlan( + id: 2, creationDate: DateTime(2021, 02, 12), name: 'test 2'), ], ), child: MaterialApp( @@ -73,7 +77,8 @@ void main() { ); } - testWidgets('Test the widgets on the workout plans screen', (WidgetTester tester) async { + testWidgets('Test the widgets on the workout plans screen', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen()); //debugDumpApp(); @@ -82,7 +87,8 @@ void main() { expect(find.byType(ListTile), findsNWidgets(2)); }); - testWidgets('Test deleting an item by dragging the dismissible', (WidgetTester tester) async { + testWidgets('Test deleting an item by dragging the dismissible', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen()); await tester.drag(find.byKey(const Key('1')), const Offset(-500.0, 0.0)); @@ -108,7 +114,8 @@ void main() { */ - testWidgets('Test the form on the workout plan screen', (WidgetTester tester) async { + testWidgets('Test the form on the workout plan screen', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen()); expect(find.byType(PlanForm), findsNothing); @@ -117,14 +124,16 @@ void main() { expect(find.byType(WorkoutForm), findsOneWidget); }); - testWidgets('Tests the localization of dates - EN', (WidgetTester tester) async { + testWidgets('Tests the localization of dates - EN', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen()); expect(find.text('1/1/2021'), findsOneWidget); expect(find.text('2/12/2021'), findsOneWidget); }); - testWidgets('Tests the localization of dates - DE', (WidgetTester tester) async { + testWidgets('Tests the localization of dates - DE', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen(locale: 'de')); expect(find.text('1.1.2021'), findsOneWidget); diff --git a/test/workout/workout_plans_screen_test.mocks.dart b/test/workout/workout_plans_screen_test.mocks.dart index 6b542c20..cdf74da5 100644 --- a/test/workout/workout_plans_screen_test.mocks.dart +++ b/test/workout/workout_plans_screen_test.mocks.dart @@ -106,7 +106,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { ); @override - Map getDefaultHeaders({dynamic includeAuth = false}) => (super.noSuchMethod( + Map getDefaultHeaders({dynamic includeAuth = false}) => + (super.noSuchMethod( Invocation.method( #getDefaultHeaders, [], @@ -152,7 +153,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { #fetch, [uri], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override @@ -177,7 +179,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { uri, ], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override @@ -193,7 +196,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { uri, ], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override diff --git a/test/workout/workout_provider_test.dart b/test/workout/workout_provider_test.dart index 3c242e82..70a7c6c1 100644 --- a/test/workout/workout_provider_test.dart +++ b/test/workout/workout_provider_test.dart @@ -56,7 +56,8 @@ void main() { ); // Load the entries - final provider = WorkoutPlansProvider(mockBaseProvider, exercisesProvider, []); + final provider = + WorkoutPlansProvider(mockBaseProvider, exercisesProvider, []); final plan = await provider.fetchAndSetPlanSparse(325397); final plans = provider.getPlans(); @@ -86,7 +87,8 @@ void main() { ); // Load the entries - final provider = WorkoutPlansProvider(mockBaseProvider, exercisesProvider, []); + final provider = + WorkoutPlansProvider(mockBaseProvider, exercisesProvider, []); await provider.fetchAndSetPlanSparse(325397); await provider.deleteWorkout(325397); @@ -98,13 +100,15 @@ void main() { final exercisesProvider = ExercisesProvider(mockBaseProvider); final uri = Uri.https('localhost', 'api/v2/setting-repetitionunit/'); - final tRepetitionUnits = jsonDecode(fixture('routines/repetition_units.json')); + final tRepetitionUnits = + jsonDecode(fixture('routines/repetition_units.json')); when(mockBaseProvider.makeUrl('setting-repetitionunit')).thenReturn(uri); when(mockBaseProvider.fetchPaginated(uri)) .thenAnswer((_) => Future.value(tRepetitionUnits['results'])); // Load the entries - final provider = WorkoutPlansProvider(mockBaseProvider, exercisesProvider, []); + final provider = + WorkoutPlansProvider(mockBaseProvider, exercisesProvider, []); await provider.fetchAndSetRepetitionUnits(); final repetitionUnits = provider.repetitionUnits; @@ -118,10 +122,12 @@ void main() { when(mockBaseProvider.fetchPaginated(uri)) .thenAnswer((_) => Future.value(tWeightUnits['results'])); - final ExercisesProvider testExercisesProvider = ExercisesProvider(mockBaseProvider); + final ExercisesProvider testExercisesProvider = + ExercisesProvider(mockBaseProvider); // Load the entries - final provider = WorkoutPlansProvider(mockBaseProvider, testExercisesProvider, []); + final provider = + WorkoutPlansProvider(mockBaseProvider, testExercisesProvider, []); await provider.fetchAndSetWeightUnits(); final weightUnits = provider.weightUnits; @@ -131,14 +137,17 @@ void main() { test('Test that fetch and set both type of units', () async { final weightUri = Uri.https('localhost', 'api/v2/setting-weightunit/'); - when(mockBaseProvider.makeUrl('setting-weightunit')).thenReturn(weightUri); + when(mockBaseProvider.makeUrl('setting-weightunit')) + .thenReturn(weightUri); final tWeightUnits = jsonDecode(fixture('routines/weight_units.json')); when(mockBaseProvider.fetchPaginated(weightUri)) .thenAnswer((_) => Future.value(tWeightUnits['results'])); final repUnit = Uri.https('localhost', 'api/v2/setting-repetitionunit/'); - final tRepetitionUnits = jsonDecode(fixture('routines/repetition_units.json')); - when(mockBaseProvider.makeUrl('setting-repetitionunit')).thenReturn(repUnit); + final tRepetitionUnits = + jsonDecode(fixture('routines/repetition_units.json')); + when(mockBaseProvider.makeUrl('setting-repetitionunit')) + .thenReturn(repUnit); when(mockBaseProvider.fetchPaginated(repUnit)) .thenAnswer((_) => Future.value(tRepetitionUnits['results'])); @@ -148,14 +157,16 @@ void main() { final prefs = await SharedPreferences.getInstance(); // Load the entries - final provider = WorkoutPlansProvider(mockBaseProvider, exercisesProvider, []); + final provider = + WorkoutPlansProvider(mockBaseProvider, exercisesProvider, []); await provider.fetchAndSetUnits(); final prefsJson = jsonDecode(prefs.getString('workoutUnits')!); expect(prefsJson['repetitionUnits'].length, 7); expect(prefsJson['weightUnit'].length, 6); expect(true, DateTime.parse(prefsJson['date']).isBefore(DateTime.now())); - expect(true, DateTime.parse(prefsJson['expiresIn']).isAfter(DateTime.now())); + expect( + true, DateTime.parse(prefsJson['expiresIn']).isAfter(DateTime.now())); }); }); } diff --git a/test/workout/workout_provider_test.mocks.dart b/test/workout/workout_provider_test.mocks.dart index 8ab1d85b..a89a913f 100644 --- a/test/workout/workout_provider_test.mocks.dart +++ b/test/workout/workout_provider_test.mocks.dart @@ -106,7 +106,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { ); @override - Map getDefaultHeaders({dynamic includeAuth = false}) => (super.noSuchMethod( + Map getDefaultHeaders({dynamic includeAuth = false}) => + (super.noSuchMethod( Invocation.method( #getDefaultHeaders, [], @@ -152,7 +153,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { #fetch, [uri], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override @@ -177,7 +179,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { uri, ], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override @@ -193,7 +196,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { uri, ], ), - returnValue: _i5.Future>.value({}), + returnValue: + _i5.Future>.value({}), ) as _i5.Future>); @override diff --git a/test/workout/workout_set_form_test.dart b/test/workout/workout_set_form_test.dart index accc91f4..1bba82e0 100644 --- a/test/workout/workout_set_form_test.dart +++ b/test/workout/workout_set_form_test.dart @@ -69,7 +69,8 @@ void main() { ); } - testWidgets('Test the widgets on the SetFormWidget', (WidgetTester tester) async { + testWidgets('Test the widgets on the SetFormWidget', + (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen()); await tester.pumpAndSettle(); @@ -81,14 +82,18 @@ void main() { }); testWidgets('Test creating a new set', (WidgetTester tester) async { - when(mockWorkoutPlans.addSet(any)).thenAnswer((_) => Future.value(Set.empty())); - when(mockWorkoutPlans.addSetting(any)).thenAnswer((_) => Future.value(Setting.empty())); - when(mockWorkoutPlans.fetchSmartText(any, any)).thenAnswer((_) => Future.value('2 x 10')); + when(mockWorkoutPlans.addSet(any)) + .thenAnswer((_) => Future.value(Set.empty())); + when(mockWorkoutPlans.addSetting(any)) + .thenAnswer((_) => Future.value(Setting.empty())); + when(mockWorkoutPlans.fetchSmartText(any, any)) + .thenAnswer((_) => Future.value('2 x 10')); await tester.pumpWidget(createHomeScreen()); await tester.pumpAndSettle(); - await tester.enterText(find.byKey(const Key('field-typeahead')), 'exercise'); + await tester.enterText( + find.byKey(const Key('field-typeahead')), 'exercise'); await tester.pumpAndSettle(); await tester.tap(find.byKey(const Key(SUBMIT_BUTTON_KEY_NAME))); diff --git a/test/workout/workout_set_form_test.mocks.dart b/test/workout/workout_set_form_test.mocks.dart index a31bcb5a..c319ed77 100644 --- a/test/workout/workout_set_form_test.mocks.dart +++ b/test/workout/workout_set_form_test.mocks.dart @@ -38,7 +38,8 @@ import 'package:wger/providers/workout_plans.dart' as _i21; // ignore_for_file: camel_case_types // ignore_for_file: subtype_of_sealed_class -class _FakeWgerBaseProvider_0 extends _i1.SmartFake implements _i2.WgerBaseProvider { +class _FakeWgerBaseProvider_0 extends _i1.SmartFake + implements _i2.WgerBaseProvider { _FakeWgerBaseProvider_0( Object parent, Invocation parentInvocation, @@ -58,7 +59,8 @@ class _FakeExerciseBase_1 extends _i1.SmartFake implements _i3.ExerciseBase { ); } -class _FakeExerciseCategory_2 extends _i1.SmartFake implements _i4.ExerciseCategory { +class _FakeExerciseCategory_2 extends _i1.SmartFake + implements _i4.ExerciseCategory { _FakeExerciseCategory_2( Object parent, Invocation parentInvocation, @@ -148,7 +150,8 @@ class _FakeWeightUnit_10 extends _i1.SmartFake implements _i10.WeightUnit { ); } -class _FakeRepetitionUnit_11 extends _i1.SmartFake implements _i11.RepetitionUnit { +class _FakeRepetitionUnit_11 extends _i1.SmartFake + implements _i11.RepetitionUnit { _FakeRepetitionUnit_11( Object parent, Invocation parentInvocation, @@ -198,7 +201,8 @@ class _FakeSetting_15 extends _i1.SmartFake implements _i15.Setting { ); } -class _FakeWorkoutSession_16 extends _i1.SmartFake implements _i16.WorkoutSession { +class _FakeWorkoutSession_16 extends _i1.SmartFake + implements _i16.WorkoutSession { _FakeWorkoutSession_16( Object parent, Invocation parentInvocation, @@ -236,7 +240,8 @@ class MockExercisesProvider extends _i1.Mock implements _i18.ExercisesProvider { ) as _i2.WgerBaseProvider); @override - set exerciseBases(List<_i3.ExerciseBase>? exercisesBases) => super.noSuchMethod( + set exerciseBases(List<_i3.ExerciseBase>? exercisesBases) => + super.noSuchMethod( Invocation.setter( #exerciseBases, exercisesBases, @@ -251,7 +256,8 @@ class MockExercisesProvider extends _i1.Mock implements _i18.ExercisesProvider { ) as List<_i3.ExerciseBase>); @override - set filteredExerciseBases(List<_i3.ExerciseBase>? newFilteredExercises) => super.noSuchMethod( + set filteredExerciseBases(List<_i3.ExerciseBase>? newFilteredExercises) => + super.noSuchMethod( Invocation.setter( #filteredExerciseBases, newFilteredExercises, @@ -260,7 +266,8 @@ class MockExercisesProvider extends _i1.Mock implements _i18.ExercisesProvider { ); @override - Map> get exerciseBasesByVariation => (super.noSuchMethod( + Map> get exerciseBasesByVariation => + (super.noSuchMethod( Invocation.getter(#exerciseBasesByVariation), returnValue: >{}, ) as Map>); @@ -479,7 +486,8 @@ class MockExercisesProvider extends _i1.Mock implements _i18.ExercisesProvider { ) as _i19.Future); @override - _i19.Future<_i3.ExerciseBase> fetchAndSetExerciseBase(int? exerciseBaseId) => (super.noSuchMethod( + _i19.Future<_i3.ExerciseBase> fetchAndSetExerciseBase(int? exerciseBaseId) => + (super.noSuchMethod( Invocation.method( #fetchAndSetExerciseBase, [exerciseBaseId], @@ -494,7 +502,8 @@ class MockExercisesProvider extends _i1.Mock implements _i18.ExercisesProvider { ) as _i19.Future<_i3.ExerciseBase>); @override - _i3.ExerciseBase readExerciseBaseFromBaseInfo(dynamic baseData) => (super.noSuchMethod( + _i3.ExerciseBase readExerciseBaseFromBaseInfo(dynamic baseData) => + (super.noSuchMethod( Invocation.method( #readExerciseBaseFromBaseInfo, [baseData], @@ -543,7 +552,8 @@ class MockExercisesProvider extends _i1.Mock implements _i18.ExercisesProvider { #searchEnglish: searchEnglish, }, ), - returnValue: _i19.Future>.value(<_i3.ExerciseBase>[]), + returnValue: + _i19.Future>.value(<_i3.ExerciseBase>[]), ) as _i19.Future>); @override @@ -628,7 +638,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i2.WgerBaseProvider { ); @override - Map getDefaultHeaders({dynamic includeAuth = false}) => (super.noSuchMethod( + Map getDefaultHeaders({dynamic includeAuth = false}) => + (super.noSuchMethod( Invocation.method( #getDefaultHeaders, [], @@ -674,7 +685,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i2.WgerBaseProvider { #fetch, [uri], ), - returnValue: _i19.Future>.value({}), + returnValue: + _i19.Future>.value({}), ) as _i19.Future>); @override @@ -699,7 +711,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i2.WgerBaseProvider { uri, ], ), - returnValue: _i19.Future>.value({}), + returnValue: + _i19.Future>.value({}), ) as _i19.Future>); @override @@ -715,7 +728,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i2.WgerBaseProvider { uri, ], ), - returnValue: _i19.Future>.value({}), + returnValue: + _i19.Future>.value({}), ) as _i19.Future>); @override @@ -747,7 +761,8 @@ class MockWgerBaseProvider extends _i1.Mock implements _i2.WgerBaseProvider { /// A class which mocks [WorkoutPlansProvider]. /// /// See the documentation for Mockito's code generation for more information. -class MockWorkoutPlansProvider extends _i1.Mock implements _i21.WorkoutPlansProvider { +class MockWorkoutPlansProvider extends _i1.Mock + implements _i21.WorkoutPlansProvider { MockWorkoutPlansProvider() { _i1.throwOnMissingStub(this); } @@ -884,7 +899,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i21.WorkoutPlansProv ) as _i19.Future); @override - _i19.Future<_i12.WorkoutPlan> fetchAndSetPlanSparse(int? planId) => (super.noSuchMethod( + _i19.Future<_i12.WorkoutPlan> fetchAndSetPlanSparse(int? planId) => + (super.noSuchMethod( Invocation.method( #fetchAndSetPlanSparse, [planId], @@ -899,7 +915,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i21.WorkoutPlansProv ) as _i19.Future<_i12.WorkoutPlan>); @override - _i19.Future<_i12.WorkoutPlan> fetchAndSetWorkoutPlanFull(int? workoutId) => (super.noSuchMethod( + _i19.Future<_i12.WorkoutPlan> fetchAndSetWorkoutPlanFull(int? workoutId) => + (super.noSuchMethod( Invocation.method( #fetchAndSetWorkoutPlanFull, [workoutId], @@ -914,7 +931,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i21.WorkoutPlansProv ) as _i19.Future<_i12.WorkoutPlan>); @override - _i19.Future<_i12.WorkoutPlan> addWorkout(_i12.WorkoutPlan? workout) => (super.noSuchMethod( + _i19.Future<_i12.WorkoutPlan> addWorkout(_i12.WorkoutPlan? workout) => + (super.noSuchMethod( Invocation.method( #addWorkout, [workout], @@ -929,7 +947,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i21.WorkoutPlansProv ) as _i19.Future<_i12.WorkoutPlan>); @override - _i19.Future editWorkout(_i12.WorkoutPlan? workout) => (super.noSuchMethod( + _i19.Future editWorkout(_i12.WorkoutPlan? workout) => + (super.noSuchMethod( Invocation.method( #editWorkout, [workout], @@ -961,7 +980,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i21.WorkoutPlansProv base, ], ), - returnValue: _i19.Future>.value({}), + returnValue: + _i19.Future>.value({}), ) as _i19.Future>); @override @@ -1081,7 +1101,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i21.WorkoutPlansProv ) as _i19.Future>); @override - _i19.Future fetchComputedSettings(_i14.Set? workoutSet) => (super.noSuchMethod( + _i19.Future fetchComputedSettings(_i14.Set? workoutSet) => + (super.noSuchMethod( Invocation.method( #fetchComputedSettings, [workoutSet], @@ -1117,7 +1138,8 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i21.WorkoutPlansProv ) as _i19.Future); @override - _i19.Future<_i15.Setting> addSetting(_i15.Setting? workoutSetting) => (super.noSuchMethod( + _i19.Future<_i15.Setting> addSetting(_i15.Setting? workoutSetting) => + (super.noSuchMethod( Invocation.method( #addSetting, [workoutSetting], @@ -1141,12 +1163,14 @@ class MockWorkoutPlansProvider extends _i1.Mock implements _i21.WorkoutPlansProv ) as _i19.Future); @override - _i19.Future<_i16.WorkoutSession> addSession(_i16.WorkoutSession? session) => (super.noSuchMethod( + _i19.Future<_i16.WorkoutSession> addSession(_i16.WorkoutSession? session) => + (super.noSuchMethod( Invocation.method( #addSession, [session], ), - returnValue: _i19.Future<_i16.WorkoutSession>.value(_FakeWorkoutSession_16( + returnValue: + _i19.Future<_i16.WorkoutSession>.value(_FakeWorkoutSession_16( this, Invocation.method( #addSession, diff --git a/test_data/body_weight.dart b/test_data/body_weight.dart index 8cec705c..e035125f 100644 --- a/test_data/body_weight.dart +++ b/test_data/body_weight.dart @@ -18,8 +18,10 @@ import 'package:wger/models/body_weight/weight_entry.dart'; -final weightEntry1 = WeightEntry(id: 1, weight: 80, date: DateTime(2021, 01, 01)); -final weightEntry2 = WeightEntry(id: 2, weight: 81, date: DateTime(2021, 01, 10)); +final weightEntry1 = + WeightEntry(id: 1, weight: 80, date: DateTime(2021, 01, 01)); +final weightEntry2 = + WeightEntry(id: 2, weight: 81, date: DateTime(2021, 01, 10)); List getWeightEntries() { return [weightEntry1, weightEntry2]; diff --git a/test_data/exercises.dart b/test_data/exercises.dart index 41d2d282..b2d02d4d 100644 --- a/test_data/exercises.dart +++ b/test_data/exercises.dart @@ -28,9 +28,12 @@ const tLanguage2 = Language(id: 2, shortName: 'en', fullName: 'English'); const tLanguage3 = Language(id: 3, shortName: 'fr', fullName: 'Français'); const testLanguages = [tLanguage1, tLanguage2, tLanguage3]; -const tMuscle1 = Muscle(id: 1, name: 'Flutterus maximus', nameEn: 'Glutes', isFront: true); -const tMuscle2 = Muscle(id: 2, name: 'Biceps brachii', nameEn: 'Biceps', isFront: true); -const tMuscle3 = Muscle(id: 3, name: 'Gluteus maximus', nameEn: 'Glutes', isFront: false); +const tMuscle1 = + Muscle(id: 1, name: 'Flutterus maximus', nameEn: 'Glutes', isFront: true); +const tMuscle2 = + Muscle(id: 2, name: 'Biceps brachii', nameEn: 'Biceps', isFront: true); +const tMuscle3 = + Muscle(id: 3, name: 'Gluteus maximus', nameEn: 'Glutes', isFront: false); const testMuscles = [tMuscle1, tMuscle2, tMuscle3]; const tCategory1 = ExerciseCategory(id: 1, name: 'Arms'); @@ -38,7 +41,13 @@ const tCategory2 = ExerciseCategory(id: 2, name: 'Legs'); const tCategory3 = ExerciseCategory(id: 3, name: 'Abs'); const tCategory4 = ExerciseCategory(id: 4, name: 'Shoulders'); const tCategory5 = ExerciseCategory(id: 5, name: 'Calves'); -const testCategories = [tCategory1, tCategory2, tCategory3, tCategory4, tCategory5]; +const testCategories = [ + tCategory1, + tCategory2, + tCategory3, + tCategory4, + tCategory5 +]; const tEquipment1 = Equipment(id: 1, name: 'Bench'); const tEquipment2 = Equipment(id: 1, name: 'Dumbbell'); @@ -143,7 +152,8 @@ final crunchesFr = Translation( uuid: 'd83f572d-add5-48dc-89cf-75f6770284f1', created: DateTime(2021, 4, 1), name: 'Crunches', - description: 'The man in black fled across the desert, and the gunslinger followed', + description: + 'The man in black fled across the desert, and the gunslinger followed', baseId: deadLift.id, language: tLanguage3, ); @@ -173,7 +183,8 @@ final curlsEn = Translation( uuid: '259a637e-957f-4fe1-b61b-f56e3793ebcd', created: DateTime(2021, 4, 1), name: 'Curls', - description: 'It was a bright cold day in April, and the clocks were striking thirteen', + description: + 'It was a bright cold day in April, and the clocks were striking thirteen', baseId: curls.id, language: tLanguage2, ); @@ -183,7 +194,8 @@ final squatsEn = Translation( uuid: '259a637e-957f-4fe1-b61b-f56e3793ebcd', created: DateTime(2021, 4, 1), name: 'Squats', - description: 'It was a bright cold day in April, and the clocks were striking thirteen', + description: + 'It was a bright cold day in April, and the clocks were striking thirteen', baseId: curls.id, language: tLanguage2, ); @@ -193,7 +205,8 @@ final sideRaisesEn = Translation( uuid: '6bf89ad0-5a43-4e98-91d3-a8c6886c9712', created: DateTime(2022, 11, 1), name: 'Side raises', - description: 'It was a bright cold day in April, and the clocks were striking thirteen', + description: + 'It was a bright cold day in April, and the clocks were striking thirteen', baseId: curls.id, language: tLanguage2, ); diff --git a/test_data/measurements.dart b/test_data/measurements.dart index 87c524eb..0e8c70b5 100644 --- a/test_data/measurements.dart +++ b/test_data/measurements.dart @@ -19,16 +19,23 @@ import 'package:wger/models/measurements/measurement_category.dart'; import 'package:wger/models/measurements/measurement_entry.dart'; -final e1 = MeasurementEntry(id: 1, category: 1, date: DateTime(2022, 9, 10), value: 30, notes: ''); -final e2 = MeasurementEntry(id: 2, category: 1, date: DateTime(2022, 10, 5), value: 25, notes: ''); -final e3 = MeasurementEntry(id: 3, category: 1, date: DateTime(2022, 10, 10), value: 17, notes: ''); -final e4 = MeasurementEntry(id: 4, category: 1, date: DateTime(2022, 11, 1), value: 17, notes: ''); -final e5 = MeasurementEntry(id: 5, category: 1, date: DateTime(2022, 11, 10), value: 20, notes: ''); -final e6 = MeasurementEntry(id: 6, category: 1, date: DateTime(2022, 11, 15), value: 23, notes: ''); +final e1 = MeasurementEntry( + id: 1, category: 1, date: DateTime(2022, 9, 10), value: 30, notes: ''); +final e2 = MeasurementEntry( + id: 2, category: 1, date: DateTime(2022, 10, 5), value: 25, notes: ''); +final e3 = MeasurementEntry( + id: 3, category: 1, date: DateTime(2022, 10, 10), value: 17, notes: ''); +final e4 = MeasurementEntry( + id: 4, category: 1, date: DateTime(2022, 11, 1), value: 17, notes: ''); +final e5 = MeasurementEntry( + id: 5, category: 1, date: DateTime(2022, 11, 10), value: 20, notes: ''); +final e6 = MeasurementEntry( + id: 6, category: 1, date: DateTime(2022, 11, 15), value: 23, notes: ''); List getMeasurementCategories() { final entries = [e1, e2, e3, e4, e5, e6]; - final category = MeasurementCategory(id: 1, name: 'Body fat', unit: '%', entries: entries); + final category = + MeasurementCategory(id: 1, name: 'Body fat', unit: '%', entries: entries); return [category]; } diff --git a/test_data/workouts.dart b/test_data/workouts.dart index 229e3a47..711ac293 100644 --- a/test_data/workouts.dart +++ b/test_data/workouts.dart @@ -29,7 +29,8 @@ import './exercises.dart'; const weightUnit1 = WeightUnit(id: 1, name: 'kg'); const weightUnit2 = WeightUnit(id: 2, name: 'metric tonnes'); -const RepetitionUnit repetitionUnit1 = RepetitionUnit(id: 1, name: 'Repetitions'); +const RepetitionUnit repetitionUnit1 = + RepetitionUnit(id: 1, name: 'Repetitions'); const RepetitionUnit repetitionUnit2 = RepetitionUnit(id: 2, name: 'Hours'); WorkoutPlan getWorkout() { diff --git a/test_driver/screenshot_driver.dart b/test_driver/screenshot_driver.dart index f98d10c7..4142231c 100644 --- a/test_driver/screenshot_driver.dart +++ b/test_driver/screenshot_driver.dart @@ -6,7 +6,8 @@ import 'package:integration_test/integration_test_driver_extended.dart'; Future main() async { try { await integrationDriver( - onScreenshot: (String screenshotName, List screenshotBytes, [_]) async { + onScreenshot: (String screenshotName, List screenshotBytes, + [_]) async { final File image = await File(screenshotName).create(recursive: true); image.writeAsBytesSync(screenshotBytes); return true;