diff --git a/AUTHORS.md b/AUTHORS.md index 46901134..4c2d018f 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -2,6 +2,7 @@ ## Developers +- Jigar Prajapati - - Roland Geider – - Dylan Aird - - Jannik Norden - @@ -20,6 +21,7 @@ - Sandi Milohanic - - Miroslav Mazel - - artchiee - +- Tejas Bir Singh - ## Translators diff --git a/flatpak/flatpak_meta.json b/flatpak/flatpak_meta.json index be92a836..5d408ead 100644 --- a/flatpak/flatpak_meta.json +++ b/flatpak/flatpak_meta.json @@ -23,6 +23,7 @@ "--share=network", "--socket=fallback-x11", "--socket=wayland", + "--socket=pulseaudio", "--device=dri" ] } \ No newline at end of file diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist index f2872cf4..4f8d4d24 100644 --- a/ios/Flutter/AppFrameworkInfo.plist +++ b/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 9.0 + 11.0 diff --git a/ios/Podfile b/ios/Podfile index 1e8c3c90..2c068c40 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '9.0' +platform :ios, '12.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/ios/Podfile.lock b/ios/Podfile.lock index b013bfe1..8169503c 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,70 +1,71 @@ PODS: - - camera (0.0.1): - - Flutter - Flutter (1.0.0) + - flutter_barcode_scanner (2.0.0): + - Flutter - flutter_keyboard_visibility (0.0.1): - Flutter - - image_picker (0.0.1): + - image_picker_ios (0.0.1): - Flutter - - package_info (0.0.1): + - integration_test (0.0.1): - Flutter - - shared_preferences_ios (0.0.1): + - package_info_plus (0.4.5): - Flutter + - rive_common (0.0.1): + - Flutter + - shared_preferences_foundation (0.0.1): + - Flutter + - FlutterMacOS - url_launcher_ios (0.0.1): - Flutter - - video_player (0.0.1): - - Flutter - - wakelock (0.0.1): - - Flutter - - webview_flutter_wkwebview (0.0.1): + - video_player_avfoundation (0.0.1): - Flutter DEPENDENCIES: - - camera (from `.symlinks/plugins/camera/ios`) - Flutter (from `Flutter`) + - flutter_barcode_scanner (from `.symlinks/plugins/flutter_barcode_scanner/ios`) - flutter_keyboard_visibility (from `.symlinks/plugins/flutter_keyboard_visibility/ios`) - - image_picker (from `.symlinks/plugins/image_picker/ios`) - - package_info (from `.symlinks/plugins/package_info/ios`) - - shared_preferences_ios (from `.symlinks/plugins/shared_preferences_ios/ios`) + - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) + - integration_test (from `.symlinks/plugins/integration_test/ios`) + - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) + - rive_common (from `.symlinks/plugins/rive_common/ios`) + - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/ios`) - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) - - video_player (from `.symlinks/plugins/video_player/ios`) - - wakelock (from `.symlinks/plugins/wakelock/ios`) - - webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`) + - video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/ios`) EXTERNAL SOURCES: - camera: - :path: ".symlinks/plugins/camera/ios" Flutter: :path: Flutter + flutter_barcode_scanner: + :path: ".symlinks/plugins/flutter_barcode_scanner/ios" flutter_keyboard_visibility: :path: ".symlinks/plugins/flutter_keyboard_visibility/ios" - image_picker: - :path: ".symlinks/plugins/image_picker/ios" - package_info: - :path: ".symlinks/plugins/package_info/ios" - shared_preferences_ios: - :path: ".symlinks/plugins/shared_preferences_ios/ios" + image_picker_ios: + :path: ".symlinks/plugins/image_picker_ios/ios" + integration_test: + :path: ".symlinks/plugins/integration_test/ios" + package_info_plus: + :path: ".symlinks/plugins/package_info_plus/ios" + rive_common: + :path: ".symlinks/plugins/rive_common/ios" + shared_preferences_foundation: + :path: ".symlinks/plugins/shared_preferences_foundation/ios" url_launcher_ios: :path: ".symlinks/plugins/url_launcher_ios/ios" - video_player: - :path: ".symlinks/plugins/video_player/ios" - wakelock: - :path: ".symlinks/plugins/wakelock/ios" - webview_flutter_wkwebview: - :path: ".symlinks/plugins/webview_flutter_wkwebview/ios" + video_player_avfoundation: + :path: ".symlinks/plugins/video_player_avfoundation/ios" SPEC CHECKSUMS: - camera: fe33292aff715a981eb34d7ce7b35b54337ff34c - Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a + Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 + flutter_barcode_scanner: 7a1144744c28dc0c57a8de7218ffe5ec59a9e4bf flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069 - image_picker: 9aa50e1d8cdacdbed739e925b7eea16d014367e6 - package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62 - shared_preferences_ios: aef470a42dc4675a1cdd50e3158b42e3d1232b32 - url_launcher_ios: 02f1989d4e14e998335b02b67a7590fa34f971af - video_player: ecd305f42e9044793efd34846e1ce64c31ea6fcb - wakelock: d0fc7c864128eac40eba1617cb5264d9c940b46f - webview_flutter_wkwebview: 005fbd90c888a42c5690919a1527ecc6649e1162 + image_picker_ios: 4a8aadfbb6dc30ad5141a2ce3832af9214a705b5 + integration_test: a1e7d09bd98eca2fc37aefd79d4f41ad37bdbbe5 + package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e + rive_common: 60ae7896ab40f9513974f36f015de33f70d2c5c5 + shared_preferences_foundation: 986fc17f3d3251412d18b0265f9c64113a8c2472 + url_launcher_ios: 08a3dfac5fb39e8759aeb0abbd5d9480f30fc8b4 + video_player_avfoundation: 81e49bb3d9fb63dccf9fa0f6d877dc3ddbeac126 -PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c +PODFILE CHECKSUM: 4e8f8b2be68aeea4c0d5beb6ff1e79fface1d048 -COCOAPODS: 1.11.2 +COCOAPODS: 1.12.0 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index d44478a3..7bccdc01 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -199,6 +199,7 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -252,6 +253,7 @@ }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -339,7 +341,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -425,7 +427,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -474,7 +476,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index b8ebd6ec..9aa740a2 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -43,5 +43,7 @@ CADisableMinimumFrameDurationOnPhone + UIApplicationSupportsIndirectInputEvents + diff --git a/l10n.yaml b/l10n.yaml index b1cc1414..3c41bfca 100644 --- a/l10n.yaml +++ b/l10n.yaml @@ -2,3 +2,4 @@ arb-dir: lib/l10n template-arb-file: app_en.arb output-localization-file: app_localizations.dart nullable-getter: false +preferred-supported-locales: [ en ] \ No newline at end of file diff --git a/lib/helpers/consts.dart b/lib/helpers/consts.dart index 4dcfb723..84f148b3 100644 --- a/lib/helpers/consts.dart +++ b/lib/helpers/consts.dart @@ -36,8 +36,12 @@ const DEFAULT_WEIGHT_UNIT = 1; /// Default impression for a workout session (neutral) const DEFAULT_IMPRESSION = 2; -/// Default weight unit is "repetition" -const DEFAULT_REPETITION_UNIT = 1; +// Weight and repetition units for the workout logs +const REP_UNIT_REPETITIONS = 1; +const REP_UNIT_TILL_FAILURE = 2; + +const WEIGHT_UNIT_KG = 1; +const WEIGHT_UNIT_LB = 2; /// Time to locally cache values such as ingredients, etc const DAYS_TO_CACHE = 20; diff --git a/lib/helpers/i18n.dart b/lib/helpers/i18n.dart index 9820f740..fc19f5e9 100644 --- a/lib/helpers/i18n.dart +++ b/lib/helpers/i18n.dart @@ -28,6 +28,9 @@ String getTranslation(String value, BuildContext context) { case 'Biceps': return AppLocalizations.of(context).biceps; + case 'Body Weight': + return AppLocalizations.of(context).body_weight; + case 'Calves': return AppLocalizations.of(context).calves; @@ -58,21 +61,30 @@ String getTranslation(String value, BuildContext context) { case 'Kilometers': return AppLocalizations.of(context).kilometers; + case 'Kilometers Per Hour': + return AppLocalizations.of(context).kilometers_per_hour; + case 'Lats': return AppLocalizations.of(context).lats; case 'Legs': return AppLocalizations.of(context).legs; - case 'Lower back': - return AppLocalizations.of(context).lower_back; + case 'Max Reps': + return AppLocalizations.of(context).max_reps; case 'Miles': return AppLocalizations.of(context).miles; + case 'Miles Per Hour': + return AppLocalizations.of(context).miles_per_hour; + case 'Minutes': return AppLocalizations.of(context).minutes; + case 'Plates': + return AppLocalizations.of(context).plates; + case 'Pull-up bar': return AppLocalizations.of(context).pull_up_bar; @@ -100,6 +112,12 @@ String getTranslation(String value, BuildContext context) { case 'Until Failure': return AppLocalizations.of(context).until_failure; + case 'kg': + return AppLocalizations.of(context).kg; + + case 'lb': + return AppLocalizations.of(context).lb; + case 'none (bodyweight exercise)': return AppLocalizations.of(context).none__bodyweight_exercise_; diff --git a/lib/helpers/misc.dart b/lib/helpers/misc.dart index 805ec1ed..26c34cc2 100644 --- a/lib/helpers/misc.dart +++ b/lib/helpers/misc.dart @@ -42,7 +42,7 @@ 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 != DEFAULT_REPETITION_UNIT || weight == 0 || weight == null) { + if (repetitionUnitObj.id != REP_UNIT_REPETITIONS || weight == 0 || weight == null) { out.add(repetitionUnitObj.name); } } diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index f0fd2187..a5cc6fbf 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -241,6 +241,8 @@ }, "save": "Save", "@save": {}, + "verify": "Verify", + "@verify": {}, "addSet": "Add set", "@addSet": { "description": "Label for the button that adds a set (to a workout day)" @@ -635,37 +637,154 @@ } }, "cacheWarning": "Due to caching it might take some time till the changes are visible throughout the application.", - "abs": "Abs", - "arms": "Arms", - "back": "Back", - "barbell": "Barbell", - "bench": "Bench", - "biceps": "Biceps", - "calves": "Calves", - "cardio": "Cardio", - "chest": "Chest", - "dumbbell": "Dumbbell", - "glutes": "Glutes", - "gym_mat": "Gym mat", - "hamstrings": "Hamstrings", - "incline_bench": "Incline bench", - "kettlebell": "Kettlebell", - "kilometers": "Kilometers", - "lats": "Lats", - "legs": "Legs", - "lower_back": "Lower back", - "miles": "Miles", - "minutes": "Minutes", - "pull_up_bar": "Pull-up bar", - "quads": "Quads", - "repetitions": "Repetitions", - "sz_bar": "SZ-Bar", - "seconds": "Seconds", - "shoulders": "Shoulders", - "swiss_ball": "Swiss Ball", - "triceps": "Triceps", - "until_failure": "Until Failure", - "none__bodyweight_exercise_": "none (bodyweight exercise)", "textPromptTitle": "Ready to start?", - "textPromptSubheading": "Press the action button to begin" + "textPromptSubheading": "Press the action button to begin", + "abs": "Abs", + "@abs": { + "description": "Generated entry for translation for server strings" + }, + "arms": "Arms", + "@arms": { + "description": "Generated entry for translation for server strings" + }, + "back": "Back", + "@back": { + "description": "Generated entry for translation for server strings" + }, + "barbell": "Barbell", + "@barbell": { + "description": "Generated entry for translation for server strings" + }, + "bench": "Bench", + "@bench": { + "description": "Generated entry for translation for server strings" + }, + "biceps": "Biceps", + "@biceps": { + "description": "Generated entry for translation for server strings" + }, + "body_weight": "Body Weight", + "@body_weight": { + "description": "Generated entry for translation for server strings" + }, + "calves": "Calves", + "@calves": { + "description": "Generated entry for translation for server strings" + }, + "cardio": "Cardio", + "@cardio": { + "description": "Generated entry for translation for server strings" + }, + "chest": "Chest", + "@chest": { + "description": "Generated entry for translation for server strings" + }, + "dumbbell": "Dumbbell", + "@dumbbell": { + "description": "Generated entry for translation for server strings" + }, + "glutes": "Glutes", + "@glutes": { + "description": "Generated entry for translation for server strings" + }, + "gym_mat": "Gym mat", + "@gym_mat": { + "description": "Generated entry for translation for server strings" + }, + "hamstrings": "Hamstrings", + "@hamstrings": { + "description": "Generated entry for translation for server strings" + }, + "incline_bench": "Incline bench", + "@incline_bench": { + "description": "Generated entry for translation for server strings" + }, + "kettlebell": "Kettlebell", + "@kettlebell": { + "description": "Generated entry for translation for server strings" + }, + "kilometers": "Kilometers", + "@kilometers": { + "description": "Generated entry for translation for server strings" + }, + "kilometers_per_hour": "Kilometers Per Hour", + "@kilometers_per_hour": { + "description": "Generated entry for translation for server strings" + }, + "lats": "Lats", + "@lats": { + "description": "Generated entry for translation for server strings" + }, + "legs": "Legs", + "@legs": { + "description": "Generated entry for translation for server strings" + }, + "max_reps": "Max Reps", + "@max_reps": { + "description": "Generated entry for translation for server strings" + }, + "miles": "Miles", + "@miles": { + "description": "Generated entry for translation for server strings" + }, + "miles_per_hour": "Miles Per Hour", + "@miles_per_hour": { + "description": "Generated entry for translation for server strings" + }, + "minutes": "Minutes", + "@minutes": { + "description": "Generated entry for translation for server strings" + }, + "plates": "Plates", + "@plates": { + "description": "Generated entry for translation for server strings" + }, + "pull_up_bar": "Pull-up bar", + "@pull_up_bar": { + "description": "Generated entry for translation for server strings" + }, + "quads": "Quads", + "@quads": { + "description": "Generated entry for translation for server strings" + }, + "repetitions": "Repetitions", + "@repetitions": { + "description": "Generated entry for translation for server strings" + }, + "sz_bar": "SZ-Bar", + "@sz_bar": { + "description": "Generated entry for translation for server strings" + }, + "seconds": "Seconds", + "@seconds": { + "description": "Generated entry for translation for server strings" + }, + "shoulders": "Shoulders", + "@shoulders": { + "description": "Generated entry for translation for server strings" + }, + "swiss_ball": "Swiss Ball", + "@swiss_ball": { + "description": "Generated entry for translation for server strings" + }, + "triceps": "Triceps", + "@triceps": { + "description": "Generated entry for translation for server strings" + }, + "until_failure": "Until Failure", + "@until_failure": { + "description": "Generated entry for translation for server strings" + }, + "kg": "kg", + "@kg": { + "description": "Generated entry for translation for server strings" + }, + "lb": "lb", + "@lb": { + "description": "Generated entry for translation for server strings" + }, + "none__bodyweight_exercise_": "none (bodyweight exercise)", + "@none__bodyweight_exercise_": { + "description": "Generated entry for translation for server strings" + } } diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index 431aa286..18e53ead 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -725,5 +725,35 @@ "seconds": "Secondes", "@seconds": {}, "until_failure": "Jusqu'à l'échec", - "@until_failure": {} + "@until_failure": {}, + "textPromptTitle": "Prêt à commencer ?", + "@textPromptTitle": {}, + "textPromptSubheading": "Cliquez sur le bouton pour commencer", + "@textPromptSubheading": {}, + "body_weight": "Poids corporel", + "@body_weight": { + "description": "Generated entry for translation for server strings" + }, + "kilometers_per_hour": "Kilomètres Par Heure", + "@kilometers_per_hour": { + "description": "Generated entry for translation for server strings" + }, + "miles_per_hour": "Miles Par Heure", + "@miles_per_hour": { + "description": "Generated entry for translation for server strings" + }, + "plates": "Disques de poids", + "@plates": { + "description": "Generated entry for translation for server strings" + }, + "kg": "kg", + "@kg": { + "description": "Generated entry for translation for server strings" + }, + "lb": "lb", + "@lb": { + "description": "Generated entry for translation for server strings" + }, + "searchNamesInEnglish": "Chercher également en termes anglais", + "@searchNamesInEnglish": {} } diff --git a/lib/l10n/app_hr.arb b/lib/l10n/app_hr.arb index 32bfd599..a359d639 100644 --- a/lib/l10n/app_hr.arb +++ b/lib/l10n/app_hr.arb @@ -47,13 +47,13 @@ "@customServerUrl": { "description": "Label in the form where the users can enter their own wger instance" }, - "customServerHint": "Upiši adresu vlastitog poslužitelja, inače će se koristiti zadana", + "customServerHint": "Upiši adresu tvog poslužitelja, inače će se koristiti zadani", "@customServerHint": { "description": "Hint text for the form where the users can enter their own wger instance" }, - "registerInstead": "Umjesto toga se registriraj", + "registerInstead": "Nemaš račun? Registriraj se", "@registerInstead": {}, - "loginInstead": "Umjesto toga se prijavi", + "loginInstead": "Već imaš račun? Prijavi se", "@loginInstead": {}, "labelWorkoutPlans": "Planovi treninga", "@labelWorkoutPlans": { @@ -221,7 +221,7 @@ "@selectExercise": { "description": "Error message when the user hasn't selected an exercise in the form" }, - "enterCharacters": "Upiši znakove između {min} i {max}", + "enterCharacters": "Upiši {min} do {max} znakova", "@enterCharacters": { "description": "Error message when the user hasn't entered the correct number of characters in a form", "type": "text", @@ -556,5 +556,250 @@ "close": "Zatvori", "@close": { "description": "Translation for close" + }, + "enterMinCharacters": "Upiši barem {min} znakova", + "@enterMinCharacters": { + "description": "Error message when the user hasn't entered the minimum amount characters in a form", + "type": "text", + "placeholders": { + "min": {} + } + }, + "add_exercise_image_license": "Slike moraju biti kompatibilne s licencom CC BY SA. Ako si u nedoumici, prenesi samo svoje vlastite fotografije.", + "@add_exercise_image_license": {}, + "whatVariationsExist": "Koje varijante ove vježbe postoje?", + "@whatVariationsExist": {}, + "images": "Slike", + "@images": {}, + "alternativeNames": "Alternativna imena", + "@alternativeNames": {}, + "previous": "Prethodno", + "@previous": {}, + "oneNamePerLine": "Jedno ime po retku", + "@oneNamePerLine": {}, + "translation": "Prijevod", + "@translation": {}, + "addExercise": "Dodaj vježbu", + "@addExercise": {}, + "translateExercise": "Prevedi ovu vježbu", + "@translateExercise": {}, + "baseData": "Osnovni podaci na engleskom jeziku", + "@baseData": { + "description": "The base data for an exercise such as category, trained muscles, etc." + }, + "arms": "Ruke", + "@arms": { + "description": "Generated entry for translation for server strings" + }, + "back": "Leđa", + "@back": { + "description": "Generated entry for translation for server strings" + }, + "chest": "Prsa", + "@chest": { + "description": "Generated entry for translation for server strings" + }, + "sz_bar": "SZ šipka", + "@sz_bar": { + "description": "Generated entry for translation for server strings" + }, + "userProfile": "Tvoj profil", + "@userProfile": {}, + "exerciseList": "Popis vježbi", + "@exerciseList": {}, + "exercises": "Vježbe", + "@exercises": { + "description": "Multiple exercises for a workout" + }, + "exerciseName": "Ime vježbe", + "@exerciseName": { + "description": "Label for the name of a workout exercise" + }, + "selectEntry": "Odaberi unos", + "@selectEntry": {}, + "success": "Uspjeh", + "@success": { + "description": "Message when an action completed successfully, usually used as a heading" + }, + "noMeasurementEntries": "Nemaš unose mjerenja", + "@noMeasurementEntries": {}, + "moreMeasurementEntries": "Dodaj novo mjerenje", + "@moreMeasurementEntries": { + "description": "Message shown when the user wants to add new measurement" + }, + "variations": "Varijante", + "@variations": { + "description": "Variations of one exercise (e.g. benchpress and benchpress narrow)" + }, + "alsoKnownAs": "Poznato i kao: {aliases}", + "@alsoKnownAs": { + "placeholders": { + "aliases": {} + }, + "description": "List of alternative names for an exercise" + }, + "verifiedEmail": "Potvrđena e-mail adresa", + "@verifiedEmail": {}, + "unVerifiedEmail": "Nepotvrđena e-mail adresa", + "@unVerifiedEmail": {}, + "verifiedEmailInfo": "E-mail poruka za potvrdu je poslana na {email}", + "@verifiedEmailInfo": { + "placeholders": { + "email": {} + } + }, + "contributeExerciseWarning": "Vježbe možeš dodati samo ako je tvoj račun stariji od {days} dana i ako si potvrdio/la tvoju e-mail adresu", + "@contributeExerciseWarning": { + "description": "Number of days before which a person can add exercise", + "placeholders": { + "days": { + "type": "String", + "example": "14" + } + } + }, + "cacheWarning": "Zbog predmemoriranja, vidljivost promjena u aplikaciji može nešto potrajati.", + "@cacheWarning": {}, + "verifiedEmailReason": "Za dodavanje vježbi moraš potvrditi tvoju e-mail adresu", + "@verifiedEmailReason": {}, + "cardio": "Kardio", + "@cardio": { + "description": "Generated entry for translation for server strings" + }, + "quads": "Ekstenzije nogu", + "@quads": { + "description": "Generated entry for translation for server strings" + }, + "pull_up_bar": "Šipka za povlačenje", + "@pull_up_bar": { + "description": "Generated entry for translation for server strings" + }, + "shoulders": "Ramena", + "@shoulders": { + "description": "Generated entry for translation for server strings" + }, + "triceps": "Triceps", + "@triceps": { + "description": "Generated entry for translation for server strings" + }, + "swiss_ball": "Lopta za fitness", + "@swiss_ball": { + "description": "Generated entry for translation for server strings" + }, + "until_failure": "Do neuspjeha", + "@until_failure": { + "description": "Generated entry for translation for server strings" + }, + "none__bodyweight_exercise_": "ništa (vježba za tjelesnu težinu)", + "@none__bodyweight_exercise_": { + "description": "Generated entry for translation for server strings" + }, + "seconds": "Sekunde", + "@seconds": { + "description": "Generated entry for translation for server strings" + }, + "textPromptTitle": "Spreman?", + "@textPromptTitle": {}, + "barbell": "Utezi", + "@barbell": { + "description": "Generated entry for translation for server strings" + }, + "calves": "Lisni mišići", + "@calves": { + "description": "Generated entry for translation for server strings" + }, + "textPromptSubheading": "Počni pritiskom gumba radnje", + "@textPromptSubheading": {}, + "body_weight": "Tjelesna težina", + "@body_weight": { + "description": "Generated entry for translation for server strings" + }, + "kilometers": "Kilometri", + "@kilometers": { + "description": "Generated entry for translation for server strings" + }, + "kilometers_per_hour": "Kilometara na sat", + "@kilometers_per_hour": { + "description": "Generated entry for translation for server strings" + }, + "lats": "Leđni mišići", + "@lats": { + "description": "Generated entry for translation for server strings" + }, + "miles_per_hour": "Milja na sat", + "@miles_per_hour": { + "description": "Generated entry for translation for server strings" + }, + "minutes": "Minute", + "@minutes": { + "description": "Generated entry for translation for server strings" + }, + "plates": "Ploče", + "@plates": { + "description": "Generated entry for translation for server strings" + }, + "kg": "kg", + "@kg": { + "description": "Generated entry for translation for server strings" + }, + "lb": "lb", + "@lb": { + "description": "Generated entry for translation for server strings" + }, + "searchNamesInEnglish": "Također traži imena na engleskom jeziku", + "@searchNamesInEnglish": {}, + "language": "Jezik", + "@language": {}, + "aboutPageTitle": "Wger informacije", + "@aboutPageTitle": {}, + "abs": "Trbuh", + "@abs": { + "description": "Generated entry for translation for server strings" + }, + "gym_mat": "Podloga za treniranje", + "@gym_mat": { + "description": "Generated entry for translation for server strings" + }, + "incline_bench": "Nagnuta klupa", + "@incline_bench": { + "description": "Generated entry for translation for server strings" + }, + "baseNameEnglish": "Sve vježbe trebaju osnovno ime na engleskom jeziku", + "@baseNameEnglish": {}, + "next": "Sljedeće", + "@next": {}, + "contributeExercise": "Dodaj vježbu", + "@contributeExercise": {}, + "bench": "Klupa", + "@bench": { + "description": "Generated entry for translation for server strings" + }, + "dumbbell": "Ručni uteg", + "@dumbbell": { + "description": "Generated entry for translation for server strings" + }, + "biceps": "Bicepsi", + "@biceps": { + "description": "Generated entry for translation for server strings" + }, + "glutes": "Stražnjica", + "@glutes": { + "description": "Generated entry for translation for server strings" + }, + "hamstrings": "Tetive koljena", + "@hamstrings": { + "description": "Generated entry for translation for server strings" + }, + "kettlebell": "Kuglasti uteg", + "@kettlebell": { + "description": "Generated entry for translation for server strings" + }, + "legs": "Noge", + "@legs": { + "description": "Generated entry for translation for server strings" + }, + "miles": "Milje", + "@miles": { + "description": "Generated entry for translation for server strings" } } diff --git a/lib/l10n/app_it.arb b/lib/l10n/app_it.arb index 961ceb40..445bf8cc 100644 --- a/lib/l10n/app_it.arb +++ b/lib/l10n/app_it.arb @@ -584,5 +584,25 @@ "previous": "Precedente", "@previous": {}, "next": "Successivo", - "@next": {} + "@next": {}, + "gym_mat": "Materassino da palestra", + "@gym_mat": { + "description": "Generated entry for translation for server strings" + }, + "verifiedEmailInfo": "Un'email di verifica è stata inviata a {email}", + "@verifiedEmailInfo": { + "placeholders": { + "email": {} + } + }, + "oneNamePerLine": "Un nome per linea", + "@oneNamePerLine": {}, + "textPromptTitle": "Pronto a iniziare?", + "@textPromptTitle": {}, + "moreMeasurementEntries": "Aggiungi una nuova misura", + "@moreMeasurementEntries": { + "description": "Message shown when the user wants to add new measurement" + }, + "searchNamesInEnglish": "Cerca anche nei nomi in inglese", + "@searchNamesInEnglish": {} } diff --git a/lib/l10n/app_pt.arb b/lib/l10n/app_pt.arb index 9281a56c..624e18af 100644 --- a/lib/l10n/app_pt.arb +++ b/lib/l10n/app_pt.arb @@ -29,7 +29,7 @@ "@invalidUsername": { "description": "Error message when the user enters an invalid username" }, - "customServerHint": "Digite o endereço do seu próprio servidor, caso contrário, o padrão será usado", + "customServerHint": "Digite o endereço do seu próprio servidor, ou então o padrão será usado", "@customServerHint": { "description": "Hint text for the form where the users can enter their own wger instance" }, @@ -715,5 +715,35 @@ } }, "cardio": "Cardio", - "@cardio": {} + "@cardio": {}, + "textPromptTitle": "Podemos começar?", + "@textPromptTitle": {}, + "textPromptSubheading": "Aperte o botão de ação para começar", + "@textPromptSubheading": {}, + "body_weight": "Peso Corporal", + "@body_weight": { + "description": "Generated entry for translation for server strings" + }, + "kilometers_per_hour": "Quilômetros Por Hora", + "@kilometers_per_hour": { + "description": "Generated entry for translation for server strings" + }, + "miles_per_hour": "Milhas por Hora", + "@miles_per_hour": { + "description": "Generated entry for translation for server strings" + }, + "plates": "Pratos", + "@plates": { + "description": "Generated entry for translation for server strings" + }, + "kg": "kg", + "@kg": { + "description": "Generated entry for translation for server strings" + }, + "lb": "lb", + "@lb": { + "description": "Generated entry for translation for server strings" + }, + "searchNamesInEnglish": "Também buscar nomes em inglês", + "@searchNamesInEnglish": {} } diff --git a/lib/l10n/app_pt_BR.arb b/lib/l10n/app_pt_BR.arb new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/lib/l10n/app_pt_BR.arb @@ -0,0 +1 @@ +{} diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index c08bdab3..a6b78338 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -9,9 +9,9 @@ "@labelWorkoutPlans": { "description": "Title for screen workout plans" }, - "registerInstead": "Зарегистроваться вместо этого", + "registerInstead": "У вас нет аккаунта? Зарегистрируйтесь сейчас", "@registerInstead": {}, - "loginInstead": "Войти вместо этого", + "loginInstead": "Уже есть аккаунт? Войти", "@loginInstead": {}, "labelDashboard": "Панель управления", "@labelDashboard": { @@ -564,5 +564,238 @@ "placeholders": { "min": {} } + }, + "noMeasurementEntries": "У вас нет записей измерений", + "@noMeasurementEntries": {}, + "moreMeasurementEntries": "Добавить новое измерение", + "@moreMeasurementEntries": { + "description": "Message shown when the user wants to add new measurement" + }, + "userProfile": "Ваш профиль", + "@userProfile": {}, + "exerciseList": "Список упражнений", + "@exerciseList": {}, + "baseNameEnglish": "Для всех упражнений необходимо базовое название на английском языке", + "@baseNameEnglish": {}, + "verifiedEmail": "Подтвержденный адрес электронной почты", + "@verifiedEmail": {}, + "swiss_ball": "Гимнастический мяч", + "@swiss_ball": { + "description": "Generated entry for translation for server strings" + }, + "chest": "Грудь", + "@chest": { + "description": "Generated entry for translation for server strings" + }, + "kettlebell": "Гиря", + "@kettlebell": { + "description": "Generated entry for translation for server strings" + }, + "calves": "Икры", + "@calves": { + "description": "Generated entry for translation for server strings" + }, + "success": "Успешно", + "@success": { + "description": "Message when an action completed successfully, usually used as a heading" + }, + "exerciseName": "Название упражнения", + "@exerciseName": { + "description": "Label for the name of a workout exercise" + }, + "textPromptTitle": "Готовы начать?", + "@textPromptTitle": {}, + "body_weight": "Вес тела", + "@body_weight": { + "description": "Generated entry for translation for server strings" + }, + "cardio": "Кардио", + "@cardio": { + "description": "Generated entry for translation for server strings" + }, + "dumbbell": "Гантели", + "@dumbbell": { + "description": "Generated entry for translation for server strings" + }, + "gym_mat": "Спортивный коврик", + "@gym_mat": { + "description": "Generated entry for translation for server strings" + }, + "incline_bench": "Наклонная скамья", + "@incline_bench": { + "description": "Generated entry for translation for server strings" + }, + "kilometers_per_hour": "км/ч", + "@kilometers_per_hour": { + "description": "Generated entry for translation for server strings" + }, + "lats": "Широчайшие", + "@lats": { + "description": "Generated entry for translation for server strings" + }, + "miles": "Мили", + "@miles": { + "description": "Generated entry for translation for server strings" + }, + "miles_per_hour": "миль/ч", + "@miles_per_hour": { + "description": "Generated entry for translation for server strings" + }, + "plates": "Блины", + "@plates": { + "description": "Generated entry for translation for server strings" + }, + "quads": "Четырехглавые", + "@quads": { + "description": "Generated entry for translation for server strings" + }, + "sz_bar": "SZ-гриф", + "@sz_bar": { + "description": "Generated entry for translation for server strings" + }, + "kg": "кг", + "@kg": { + "description": "Generated entry for translation for server strings" + }, + "lb": "фунт", + "@lb": { + "description": "Generated entry for translation for server strings" + }, + "images": "Изображения", + "@images": {}, + "language": "Язык", + "@language": {}, + "abs": "Пресс", + "@abs": { + "description": "Generated entry for translation for server strings" + }, + "arms": "Руки", + "@arms": { + "description": "Generated entry for translation for server strings" + }, + "back": "Спина", + "@back": { + "description": "Generated entry for translation for server strings" + }, + "biceps": "Бицепсы", + "@biceps": { + "description": "Generated entry for translation for server strings" + }, + "translation": "Перевод", + "@translation": {}, + "baseData": "Основы на английском", + "@baseData": { + "description": "The base data for an exercise such as category, trained muscles, etc." + }, + "glutes": "Ягодицы", + "@glutes": { + "description": "Generated entry for translation for server strings" + }, + "kilometers": "Километры", + "@kilometers": { + "description": "Generated entry for translation for server strings" + }, + "seconds": "Секунд", + "@seconds": { + "description": "Generated entry for translation for server strings" + }, + "until_failure": "До отказа", + "@until_failure": { + "description": "Generated entry for translation for server strings" + }, + "bench": "Скамья", + "@bench": { + "description": "Generated entry for translation for server strings" + }, + "barbell": "Штанга", + "@barbell": { + "description": "Generated entry for translation for server strings" + }, + "none__bodyweight_exercise_": "без (с собственным весом)", + "@none__bodyweight_exercise_": { + "description": "Generated entry for translation for server strings" + }, + "shoulders": "Плечи", + "@shoulders": { + "description": "Generated entry for translation for server strings" + }, + "next": "Следующее", + "@next": {}, + "pull_up_bar": "Турник", + "@pull_up_bar": { + "description": "Generated entry for translation for server strings" + }, + "exercises": "Упражнения", + "@exercises": { + "description": "Multiple exercises for a workout" + }, + "add_exercise_image_license": "Изображения должны быть совместимы с CC BY SA лицензией. Если вы сомневаетесь, загружайте только те фотографии, которые вы сделали сами", + "@add_exercise_image_license": {}, + "unVerifiedEmail": "Неподтвержденный адрес электронной почты", + "@unVerifiedEmail": {}, + "contributeExercise": "Добавить упражнение", + "@contributeExercise": {}, + "addExercise": "Добавить упражнение", + "@addExercise": {}, + "translateExercise": "Перевести это упражнение", + "@translateExercise": {}, + "contributeExerciseWarning": "Вы можете добавлять упражнения только в том случае, если ваша учетная запись старше {days} дней и вы подтвердили свою электронную почту", + "@contributeExerciseWarning": { + "description": "Number of days before which a person can add exercise", + "placeholders": { + "days": { + "type": "String", + "example": "14" + } + } + }, + "textPromptSubheading": "Нажмите кнопку действия, чтобы начать", + "@textPromptSubheading": {}, + "minutes": "Минут", + "@minutes": { + "description": "Generated entry for translation for server strings" + }, + "triceps": "Трицепс", + "@triceps": { + "description": "Generated entry for translation for server strings" + }, + "searchNamesInEnglish": "Также ищите названия на английском", + "@searchNamesInEnglish": {}, + "selectEntry": "Пожалуйста, выберите запись", + "@selectEntry": {}, + "variations": "Варианты", + "@variations": { + "description": "Variations of one exercise (e.g. benchpress and benchpress narrow)" + }, + "alsoKnownAs": "Также известно как: {aliases}", + "@alsoKnownAs": { + "placeholders": { + "aliases": {} + }, + "description": "List of alternative names for an exercise" + }, + "verifiedEmailReason": "Вам необходимо подтвердить свой адрес электронной почты, чтобы добавлять упражнения", + "@verifiedEmailReason": {}, + "verifiedEmailInfo": "Письмо с подтверждением отправлено на {email}", + "@verifiedEmailInfo": { + "placeholders": { + "email": {} + } + }, + "alternativeNames": "Альтернативные названия", + "@alternativeNames": {}, + "oneNamePerLine": "Одно название на строку", + "@oneNamePerLine": {}, + "whatVariationsExist": "Какие варианты этого упражнения существуют, если таковые имеются?", + "@whatVariationsExist": {}, + "previous": "Предыдущее", + "@previous": {}, + "aboutPageTitle": "О Wger", + "@aboutPageTitle": {}, + "cacheWarning": "Из-за кэширования может пройти некоторое время, прежде чем изменения станут видны во всем приложении.", + "@cacheWarning": {}, + "legs": "Ноги", + "@legs": { + "description": "Generated entry for translation for server strings" } } diff --git a/lib/l10n/app_tr.arb b/lib/l10n/app_tr.arb index 8ce2d8fc..07ece58a 100644 --- a/lib/l10n/app_tr.arb +++ b/lib/l10n/app_tr.arb @@ -717,5 +717,9 @@ "cacheWarning": "Önbelleğe alma nedeniyle değişikliklerin uygulama genelinde görünür olması biraz zaman alabilir.", "@cacheWarning": {}, "searchNamesInEnglish": "Ayrıca İngilizce adları da arayın", - "@searchNamesInEnglish": {} + "@searchNamesInEnglish": {}, + "textPromptTitle": "Başlamaya hazır mısınız?", + "@textPromptTitle": {}, + "textPromptSubheading": "Başlamak için eylem düğmesine basın", + "@textPromptSubheading": {} } diff --git a/lib/l10n/app_uk.arb b/lib/l10n/app_uk.arb index d9b7f2eb..bd787a4f 100644 --- a/lib/l10n/app_uk.arb +++ b/lib/l10n/app_uk.arb @@ -621,7 +621,7 @@ "@legs": {}, "back": "Спина", "@back": {}, - "quads": "Квадроцикли", + "quads": "Квадрицепс", "@quads": {}, "arms": "Руки", "@arms": {}, @@ -721,5 +721,35 @@ "textPromptTitle": "Готові почати?", "@textPromptTitle": {}, "textPromptSubheading": "Натисніть кнопку дії, щоб почати", - "@textPromptSubheading": {} + "@textPromptSubheading": {}, + "body_weight": "Вага тіла", + "@body_weight": { + "description": "Generated entry for translation for server strings" + }, + "kg": "кг", + "@kg": { + "description": "Generated entry for translation for server strings" + }, + "kilometers_per_hour": "Кілометрів на годину", + "@kilometers_per_hour": { + "description": "Generated entry for translation for server strings" + }, + "miles_per_hour": "Миль на годину", + "@miles_per_hour": { + "description": "Generated entry for translation for server strings" + }, + "lb": "фунт", + "@lb": { + "description": "Generated entry for translation for server strings" + }, + "plates": "Пластини", + "@plates": { + "description": "Generated entry for translation for server strings" + }, + "verify": "Підтвердити", + "@verify": {}, + "max_reps": "Максимальна кількість повторень", + "@max_reps": { + "description": "Generated entry for translation for server strings" + } } diff --git a/lib/main.dart b/lib/main.dart index ec20aae1..9ab6fbd5 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -162,21 +162,6 @@ class MyApp extends StatelessWidget { }, localizationsDelegates: AppLocalizations.localizationsDelegates, supportedLocales: AppLocalizations.supportedLocales, - - // Workaround for https://github.com/flutter/flutter/issues/100857 - localeResolutionCallback: (deviceLocale, supportedLocales) { - if (deviceLocale != null) { - for (final supportedLocale in supportedLocales) { - // Since we currently don't support any country specific locales - // such as de-DE and de-AT, it's sufficient to just check it like - // this. Otherwise we will need more logic with .countryCode - if (supportedLocale.languageCode == deviceLocale.languageCode) { - return supportedLocale; - } - } - } - return const Locale('en'); - }, ), ), ); diff --git a/lib/models/nutrition/ingredient.dart b/lib/models/nutrition/ingredient.dart index d4a3eaae..5fda5e26 100644 --- a/lib/models/nutrition/ingredient.dart +++ b/lib/models/nutrition/ingredient.dart @@ -34,7 +34,7 @@ class Ingredient { @JsonKey(required: true) final String name; - @JsonKey(required: true, name: 'creation_date', toJson: toDate) + @JsonKey(required: true, name: 'creation_date') final DateTime creationDate; /// Energy in kJ per 100g of product diff --git a/lib/models/nutrition/ingredient.g.dart b/lib/models/nutrition/ingredient.g.dart index bb7edb7c..afb9c324 100644 --- a/lib/models/nutrition/ingredient.g.dart +++ b/lib/models/nutrition/ingredient.g.dart @@ -47,7 +47,7 @@ Map _$IngredientToJson(Ingredient instance) => element.id == DEFAULT_REPETITION_UNIT); + return _repetitionUnit.firstWhere((element) => element.id == REP_UNIT_REPETITIONS); } List getPlans() { diff --git a/lib/screens/auth_screen.dart b/lib/screens/auth_screen.dart index 27c006de..98f08072 100644 --- a/lib/screens/auth_screen.dart +++ b/lib/screens/auth_screen.dart @@ -246,12 +246,13 @@ class _AuthCardState extends State { textInputAction: TextInputAction.next, keyboardType: TextInputType.emailAddress, validator: (value) { + if (value == null || value.isEmpty) { + return AppLocalizations.of(context).invalidUsername; + } if (!RegExp(r'^[\w.@+-]+$').hasMatch(value!)) { return AppLocalizations.of(context).usernameValidChars; } - if (value.isEmpty) { - return AppLocalizations.of(context).invalidUsername; - } + return null; }, inputFormatters: [FilteringTextInputFormatter.deny(RegExp(r'\s\b|\b\s'))], diff --git a/lib/widgets/user/forms.dart b/lib/widgets/user/forms.dart index 39fb80a7..14e1f28b 100644 --- a/lib/widgets/user/forms.dart +++ b/lib/widgets/user/forms.dart @@ -22,6 +22,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:provider/provider.dart'; import 'package:wger/models/user/profile.dart'; import 'package:wger/providers/user.dart'; +import 'package:wger/theme/theme.dart'; class UserProfileForm extends StatelessWidget { late final Profile _profile; @@ -40,39 +41,23 @@ class UserProfileForm extends StatelessWidget { child: Column( children: [ ListTile( + leading: const Icon(Icons.person, color: wgerPrimaryColor), title: Text(AppLocalizations.of(context).username), subtitle: Text(_profile.username), ), ListTile( - title: Text( - _profile.emailVerified - ? AppLocalizations.of(context).verifiedEmail - : AppLocalizations.of(context).unVerifiedEmail, - ), - subtitle: Text(AppLocalizations.of(context).verifiedEmailReason), - trailing: _profile.emailVerified - ? const Icon(Icons.mark_email_read, color: Colors.green) - : const Icon(Icons.forward_to_inbox), - onTap: () async { - // Email is already verified - if (_profile.emailVerified) { - return; - } - - // Verify - await context.read().verifyEmail(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - AppLocalizations.of(context).verifiedEmailInfo(_profile.email), - ), - ), - ); - }, - ), - ListTile( + leading: const Icon(Icons.email_rounded, color: wgerPrimaryColor), title: TextFormField( - decoration: InputDecoration(labelText: AppLocalizations.of(context).email), + decoration: InputDecoration( + labelText: _profile.emailVerified + ? AppLocalizations.of(context).verifiedEmail + : AppLocalizations.of(context).unVerifiedEmail, + suffixIcon: _profile.emailVerified + ? const Icon( + Icons.check_circle, + color: Colors.green, + ) + : null), controller: emailController, keyboardType: TextInputType.emailAddress, onSaved: (newValue) { @@ -86,8 +71,30 @@ class UserProfileForm extends StatelessWidget { }, ), ), + if (!_profile.emailVerified) + OutlinedButton( + onPressed: () async { + // Email is already verified + if (_profile.emailVerified) { + return; + } + + // Verify + await context.read().verifyEmail(); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text( + AppLocalizations.of(context).verifiedEmailInfo(_profile.email), + ), + ), + ); + }, + child: Text(AppLocalizations.of(context).verify), + ), ElevatedButton( - child: Text(AppLocalizations.of(context).save), + style: ElevatedButton.styleFrom( + backgroundColor: wgerPrimaryButtonColor, + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(50))), onPressed: () async { // Validate and save the current values to the weightEntry final isValid = _form.currentState!.validate(); @@ -103,6 +110,7 @@ class UserProfileForm extends StatelessWidget { SnackBar(content: Text(AppLocalizations.of(context).successfullySaved)), ); }, + child: Text(AppLocalizations.of(context).save), ), ], ), diff --git a/pubspec.lock b/pubspec.lock index 72abbd72..f853a2e5 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,18 +5,18 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: "405666cd3cf0ee0a48d21ec67e65406aad2c726d9fa58840d3375e7bdcd32a07" + sha256: "8880b4cfe7b5b17d57c052a5a3a8cc1d4f546261c7cc8fbd717bd53f48db0568" url: "https://pub.dev" source: hosted - version: "60.0.0" + version: "59.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: "1952250bd005bacb895a01bf1b4dc00e3ba1c526cf47dca54dfe24979c65f5b3" + sha256: a89627f49b0e70e068130a36571409726b04dab12da7e5625941d2c8ec278b96 url: "https://pub.dev" source: hosted - version: "5.12.0" + version: "5.11.1" android_metadata: dependency: "direct main" description: @@ -229,10 +229,10 @@ packages: dependency: "direct dev" description: name: cider - sha256: "714a853bf92701b982496df0bd601c0cf2d882cfc1f2d41ae9aff2b20cee016a" + sha256: "74d96930575f97d83e0a3a5cd26d27d10c38961b1b41346eebe5baabf0f56940" url: "https://pub.dev" source: hosted - version: "0.1.5" + version: "0.1.6" cli_launcher: dependency: transitive description: @@ -349,10 +349,10 @@ packages: dependency: transitive description: name: ffi - sha256: ed5337a5660c506388a9f012be0288fb38b49020ce2b45fe1f8b8323fe429f99 + sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978 url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.0.1" file: dependency: transitive description: @@ -361,6 +361,38 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: d17c5e450192cdc40b718804dfb4eaf79a71bed60ee9530703900879ba50baa3 + url: "https://pub.dev" + source: hosted + version: "0.9.1+3" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: "6290eec24fc4cc62535fe609e0c6714d3c1306191dc8c3b0319eaecc09423a3a" + url: "https://pub.dev" + source: hosted + version: "0.9.2" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: "2a7f4bbf7bd2f022ecea85bfb1754e87f7dd403a9abc17a84a4fa2ddfe2abc0a" + url: "https://pub.dev" + source: hosted + version: "2.5.1" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: ef246380b66d1fb9089fc65622c387bf3780bca79f533424c31d07f12c2c7fd8 + url: "https://pub.dev" + source: hosted + version: "0.9.2" fixnum: dependency: transitive description: @@ -399,10 +431,10 @@ packages: dependency: "direct main" description: name: flutter_html - sha256: "850c07bc6c1ed060d3eb3e88469a598260a13eb45d8978b197c1348e0a2b101f" + sha256: "02ad69e813ecfc0728a455e4bf892b9379983e050722b1dce00192ee2e41d1ee" url: "https://pub.dev" source: hosted - version: "3.0.0-beta.1" + version: "3.0.0-beta.2" flutter_keyboard_visibility: dependency: transitive description: @@ -505,10 +537,10 @@ packages: dependency: "direct main" description: name: flutter_typeahead - sha256: "721610b3d61814efa13fb5f720a6781bc123cd51b7e01f5a45d7c92124376644" + sha256: d72e7079d01b4ec109a12b01b06a85c09a41ae4531f8a0ca5ef9f759ce4e64a2 url: "https://pub.dev" source: hosted - version: "4.3.8" + version: "4.6.1" flutter_web_plugins: dependency: transitive description: flutter @@ -555,10 +587,10 @@ packages: dependency: transitive description: name: graphs - sha256: "772db3d53d23361d4ffcf5a9bb091cf3ee9b22f2be52cd107cd7a2683a89ba0e" + sha256: f9e130f3259f52d26f0cfc0e964513796dafed572fa52e45d2f8d6ca14db39b2 url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.2.0" html: dependency: transitive description: @@ -603,18 +635,18 @@ packages: dependency: "direct main" description: name: image_picker - sha256: "9978d3510af4e6a902e545ce19229b926e6de6a1828d6134d3aab2e129a4d270" + sha256: b6951e25b795d053a6ba03af5f710069c99349de9341af95155d52665cb4607c url: "https://pub.dev" source: hosted - version: "0.8.7+5" + version: "0.8.9" image_picker_android: dependency: transitive description: name: image_picker_android - sha256: "89ba2aa6904d8180ca44fd5f5014523f02319101904e3e571fbe792e395b77ed" + sha256: "271e0448e82268b3fa1cb2a48e4a911cbc2135587123d7df8e7ca703c5b10da2" url: "https://pub.dev" source: hosted - version: "0.8.6+14" + version: "0.8.6+11" image_picker_for_web: dependency: transitive description: @@ -627,18 +659,42 @@ packages: dependency: transitive description: name: image_picker_ios - sha256: d779210bda268a03b57e923fb1e410f32f5c5e708ad256348bcbf1f44f558fd0 + sha256: a1546ff5861fc15812953d4733b520c3d371cec3d2859a001ff04c46c4d81883 url: "https://pub.dev" source: hosted - version: "0.8.7+4" + version: "0.8.7+3" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "1d8f9a97178d6b8a035f1d2765f17f8ca3d36a40d5594e742a481b1e002f20be" + url: "https://pub.dev" + source: hosted + version: "0.2.0" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: ff094b36d6c06200808f733144a033e45b4e17d59524e1cf7d2af7e4cb94e1ab + url: "https://pub.dev" + source: hosted + version: "0.2.0" image_picker_platform_interface: dependency: transitive description: name: image_picker_platform_interface - sha256: "1991219d9dbc42a99aff77e663af8ca51ced592cd6685c9485e3458302d3d4f8" + sha256: "7c7b96bb9413a9c28229e717e6fd1e3edd1cc5569c1778fcca060ecf729b65ee" url: "https://pub.dev" source: hosted - version: "2.6.3" + version: "2.8.0" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: bf77b819eb62c487e6af53b9eb213adc12bd060ef7e43f3b1dd69c53cc24a61d + url: "https://pub.dev" + source: hosted + version: "0.2.0" integration_test: dependency: "direct dev" description: flutter @@ -824,10 +880,10 @@ packages: dependency: "direct main" description: name: package_info_plus - sha256: "10259b111176fba5c505b102e3a5b022b51dd97e30522e906d6922c745584745" + sha256: ceb027f6bc6a60674a233b4a90a7658af1aebdea833da0b5b53c1e9821a78c7b url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "4.0.2" package_info_plus_platform_interface: dependency: transitive description: @@ -900,6 +956,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + pointer_interceptor: + dependency: transitive + description: + name: pointer_interceptor + sha256: "6aa680b30d96dccef496933d00208ad25f07e047f644dc98ce03ec6141633a9a" + url: "https://pub.dev" + source: hosted + version: "0.9.3+4" pool: dependency: transitive description: @@ -984,26 +1048,26 @@ packages: dependency: "direct main" description: name: rive - sha256: f7f365ee0e6cf0af99fb239bc3424370ca6ee2b9ad6fc879b1a79ba5e3b40770 + sha256: "55e1f8bf249444545a7c832830d2bbb9adae759193fb879294bc6018b9f0eedd" url: "https://pub.dev" source: hosted - version: "0.10.4" + version: "0.11.3" rive_common: dependency: transitive description: name: rive_common - sha256: "7c4be235d75c34a0f257b4487c0cc314188aa2f9a6c177d34f02df53d7c25831" + sha256: "7e17937b790bb2f631767b3d505da8c298309c0a6ab08cd317fa6fe081ed5b63" url: "https://pub.dev" source: hosted - version: "0.0.5" + version: "0.0.10" shared_preferences: dependency: "direct main" description: name: shared_preferences - sha256: "16d3fb6b3692ad244a695c0183fca18cf81fd4b821664394a781de42386bf022" + sha256: "396f85b8afc6865182610c0a2fc470853d56499f75f7499e2a73a9f0539d23d0" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" shared_preferences_android: dependency: transitive description: @@ -1016,10 +1080,10 @@ packages: dependency: transitive description: name: shared_preferences_foundation - sha256: e014107bb79d6d3297196f4f2d0db54b5d1f85b8ea8ff63b8e8b391a02700feb + sha256: "0c1c16c56c9708aa9c361541a6f0e5cc6fc12a3232d866a687a7b7db30032b07" url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.2.1" shared_preferences_linux: dependency: transitive description: @@ -1085,10 +1149,10 @@ packages: dependency: transitive description: name: source_gen - sha256: "373f96cf5a8744bc9816c1ff41cf5391bbdbe3d7a96fe98c622b6738a8a7bd33" + sha256: b20e191de6964e98032573cecb1d2b169d96ba63fdb586d24dcd1003ba7e94f6 url: "https://pub.dev" source: hosted - version: "1.3.2" + version: "1.3.0" source_helper: dependency: transitive description: @@ -1205,10 +1269,10 @@ packages: dependency: transitive description: name: url_launcher_android - sha256: "7aac14be5f4731b923cc697ae2d42043945076cd0dbb8806baecc92c1dc88891" + sha256: "22f8db4a72be26e9e3a4aa3f194b1f7afbc76d20ec141f84be1d787db2155cbd" url: "https://pub.dev" source: hosted - version: "6.0.33" + version: "6.0.31" url_launcher_ios: dependency: transitive description: @@ -1325,10 +1389,10 @@ packages: dependency: transitive description: name: video_player_avfoundation - sha256: "4c274e439f349a0ee5cb3c42978393ede173a443b98f50de6ffe6900eaa19216" + sha256: "824dad3e2986a13766fcccfd1c48c83eef9f896c220a53292e3019b9e98615bb" url: "https://pub.dev" source: hosted - version: "2.4.6" + version: "2.4.5" video_player_platform_interface: dependency: transitive description: @@ -1418,5 +1482,5 @@ packages: source: hosted version: "2.1.1" sdks: - dart: ">=2.19.0 <4.0.0" + dart: ">=2.19.0 <3.0.0" flutter: ">=3.7.0-0" diff --git a/pubspec.yaml b/pubspec.yaml index d8c78086..cf238838 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -24,7 +24,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev version: 1.5.4+31 environment: - sdk: ">=2.12.0 <3.0.0" + sdk: '>=2.17.0 <3.0.0' dependencies: flutter: @@ -38,20 +38,20 @@ dependencies: cupertino_icons: ^1.0.5 equatable: ^2.0.5 flutter_calendar_carousel: ^2.4.1 - flutter_html: ^3.0.0-alpha.6 - flutter_typeahead: ^4.3.8 + flutter_html: ^3.0.0-beta.2 + flutter_typeahead: ^4.6.1 font_awesome_flutter: ^10.4.0 http: ^0.13.5 - image_picker: ^0.8.7+3 + image_picker: ^0.8.9 intl: ^0.17.0 - json_annotation: ^4.8.0 + json_annotation: ^4.8.1 version: ^3.0.2 - package_info_plus: ^3.1.2 + package_info_plus: ^4.0.2 provider: ^6.0.5 - rive: ^0.10.4 - shared_preferences: ^2.1.0 + rive: ^0.11.3 + shared_preferences: ^2.1.2 table_calendar: ^3.0.8 - url_launcher: ^6.1.10 + url_launcher: ^6.1.11 flutter_barcode_scanner: ^2.0.0 video_player: ^2.6.1 flutter_staggered_grid_view: ^0.6.2 @@ -71,7 +71,7 @@ dev_dependencies: mockito: ^5.4.0 network_image_mock: ^2.1.1 flutter_lints: ^2.0.1 - cider: ^0.1.5 + cider: ^0.1.6 flutter_icons: android: true diff --git a/test/fixtures/nutrition/ingredient_10065_response.json b/test/fixtures/nutrition/ingredient_10065_response.json index 920fbfa2..bba54a2c 100644 --- a/test/fixtures/nutrition/ingredient_10065_response.json +++ b/test/fixtures/nutrition/ingredient_10065_response.json @@ -2,8 +2,8 @@ "id": 10065, "code": "0043647440020", "name": "'Old Times' Orange Fine Cut Marmalade", - "creation_date": "2020-12-20", - "update_date": "2022-08-09", + "creation_date": "2020-12-20T01:00:00+01:00", + "update_date": "2022-08-09T10:23:11+02:00", "energy": 269, "protein": "0.000", "carbohydrates": "67.000", diff --git a/test/fixtures/nutrition/ingredient_58300_response.json b/test/fixtures/nutrition/ingredient_58300_response.json index 1dbe5c8d..9e84a276 100644 --- a/test/fixtures/nutrition/ingredient_58300_response.json +++ b/test/fixtures/nutrition/ingredient_58300_response.json @@ -2,8 +2,8 @@ "id": 58300, "code": "4071800000992", "name": "1688 Mehrkorn", - "creation_date": "2020-12-20", - "update_date": "2022-08-09", + "creation_date": "2020-12-20T01:00:00+02:00", + "update_date": "2022-08-09T18:55:00+02:00", "energy": 229, "protein": "7.680", "carbohydrates": "35.700", diff --git a/test/fixtures/nutrition/ingredient_59887_response.json b/test/fixtures/nutrition/ingredient_59887_response.json index 3aa08b42..a20b0940 100644 --- a/test/fixtures/nutrition/ingredient_59887_response.json +++ b/test/fixtures/nutrition/ingredient_59887_response.json @@ -2,8 +2,8 @@ "id": 59887, "code": "4311501354155", "name": "Baked Beans", - "creation_date": "2020-12-20", - "update_date": "2022-08-09", + "creation_date": "2020-12-20T23:10:54+01:00", + "update_date": "2022-08-09T13:32:41+01:00", "energy": 86, "protein": "4.400", "carbohydrates": "11.000",