From 962b87b571fd2e71066e6e3a28a5c50ff0bd88e4 Mon Sep 17 00:00:00 2001 From: Edouard Marquez Date: Tue, 24 Sep 2024 22:30:39 +0200 Subject: [PATCH 1/3] Let's migrate the app to Flutter 3.24 --- README.md | 2 +- flutter-version.txt | 2 +- .../app_store/apple_app_store/pubspec.yaml | 8 +- packages/app_store/google_play/pubspec.yaml | 8 +- packages/app_store/shared/pubspec.yaml | 8 +- packages/app_store/uri_store/pubspec.yaml | 8 +- packages/scanner/ml_kit/pubspec.yaml | 8 +- packages/scanner/shared/pubspec.yaml | 8 +- packages/scanner/zxing/pubspec.yaml | 8 +- packages/smooth_app/ios/Podfile | 13 +- packages/smooth_app/ios/Podfile.lock | 312 ++++++++++++++++++ .../smooth_app/ios/Runner/AppDelegate.swift | 2 +- .../background/background_task_add_price.dart | 5 +- .../background/background_task_barcode.dart | 4 +- .../lib/background/background_task_crop.dart | 4 +- .../background/background_task_details.dart | 4 +- .../background_task_download_products.dart | 4 +- .../background_task_full_refresh.dart | 3 +- .../background_task_hunger_games.dart | 4 +- .../lib/background/background_task_image.dart | 4 +- .../background_task_language_refresh.dart | 4 +- .../background/background_task_offline.dart | 3 +- .../lib/background/background_task_paged.dart | 4 +- .../background_task_progressing.dart | 4 +- .../background_task_refresh_later.dart | 4 +- .../background_task_top_barcodes.dart | 4 +- .../background/background_task_unselect.dart | 4 +- .../background/background_task_upload.dart | 5 +- .../database_product_list_supplier.dart | 8 +- .../data_models/news_feed/newsfeed_json.dart | 4 +- .../data_models/onboarding_data_product.dart | 4 +- .../lib/data_models/product_preferences.dart | 4 +- .../query_product_list_supplier.dart | 8 +- .../lib/database/dao_hive_product.dart | 4 +- .../lib/database/dao_instant_string.dart | 3 +- packages/smooth_app/lib/database/dao_int.dart | 3 +- .../lib/database/dao_product_list.dart | 2 +- .../smooth_app/lib/database/dao_string.dart | 3 +- .../lib/database/dao_string_list.dart | 3 +- .../lib/database/dao_string_list_map.dart | 3 +- .../lib/database/dao_transient_operation.dart | 5 +- .../smooth_draggable_bottom_sheet.dart | 8 +- .../smooth_draggable_bottom_sheet_route.dart | 4 +- .../widgets/smooth_back_button.dart | 4 +- .../widgets/smooth_list_tile_card.dart | 4 +- packages/smooth_app/lib/helpers/physics.dart | 13 +- .../smooth_app/lib/helpers/ui_helpers.dart | 3 +- .../question_answers_options.dart | 4 +- .../lib/pages/navigator/app_navigator.dart | 9 +- .../lib/pages/navigator/error_page.dart | 4 +- .../lib/pages/navigator/external_page.dart | 7 +- .../lib/pages/offline_data_page.dart | 10 +- .../preferences/user_preferences_account.dart | 17 +- .../preferences/user_preferences_connect.dart | 17 +- .../user_preferences_contribute.dart | 16 +- .../user_preferences_dev_debug_info.dart | 4 +- .../user_preferences_dev_mode.dart | 17 +- .../preferences/user_preferences_faq.dart | 17 +- .../preferences/user_preferences_food.dart | 16 +- .../user_preferences_settings.dart | 16 +- .../preferences/user_preferences_widgets.dart | 9 +- .../lib/pages/product/autocomplete.dart | 9 +- .../product/common/search_app_bar_title.dart | 4 +- .../product/common/search_empty_screen.dart | 4 +- .../lib/pages/product/edit_product_page.dart | 10 +- .../lib/pages/product/hideable_container.dart | 4 +- .../pages/product/product_loader_page.dart | 13 +- .../product_question_answers_options.dart | 4 +- .../product/product_questions_widget.dart | 4 +- .../product_list_user_dialog_helper.dart | 7 +- .../scan/carousel/scan_carousel_manager.dart | 5 +- .../smooth_app/lib/pages/scan/scan_page.dart | 2 +- .../scan/smooth_barcode_scanner_mockup.dart | 4 +- .../lib/pages/search/search_page.dart | 6 - .../lib/pages/text_field_helper.dart | 5 +- .../pages/user_management/sign_up_page.dart | 3 +- .../logs/fimber/trees/file_fimber_tree.dart | 5 +- .../logs/fimber/trees/sentry_fimber_tree.dart | 5 +- .../services/logs/smooth_logs_service.dart | 5 +- .../lib/widgets/smooth_app_bar.dart | 8 +- .../lib/widgets/smooth_scaffold.dart | 6 +- .../smooth_app/lib/widgets/widget_height.dart | 7 +- .../lib/widgets/will_pop_scope.dart | 2 +- packages/smooth_app/macos/Podfile.lock | 127 +++++++ .../smooth_app/macos/Runner/AppDelegate.swift | 2 +- packages/smooth_app/pubspec.lock | 14 +- packages/smooth_app/pubspec.yaml | 8 +- .../smooth_reveal_animation_test.dart | 3 +- .../dialogs/smooth_category_picker_test.dart | 7 +- .../flutter/generated_plugin_registrant.cc | 3 - .../windows/flutter/generated_plugins.cmake | 2 +- 91 files changed, 685 insertions(+), 307 deletions(-) create mode 100644 packages/smooth_app/ios/Podfile.lock create mode 100644 packages/smooth_app/macos/Podfile.lock diff --git a/README.md b/README.md index 957dda4b4c4..17824989419 100644 --- a/README.md +++ b/README.md @@ -90,7 +90,7 @@ Full list of features on the wiki: https://wiki.openfoodfacts.org/Mobile_App/Fea - Make sure you have installed flutter and all the requirements - [Official flutter installation guide](https://docs.flutter.dev/get-started/install) -- Currently, the app uses the following version of Flutter (3.22.x). +- Currently, the app uses the following version of Flutter (3.24.x). We have predefined run configurations for Android Studio and Visual Studio Code diff --git a/flutter-version.txt b/flutter-version.txt index dbc9520ba41..ffba2c8db92 100644 --- a/flutter-version.txt +++ b/flutter-version.txt @@ -1 +1 @@ -3.22.2 \ No newline at end of file +3.24.3 \ No newline at end of file diff --git a/packages/app_store/apple_app_store/pubspec.yaml b/packages/app_store/apple_app_store/pubspec.yaml index 0a6b0494448..f630a3a4fd6 100644 --- a/packages/app_store/apple_app_store/pubspec.yaml +++ b/packages/app_store/apple_app_store/pubspec.yaml @@ -4,7 +4,7 @@ version: 0.0.1 publish_to: "none" environment: - sdk: '>=3.4.0 <4.0.0' + sdk: ^3.5.3 dependencies: flutter: @@ -18,6 +18,8 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: 2.0.3 + flutter_lints: 4.0.0 openfoodfacts_flutter_lints: - git: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git \ No newline at end of file + git: + url: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git + ref: flutter_3_24 \ No newline at end of file diff --git a/packages/app_store/google_play/pubspec.yaml b/packages/app_store/google_play/pubspec.yaml index 54161b2443e..85751604fb8 100644 --- a/packages/app_store/google_play/pubspec.yaml +++ b/packages/app_store/google_play/pubspec.yaml @@ -4,7 +4,7 @@ version: 0.0.1 publish_to: "none" environment: - sdk: '>=3.4.0 <4.0.0' + sdk: ^3.5.3 dependencies: flutter: @@ -18,8 +18,10 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: 2.0.3 + flutter_lints: 4.0.0 openfoodfacts_flutter_lints: - git: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git + git: + url: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git + ref: flutter_3_24 flutter: \ No newline at end of file diff --git a/packages/app_store/shared/pubspec.yaml b/packages/app_store/shared/pubspec.yaml index 86fec92bc7f..4ce8e19620d 100644 --- a/packages/app_store/shared/pubspec.yaml +++ b/packages/app_store/shared/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 publish_to: "none" environment: - sdk: '>=3.4.0 <4.0.0' + sdk: ^3.5.3 dependencies: flutter: @@ -13,8 +13,10 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: 2.0.3 + flutter_lints: 4.0.0 openfoodfacts_flutter_lints: - git: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git + git: + url: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git + ref: flutter_3_24 flutter: \ No newline at end of file diff --git a/packages/app_store/uri_store/pubspec.yaml b/packages/app_store/uri_store/pubspec.yaml index ef0e35cefff..898a9d166d5 100644 --- a/packages/app_store/uri_store/pubspec.yaml +++ b/packages/app_store/uri_store/pubspec.yaml @@ -4,7 +4,7 @@ version: 0.0.1 publish_to: "none" environment: - sdk: '>=3.4.0 <4.0.0' + sdk: ^3.5.3 dependencies: flutter: @@ -18,6 +18,8 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: 2.0.3 + flutter_lints: 4.0.0 openfoodfacts_flutter_lints: - git: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git \ No newline at end of file + git: + url: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git + ref: flutter_3_24 \ No newline at end of file diff --git a/packages/scanner/ml_kit/pubspec.yaml b/packages/scanner/ml_kit/pubspec.yaml index 4dca15bc983..2e7223e3350 100644 --- a/packages/scanner/ml_kit/pubspec.yaml +++ b/packages/scanner/ml_kit/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 publish_to: "none" environment: - sdk: '>=3.4.0 <4.0.0' + sdk: ^3.5.3 dependencies: flutter: @@ -20,6 +20,8 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: 2.0.2 + flutter_lints: 4.0.0 openfoodfacts_flutter_lints: - git: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git \ No newline at end of file + git: + url: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git + ref: flutter_3_24 \ No newline at end of file diff --git a/packages/scanner/shared/pubspec.yaml b/packages/scanner/shared/pubspec.yaml index 7fa9a28d1f0..6e382fe6cf8 100644 --- a/packages/scanner/shared/pubspec.yaml +++ b/packages/scanner/shared/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 publish_to: "none" environment: - sdk: '>=3.4.0 <4.0.0' + sdk: ^3.5.3 dependencies: flutter: @@ -16,8 +16,10 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: 2.0.3 + flutter_lints: 4.0.0 openfoodfacts_flutter_lints: - git: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git + git: + url: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git + ref: flutter_3_24 flutter: \ No newline at end of file diff --git a/packages/scanner/zxing/pubspec.yaml b/packages/scanner/zxing/pubspec.yaml index 0e32939a7b4..9f1a7a86c24 100644 --- a/packages/scanner/zxing/pubspec.yaml +++ b/packages/scanner/zxing/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 publish_to: "none" environment: - sdk: '>=3.4.0 <4.0.0' + sdk: ^3.5.3 dependencies: flutter: @@ -18,6 +18,8 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: 2.0.3 + flutter_lints: 4.0.0 openfoodfacts_flutter_lints: - git: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git \ No newline at end of file + git: + url: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git + ref: flutter_3_24 \ No newline at end of file diff --git a/packages/smooth_app/ios/Podfile b/packages/smooth_app/ios/Podfile index 88e2e54a0cd..92a6702908d 100644 --- a/packages/smooth_app/ios/Podfile +++ b/packages/smooth_app/ios/Podfile @@ -32,20 +32,13 @@ target 'Runner' do use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) +# target 'RunnerTests' do +# inherit! :search_paths +# end end post_install do |installer| installer.pods_project.targets.each do |target| flutter_additional_ios_build_settings(target) - - target.build_configurations.each do |config| - config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0' - - config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [ - '$(inherited)', - 'PERMISSION_CAMERA=1', - 'PERMISSION_PHOTOS=1', - ] - end end end diff --git a/packages/smooth_app/ios/Podfile.lock b/packages/smooth_app/ios/Podfile.lock new file mode 100644 index 00000000000..c2373332d6c --- /dev/null +++ b/packages/smooth_app/ios/Podfile.lock @@ -0,0 +1,312 @@ +PODS: + - app_settings (5.1.1): + - Flutter + - audioplayers_darwin (0.0.1): + - Flutter + - camera_avfoundation (0.0.1): + - Flutter + - connectivity_plus (0.0.1): + - Flutter + - ReachabilitySwift + - device_info_plus (0.0.1): + - Flutter + - Flutter (1.0.0) + - flutter_custom_tabs_ios (2.0.0): + - Flutter + - flutter_email_sender (0.0.1): + - Flutter + - flutter_icmp_ping (0.0.1): + - Flutter + - flutter_image_compress_common (1.0.0): + - Flutter + - Mantle + - SDWebImage + - SDWebImageWebPCoder + - flutter_native_splash (0.0.1): + - Flutter + - flutter_secure_storage (6.0.0): + - Flutter + - GoogleDataTransport (9.4.1): + - GoogleUtilities/Environment (~> 7.7) + - nanopb (< 2.30911.0, >= 2.30908.0) + - PromisesObjC (< 3.0, >= 1.2) + - GoogleMLKit/BarcodeScanning (4.0.0): + - GoogleMLKit/MLKitCore + - MLKitBarcodeScanning (~> 3.0.0) + - GoogleMLKit/MLKitCore (4.0.0): + - MLKitCommon (~> 9.0.0) + - GoogleToolboxForMac/DebugUtils (2.3.2): + - GoogleToolboxForMac/Defines (= 2.3.2) + - GoogleToolboxForMac/Defines (2.3.2) + - GoogleToolboxForMac/Logger (2.3.2): + - GoogleToolboxForMac/Defines (= 2.3.2) + - "GoogleToolboxForMac/NSData+zlib (2.3.2)": + - GoogleToolboxForMac/Defines (= 2.3.2) + - "GoogleToolboxForMac/NSDictionary+URLArguments (2.3.2)": + - GoogleToolboxForMac/DebugUtils (= 2.3.2) + - GoogleToolboxForMac/Defines (= 2.3.2) + - "GoogleToolboxForMac/NSString+URLArguments (= 2.3.2)" + - "GoogleToolboxForMac/NSString+URLArguments (2.3.2)" + - GoogleUtilities/Environment (7.13.3): + - GoogleUtilities/Privacy + - PromisesObjC (< 3.0, >= 1.2) + - GoogleUtilities/Logger (7.13.3): + - GoogleUtilities/Environment + - GoogleUtilities/Privacy + - GoogleUtilities/Privacy (7.13.3) + - GoogleUtilities/UserDefaults (7.13.3): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - GoogleUtilitiesComponents (1.1.0): + - GoogleUtilities/Logger + - GTMSessionFetcher/Core (2.3.0) + - image_picker_ios (0.0.1): + - Flutter + - in_app_review (0.2.0): + - Flutter + - integration_test (0.0.1): + - Flutter + - iso_countries (0.0.1): + - Flutter + - libwebp (1.3.2): + - libwebp/demux (= 1.3.2) + - libwebp/mux (= 1.3.2) + - libwebp/sharpyuv (= 1.3.2) + - libwebp/webp (= 1.3.2) + - libwebp/demux (1.3.2): + - libwebp/webp + - libwebp/mux (1.3.2): + - libwebp/demux + - libwebp/sharpyuv (1.3.2) + - libwebp/webp (1.3.2): + - libwebp/sharpyuv + - Mantle (2.2.0): + - Mantle/extobjc (= 2.2.0) + - Mantle/extobjc (2.2.0) + - MLImage (1.0.0-beta4) + - MLKitBarcodeScanning (3.0.0): + - MLKitCommon (~> 9.0) + - MLKitVision (~> 5.0) + - MLKitCommon (9.0.0): + - GoogleDataTransport (~> 9.0) + - GoogleToolboxForMac/Logger (~> 2.1) + - "GoogleToolboxForMac/NSData+zlib (~> 2.1)" + - "GoogleToolboxForMac/NSDictionary+URLArguments (~> 2.1)" + - GoogleUtilities/UserDefaults (~> 7.0) + - GoogleUtilitiesComponents (~> 1.0) + - GTMSessionFetcher/Core (< 3.0, >= 1.1) + - MLKitVision (5.0.0): + - GoogleToolboxForMac/Logger (~> 2.1) + - "GoogleToolboxForMac/NSData+zlib (~> 2.1)" + - GTMSessionFetcher/Core (< 3.0, >= 1.1) + - MLImage (= 1.0.0-beta4) + - MLKitCommon (~> 9.0) + - mobile_scanner (3.5.6): + - Flutter + - GoogleMLKit/BarcodeScanning (~> 4.0.0) + - MTBBarcodeScanner (5.0.11) + - nanopb (2.30910.0): + - nanopb/decode (= 2.30910.0) + - nanopb/encode (= 2.30910.0) + - nanopb/decode (2.30910.0) + - nanopb/encode (2.30910.0) + - package_info_plus (0.4.5): + - Flutter + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - permission_handler_apple (9.3.0): + - Flutter + - PromisesObjC (2.4.0) + - qr_code_scanner (0.2.0): + - Flutter + - MTBBarcodeScanner + - ReachabilitySwift (5.2.3) + - rive_common (0.0.1): + - Flutter + - SDWebImage (5.19.7): + - SDWebImage/Core (= 5.19.7) + - SDWebImage/Core (5.19.7) + - SDWebImageWebPCoder (0.14.6): + - libwebp (~> 1.0) + - SDWebImage/Core (~> 5.17) + - Sentry/HybridSDK (8.36.0) + - sentry_flutter (8.9.0): + - Flutter + - FlutterMacOS + - Sentry/HybridSDK (= 8.36.0) + - share_plus (0.0.1): + - Flutter + - shared_preferences_foundation (0.0.1): + - Flutter + - FlutterMacOS + - sqflite (0.0.3): + - Flutter + - FlutterMacOS + - url_launcher_ios (0.0.1): + - Flutter + - webview_flutter_wkwebview (0.0.1): + - Flutter + +DEPENDENCIES: + - app_settings (from `.symlinks/plugins/app_settings/ios`) + - audioplayers_darwin (from `.symlinks/plugins/audioplayers_darwin/ios`) + - camera_avfoundation (from `.symlinks/plugins/camera_avfoundation/ios`) + - connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`) + - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) + - Flutter (from `Flutter`) + - flutter_custom_tabs_ios (from `.symlinks/plugins/flutter_custom_tabs_ios/ios`) + - flutter_email_sender (from `.symlinks/plugins/flutter_email_sender/ios`) + - flutter_icmp_ping (from `.symlinks/plugins/flutter_icmp_ping/ios`) + - flutter_image_compress_common (from `.symlinks/plugins/flutter_image_compress_common/ios`) + - flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`) + - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`) + - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) + - in_app_review (from `.symlinks/plugins/in_app_review/ios`) + - integration_test (from `.symlinks/plugins/integration_test/ios`) + - iso_countries (from `.symlinks/plugins/iso_countries/ios`) + - mobile_scanner (from `.symlinks/plugins/mobile_scanner/ios`) + - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) + - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) + - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) + - qr_code_scanner (from `.symlinks/plugins/qr_code_scanner/ios`) + - rive_common (from `.symlinks/plugins/rive_common/ios`) + - sentry_flutter (from `.symlinks/plugins/sentry_flutter/ios`) + - share_plus (from `.symlinks/plugins/share_plus/ios`) + - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) + - sqflite (from `.symlinks/plugins/sqflite/darwin`) + - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) + - webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`) + +SPEC REPOS: + trunk: + - GoogleDataTransport + - GoogleMLKit + - GoogleToolboxForMac + - GoogleUtilities + - GoogleUtilitiesComponents + - GTMSessionFetcher + - libwebp + - Mantle + - MLImage + - MLKitBarcodeScanning + - MLKitCommon + - MLKitVision + - MTBBarcodeScanner + - nanopb + - PromisesObjC + - ReachabilitySwift + - SDWebImage + - SDWebImageWebPCoder + - Sentry + +EXTERNAL SOURCES: + app_settings: + :path: ".symlinks/plugins/app_settings/ios" + audioplayers_darwin: + :path: ".symlinks/plugins/audioplayers_darwin/ios" + camera_avfoundation: + :path: ".symlinks/plugins/camera_avfoundation/ios" + connectivity_plus: + :path: ".symlinks/plugins/connectivity_plus/ios" + device_info_plus: + :path: ".symlinks/plugins/device_info_plus/ios" + Flutter: + :path: Flutter + flutter_custom_tabs_ios: + :path: ".symlinks/plugins/flutter_custom_tabs_ios/ios" + flutter_email_sender: + :path: ".symlinks/plugins/flutter_email_sender/ios" + flutter_icmp_ping: + :path: ".symlinks/plugins/flutter_icmp_ping/ios" + flutter_image_compress_common: + :path: ".symlinks/plugins/flutter_image_compress_common/ios" + flutter_native_splash: + :path: ".symlinks/plugins/flutter_native_splash/ios" + flutter_secure_storage: + :path: ".symlinks/plugins/flutter_secure_storage/ios" + image_picker_ios: + :path: ".symlinks/plugins/image_picker_ios/ios" + in_app_review: + :path: ".symlinks/plugins/in_app_review/ios" + integration_test: + :path: ".symlinks/plugins/integration_test/ios" + iso_countries: + :path: ".symlinks/plugins/iso_countries/ios" + mobile_scanner: + :path: ".symlinks/plugins/mobile_scanner/ios" + package_info_plus: + :path: ".symlinks/plugins/package_info_plus/ios" + path_provider_foundation: + :path: ".symlinks/plugins/path_provider_foundation/darwin" + permission_handler_apple: + :path: ".symlinks/plugins/permission_handler_apple/ios" + qr_code_scanner: + :path: ".symlinks/plugins/qr_code_scanner/ios" + rive_common: + :path: ".symlinks/plugins/rive_common/ios" + sentry_flutter: + :path: ".symlinks/plugins/sentry_flutter/ios" + share_plus: + :path: ".symlinks/plugins/share_plus/ios" + shared_preferences_foundation: + :path: ".symlinks/plugins/shared_preferences_foundation/darwin" + sqflite: + :path: ".symlinks/plugins/sqflite/darwin" + url_launcher_ios: + :path: ".symlinks/plugins/url_launcher_ios/ios" + webview_flutter_wkwebview: + :path: ".symlinks/plugins/webview_flutter_wkwebview/ios" + +SPEC CHECKSUMS: + app_settings: 017320c6a680cdc94c799949d95b84cb69389ebc + audioplayers_darwin: 877d9a4d06331c5c374595e46e16453ac7eafa40 + camera_avfoundation: dd002b0330f4981e1bbcb46ae9b62829237459a4 + connectivity_plus: bf0076dd84a130856aa636df1c71ccaff908fa1d + device_info_plus: 97af1d7e84681a90d0693e63169a5d50e0839a0d + Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 + flutter_custom_tabs_ios: a651b18786388923b62de8c0537607de87c2eccf + flutter_email_sender: 10a22605f92809a11ef52b2f412db806c6082d40 + flutter_icmp_ping: 2b159955eee0c487c766ad83fec224ae35e7c935 + flutter_image_compress_common: ec1d45c362c9d30a3f6a0426c297f47c52007e3e + flutter_native_splash: edf599c81f74d093a4daf8e17bd7a018854bc778 + flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12 + GoogleDataTransport: 6c09b596d841063d76d4288cc2d2f42cc36e1e2a + GoogleMLKit: 2bd0dc6253c4d4f227aad460f69215a504b2980e + GoogleToolboxForMac: 8bef7c7c5cf7291c687cf5354f39f9db6399ad34 + GoogleUtilities: ea963c370a38a8069cc5f7ba4ca849a60b6d7d15 + GoogleUtilitiesComponents: 679b2c881db3b615a2777504623df6122dd20afe + GTMSessionFetcher: 3a63d75eecd6aa32c2fc79f578064e1214dfdec2 + image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1 + in_app_review: 318597b3a06c22bb46dc454d56828c85f444f99d + integration_test: 252f60fa39af5e17c3aa9899d35d908a0721b573 + iso_countries: eb09d40f388e4c65e291e0bb36a701dfe7de6c74 + libwebp: 1786c9f4ff8a279e4dac1e8f385004d5fc253009 + Mantle: c5aa8794a29a022dfbbfc9799af95f477a69b62d + MLImage: 7bb7c4264164ade9bf64f679b40fb29c8f33ee9b + MLKitBarcodeScanning: 04e264482c5f3810cb89ebc134ef6b61e67db505 + MLKitCommon: c1b791c3e667091918d91bda4bba69a91011e390 + MLKitVision: 8baa5f46ee3352614169b85250574fde38c36f49 + mobile_scanner: 38dcd8a49d7d485f632b7de65e4900010187aef2 + MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb + nanopb: 438bc412db1928dac798aa6fd75726007be04262 + package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c + path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 + permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2 + PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 + qr_code_scanner: bb67d64904c3b9658ada8c402e8b4d406d5d796e + ReachabilitySwift: 7f151ff156cea1481a8411701195ac6a984f4979 + rive_common: cbbac3192af00d7341f19dae2f26298e9e37d99e + SDWebImage: 8a6b7b160b4d710e2a22b6900e25301075c34cb3 + SDWebImageWebPCoder: e38c0a70396191361d60c092933e22c20d5b1380 + Sentry: f8374b5415bc38dfb5645941b3ae31230fbeae57 + sentry_flutter: 0eb93e5279eb41e2392212afe1ccd2fecb4f8cbe + share_plus: 8875f4f2500512ea181eef553c3e27dba5135aad + shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 + sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec + url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe + webview_flutter_wkwebview: 2a23822e9039b7b1bc52e5add778e5d89ad488d1 + +PODFILE CHECKSUM: e840dd57ba2b03bcb6fdba293a27c5f82151a80a + +COCOAPODS: 1.15.2 diff --git a/packages/smooth_app/ios/Runner/AppDelegate.swift b/packages/smooth_app/ios/Runner/AppDelegate.swift index 70693e4a8c1..b6363034812 100644 --- a/packages/smooth_app/ios/Runner/AppDelegate.swift +++ b/packages/smooth_app/ios/Runner/AppDelegate.swift @@ -1,7 +1,7 @@ import UIKit import Flutter -@UIApplicationMain +@main @objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, diff --git a/packages/smooth_app/lib/background/background_task_add_price.dart b/packages/smooth_app/lib/background/background_task_add_price.dart index cc99c2084b3..f7bcad2d5e1 100644 --- a/packages/smooth_app/lib/background/background_task_add_price.dart +++ b/packages/smooth_app/lib/background/background_task_add_price.dart @@ -44,7 +44,7 @@ class BackgroundTaskAddPrice extends BackgroundTask { required this.pricesWithoutDiscount, }); - BackgroundTaskAddPrice.fromJson(Map json) + BackgroundTaskAddPrice.fromJson(super.json) : fullPath = json[_jsonTagImagePath] as String, rotationDegrees = json[_jsonTagRotation] as int? ?? 0, cropX1 = json[_jsonTagX1] as int? ?? 0, @@ -71,7 +71,7 @@ class BackgroundTaskAddPrice extends BackgroundTask { pricesWithoutDiscount = json.containsKey(_jsonTagPriceWithoutDiscount) ? [json[_jsonTagPriceWithoutDiscount] as double?] : _fromJsonListNullableDouble(json[_jsonTagPricesWithoutDiscount])!, - super.fromJson(json); + super.fromJson(); static List? _fromJsonListDouble(final List? input) { if (input == null) { @@ -158,6 +158,7 @@ class BackgroundTaskAddPrice extends BackgroundTask { final int locationOSMId; final LocationOSMType locationOSMType; final List? eraserCoordinates; + // per line final List barcodes; final List pricesAreDiscounted; diff --git a/packages/smooth_app/lib/background/background_task_barcode.dart b/packages/smooth_app/lib/background/background_task_barcode.dart index 5036cdd528c..4a70933d400 100644 --- a/packages/smooth_app/lib/background/background_task_barcode.dart +++ b/packages/smooth_app/lib/background/background_task_barcode.dart @@ -13,9 +13,9 @@ abstract class BackgroundTaskBarcode extends BackgroundTask { required this.barcode, }); - BackgroundTaskBarcode.fromJson(Map json) + BackgroundTaskBarcode.fromJson(super.json) : barcode = json[_jsonTagBarcode] as String, - super.fromJson(json); + super.fromJson(); final String barcode; diff --git a/packages/smooth_app/lib/background/background_task_crop.dart b/packages/smooth_app/lib/background/background_task_crop.dart index 9e7a4e30888..ed3327dc9ff 100644 --- a/packages/smooth_app/lib/background/background_task_crop.dart +++ b/packages/smooth_app/lib/background/background_task_crop.dart @@ -28,9 +28,9 @@ class BackgroundTaskCrop extends BackgroundTaskUpload { required this.imageId, }); - BackgroundTaskCrop.fromJson(Map json) + BackgroundTaskCrop.fromJson(super.json) : imageId = json[_jsonTagImageId] as int, - super.fromJson(json); + super.fromJson(); static const String _jsonTagImageId = 'imageId'; diff --git a/packages/smooth_app/lib/background/background_task_details.dart b/packages/smooth_app/lib/background/background_task_details.dart index 7025653e999..dcfc0bf8c4e 100644 --- a/packages/smooth_app/lib/background/background_task_details.dart +++ b/packages/smooth_app/lib/background/background_task_details.dart @@ -42,9 +42,9 @@ class BackgroundTaskDetails extends BackgroundTaskBarcode required this.inputMap, }); - BackgroundTaskDetails.fromJson(Map json) + BackgroundTaskDetails.fromJson(super.json) : inputMap = json[_jsonTagInputMap] as String, - super.fromJson(json); + super.fromJson(); static const String _jsonTagInputMap = 'inputMap'; diff --git a/packages/smooth_app/lib/background/background_task_download_products.dart b/packages/smooth_app/lib/background/background_task_download_products.dart index a600eadf314..99244ed3cd8 100644 --- a/packages/smooth_app/lib/background/background_task_download_products.dart +++ b/packages/smooth_app/lib/background/background_task_download_products.dart @@ -21,9 +21,9 @@ class BackgroundTaskDownloadProducts extends BackgroundTaskProgressing { required this.downloadFlag, }); - BackgroundTaskDownloadProducts.fromJson(Map json) + BackgroundTaskDownloadProducts.fromJson(super.json) : downloadFlag = json[_jsonTagDownloadFlag] as int, - super.fromJson(json); + super.fromJson(); /// Download flag. Normal case: 0, meaning all fields are downloaded. final int downloadFlag; diff --git a/packages/smooth_app/lib/background/background_task_full_refresh.dart b/packages/smooth_app/lib/background/background_task_full_refresh.dart index 0742104eca6..b11ddd1c030 100644 --- a/packages/smooth_app/lib/background/background_task_full_refresh.dart +++ b/packages/smooth_app/lib/background/background_task_full_refresh.dart @@ -20,8 +20,7 @@ class BackgroundTaskFullRefresh extends BackgroundTaskPaged { required super.pageSize, }); - BackgroundTaskFullRefresh.fromJson(Map json) - : super.fromJson(json); + BackgroundTaskFullRefresh.fromJson(super.json) : super.fromJson(); static const OperationType _operationType = OperationType.fullRefresh; diff --git a/packages/smooth_app/lib/background/background_task_hunger_games.dart b/packages/smooth_app/lib/background/background_task_hunger_games.dart index 433c96fe731..283297599ac 100644 --- a/packages/smooth_app/lib/background/background_task_hunger_games.dart +++ b/packages/smooth_app/lib/background/background_task_hunger_games.dart @@ -18,10 +18,10 @@ class BackgroundTaskHungerGames extends BackgroundTaskBarcode { required this.insightAnnotation, }); - BackgroundTaskHungerGames.fromJson(Map json) + BackgroundTaskHungerGames.fromJson(super.json) : insightId = json[_jsonTagInsightId] as String, insightAnnotation = json[_jsonTagInsightAnnotation] as int, - super.fromJson(json); + super.fromJson(); static const String _jsonTagInsightId = 'insightId'; static const String _jsonTagInsightAnnotation = 'insightAnnotation'; diff --git a/packages/smooth_app/lib/background/background_task_image.dart b/packages/smooth_app/lib/background/background_task_image.dart index be4bcb5b207..9c5ebbf221c 100644 --- a/packages/smooth_app/lib/background/background_task_image.dart +++ b/packages/smooth_app/lib/background/background_task_image.dart @@ -34,9 +34,9 @@ class BackgroundTaskImage extends BackgroundTaskUpload { required this.fullPath, }); - BackgroundTaskImage.fromJson(Map json) + BackgroundTaskImage.fromJson(super.json) : fullPath = json[_jsonTagImagePath] as String, - super.fromJson(json); + super.fromJson(); static const String _jsonTagImagePath = 'imagePath'; diff --git a/packages/smooth_app/lib/background/background_task_language_refresh.dart b/packages/smooth_app/lib/background/background_task_language_refresh.dart index 1c30de9aee0..cec03a1f8aa 100644 --- a/packages/smooth_app/lib/background/background_task_language_refresh.dart +++ b/packages/smooth_app/lib/background/background_task_language_refresh.dart @@ -16,9 +16,9 @@ class BackgroundTaskLanguageRefresh extends BackgroundTask { required this.excludeBarcodes, }); - BackgroundTaskLanguageRefresh.fromJson(Map json) + BackgroundTaskLanguageRefresh.fromJson(super.json) : excludeBarcodes = _getStringList(json, _jsonTagExcludeBarcodes), - super.fromJson(json); + super.fromJson(); static List _getStringList( final Map json, final String tag) { diff --git a/packages/smooth_app/lib/background/background_task_offline.dart b/packages/smooth_app/lib/background/background_task_offline.dart index 0e345f8c8e4..a8e2b03929f 100644 --- a/packages/smooth_app/lib/background/background_task_offline.dart +++ b/packages/smooth_app/lib/background/background_task_offline.dart @@ -19,8 +19,7 @@ class BackgroundTaskOffline extends BackgroundTaskProgressing { required super.totalSize, }); - BackgroundTaskOffline.fromJson(Map json) - : super.fromJson(json); + BackgroundTaskOffline.fromJson(super.json) : super.fromJson(); static const OperationType _operationType = OperationType.offline; diff --git a/packages/smooth_app/lib/background/background_task_paged.dart b/packages/smooth_app/lib/background/background_task_paged.dart index b51fa0e0efc..a4844202cc7 100644 --- a/packages/smooth_app/lib/background/background_task_paged.dart +++ b/packages/smooth_app/lib/background/background_task_paged.dart @@ -9,9 +9,9 @@ abstract class BackgroundTaskPaged extends BackgroundTask { required this.pageSize, }); - BackgroundTaskPaged.fromJson(Map json) + BackgroundTaskPaged.fromJson(super.json) : pageSize = json[_jsonTagPageSize] as int, - super.fromJson(json); + super.fromJson(); final int pageSize; diff --git a/packages/smooth_app/lib/background/background_task_progressing.dart b/packages/smooth_app/lib/background/background_task_progressing.dart index 74d9985c7e3..dca7c12b3ac 100644 --- a/packages/smooth_app/lib/background/background_task_progressing.dart +++ b/packages/smooth_app/lib/background/background_task_progressing.dart @@ -11,10 +11,10 @@ abstract class BackgroundTaskProgressing extends BackgroundTaskPaged { required this.totalSize, }); - BackgroundTaskProgressing.fromJson(Map json) + BackgroundTaskProgressing.fromJson(super.json) : work = json[_jsonTagWork] as String, totalSize = json[_jsonTagTotalSize] as int, - super.fromJson(json); + super.fromJson(); final String work; final int totalSize; diff --git a/packages/smooth_app/lib/background/background_task_refresh_later.dart b/packages/smooth_app/lib/background/background_task_refresh_later.dart index c2f7176d3ea..cf21b6792a4 100644 --- a/packages/smooth_app/lib/background/background_task_refresh_later.dart +++ b/packages/smooth_app/lib/background/background_task_refresh_later.dart @@ -18,9 +18,9 @@ class BackgroundTaskRefreshLater extends BackgroundTaskBarcode { required this.timestamp, }); - BackgroundTaskRefreshLater.fromJson(Map json) + BackgroundTaskRefreshLater.fromJson(super.json) : timestamp = json[_jsonTagTimestamp] as int, - super.fromJson(json); + super.fromJson(); static const String _jsonTagTimestamp = 'timestamp'; diff --git a/packages/smooth_app/lib/background/background_task_top_barcodes.dart b/packages/smooth_app/lib/background/background_task_top_barcodes.dart index 4b0a5eda80a..bf00f099e56 100644 --- a/packages/smooth_app/lib/background/background_task_top_barcodes.dart +++ b/packages/smooth_app/lib/background/background_task_top_barcodes.dart @@ -21,9 +21,9 @@ class BackgroundTaskTopBarcodes extends BackgroundTaskProgressing { required this.pageNumber, }); - BackgroundTaskTopBarcodes.fromJson(Map json) + BackgroundTaskTopBarcodes.fromJson(super.json) : pageNumber = json[_jsonTagPageNumber] as int? ?? 1, - super.fromJson(json); + super.fromJson(); final int pageNumber; diff --git a/packages/smooth_app/lib/background/background_task_unselect.dart b/packages/smooth_app/lib/background/background_task_unselect.dart index f952babbdd5..689d0d23583 100644 --- a/packages/smooth_app/lib/background/background_task_unselect.dart +++ b/packages/smooth_app/lib/background/background_task_unselect.dart @@ -23,9 +23,9 @@ class BackgroundTaskUnselect extends BackgroundTaskBarcode required this.imageField, }); - BackgroundTaskUnselect.fromJson(Map json) + BackgroundTaskUnselect.fromJson(super.json) : imageField = json[_jsonTagImageField] as String, - super.fromJson(json); + super.fromJson(); static const String _jsonTagImageField = 'imageField'; diff --git a/packages/smooth_app/lib/background/background_task_upload.dart b/packages/smooth_app/lib/background/background_task_upload.dart index 7d069f0f71c..112446f49fb 100644 --- a/packages/smooth_app/lib/background/background_task_upload.dart +++ b/packages/smooth_app/lib/background/background_task_upload.dart @@ -1,5 +1,6 @@ import 'dart:async'; import 'dart:io'; + import 'package:flutter/material.dart'; import 'package:openfoodfacts/openfoodfacts.dart'; import 'package:path_provider/path_provider.dart'; @@ -26,7 +27,7 @@ abstract class BackgroundTaskUpload extends BackgroundTaskBarcode required this.cropY2, }); - BackgroundTaskUpload.fromJson(Map json) + BackgroundTaskUpload.fromJson(super.json) : imageField = json[_jsonTagImageField] as String, croppedPath = json[_jsonTagCroppedPath] as String, rotationDegrees = json[_jsonTagRotation] as int? ?? 0, @@ -34,7 +35,7 @@ abstract class BackgroundTaskUpload extends BackgroundTaskBarcode cropY1 = json[_jsonTagY1] as int? ?? 0, cropX2 = json[_jsonTagX2] as int? ?? 0, cropY2 = json[_jsonTagY2] as int? ?? 0, - super.fromJson(json); + super.fromJson(); final String imageField; final String croppedPath; diff --git a/packages/smooth_app/lib/data_models/database_product_list_supplier.dart b/packages/smooth_app/lib/data_models/database_product_list_supplier.dart index 5472ae8fb13..cd2fe750f93 100644 --- a/packages/smooth_app/lib/data_models/database_product_list_supplier.dart +++ b/packages/smooth_app/lib/data_models/database_product_list_supplier.dart @@ -2,16 +2,14 @@ import 'package:smooth_app/data_models/product_list.dart'; import 'package:smooth_app/data_models/product_list_supplier.dart'; import 'package:smooth_app/data_models/query_product_list_supplier.dart'; import 'package:smooth_app/database/dao_product_list.dart'; -import 'package:smooth_app/database/local_database.dart'; -import 'package:smooth_app/query/paged_product_query.dart'; /// Supplier of previous back-end results now stored in the local database. class DatabaseProductListSupplier extends ProductListSupplier { DatabaseProductListSupplier( - final PagedProductQuery pagedProductQuery, - final LocalDatabase localDatabase, + super.pagedProductQuery, + super.localDatabase, final int timestamp, - ) : super(pagedProductQuery, localDatabase, timestamp: timestamp); + ) : super(timestamp: timestamp); /// Loads all results page after page. @override diff --git a/packages/smooth_app/lib/data_models/news_feed/newsfeed_json.dart b/packages/smooth_app/lib/data_models/news_feed/newsfeed_json.dart index 936c0f3e199..c8cf21d8d60 100644 --- a/packages/smooth_app/lib/data_models/news_feed/newsfeed_json.dart +++ b/packages/smooth_app/lib/data_models/news_feed/newsfeed_json.dart @@ -209,13 +209,13 @@ class _TagLineItemNewsTranslation { } class _TagLineItemNewsTranslationDefault extends _TagLineItemNewsTranslation { - _TagLineItemNewsTranslationDefault.fromJson(Map json) + _TagLineItemNewsTranslationDefault.fromJson(super.json) : assert((json['title'] as String).isNotEmpty), assert((json['message'] as String).isNotEmpty), assert(json['image'] == null || ((json['image'] as Map)['url'] as String) .isNotEmpty), - super.fromJson(json); + super.fromJson(); } class _TagLineNewsImage { diff --git a/packages/smooth_app/lib/data_models/onboarding_data_product.dart b/packages/smooth_app/lib/data_models/onboarding_data_product.dart index 13f4f29cff8..c66a77b4a1e 100644 --- a/packages/smooth_app/lib/data_models/onboarding_data_product.dart +++ b/packages/smooth_app/lib/data_models/onboarding_data_product.dart @@ -11,9 +11,9 @@ import 'package:smooth_app/query/product_query.dart'; /// Helper around a product we download, store and reuse at onboarding. class OnboardingDataProduct extends AbstractOnboardingData { OnboardingDataProduct( - final LocalDatabase localDatabase, + super.localDatabase, this.assetPath, - ) : super(localDatabase); + ); /// Was computed from [downloadDataString] in en_US /// diff --git a/packages/smooth_app/lib/data_models/product_preferences.dart b/packages/smooth_app/lib/data_models/product_preferences.dart index 242b39d555b..346e6c54f36 100644 --- a/packages/smooth_app/lib/data_models/product_preferences.dart +++ b/packages/smooth_app/lib/data_models/product_preferences.dart @@ -9,9 +9,9 @@ import 'package:smooth_app/query/product_query.dart'; class ProductPreferences extends ProductPreferencesManager with ChangeNotifier { ProductPreferences( - final ProductPreferencesSelection productPreferencesSelection, { + super.productPreferencesSelection, { this.daoString, - }) : super(productPreferencesSelection); + }); final DaoString? daoString; diff --git a/packages/smooth_app/lib/data_models/query_product_list_supplier.dart b/packages/smooth_app/lib/data_models/query_product_list_supplier.dart index 8d624b2058e..c089faf0d4b 100644 --- a/packages/smooth_app/lib/data_models/query_product_list_supplier.dart +++ b/packages/smooth_app/lib/data_models/query_product_list_supplier.dart @@ -3,15 +3,13 @@ import 'package:smooth_app/data_models/product_list.dart'; import 'package:smooth_app/data_models/product_list_supplier.dart'; import 'package:smooth_app/database/dao_product.dart'; import 'package:smooth_app/database/dao_product_list.dart'; -import 'package:smooth_app/database/local_database.dart'; -import 'package:smooth_app/query/paged_product_query.dart'; /// [ProductListSupplier] with a server query flavor class QueryProductListSupplier extends ProductListSupplier { QueryProductListSupplier( - final PagedProductQuery productQuery, - final LocalDatabase localDatabase, - ) : super(productQuery, localDatabase); + super.productQuery, + super.localDatabase, + ); @override Future asyncLoad() async { diff --git a/packages/smooth_app/lib/database/dao_hive_product.dart b/packages/smooth_app/lib/database/dao_hive_product.dart index 40aee8a6515..66639af5649 100644 --- a/packages/smooth_app/lib/database/dao_hive_product.dart +++ b/packages/smooth_app/lib/database/dao_hive_product.dart @@ -1,9 +1,9 @@ import 'dart:async'; import 'dart:convert'; + import 'package:hive/hive.dart'; import 'package:openfoodfacts/openfoodfacts.dart'; import 'package:smooth_app/database/abstract_dao.dart'; -import 'package:smooth_app/database/local_database.dart'; /// Hive type adapter for [Product] class _ProductAdapter extends TypeAdapter { @@ -25,7 +25,7 @@ class _ProductAdapter extends TypeAdapter { @Deprecated('use [DaoProduct] instead') class DaoHiveProduct extends AbstractDao { @Deprecated('use [DaoProduct] instead') - DaoHiveProduct(final LocalDatabase localDatabase) : super(localDatabase); + DaoHiveProduct(super.localDatabase); static const String _hiveBoxName = 'products'; diff --git a/packages/smooth_app/lib/database/dao_instant_string.dart b/packages/smooth_app/lib/database/dao_instant_string.dart index caf08b36795..406414f4ec8 100644 --- a/packages/smooth_app/lib/database/dao_instant_string.dart +++ b/packages/smooth_app/lib/database/dao_instant_string.dart @@ -1,10 +1,9 @@ import 'package:hive_flutter/hive_flutter.dart'; import 'package:smooth_app/database/abstract_dao.dart'; -import 'package:smooth_app/database/local_database.dart'; /// Where we store strings that need INSTANT access (= not lazy, no await). class DaoInstantString extends AbstractDao { - DaoInstantString(final LocalDatabase localDatabase) : super(localDatabase); + DaoInstantString(super.localDatabase); static const String _hiveBoxName = 'instantString'; diff --git a/packages/smooth_app/lib/database/dao_int.dart b/packages/smooth_app/lib/database/dao_int.dart index 8cec1f50679..dc2db1ed2f3 100644 --- a/packages/smooth_app/lib/database/dao_int.dart +++ b/packages/smooth_app/lib/database/dao_int.dart @@ -1,10 +1,9 @@ import 'package:hive_flutter/hive_flutter.dart'; import 'package:smooth_app/database/abstract_dao.dart'; -import 'package:smooth_app/database/local_database.dart'; /// Where we store ints. class DaoInt extends AbstractDao { - DaoInt(final LocalDatabase localDatabase) : super(localDatabase); + DaoInt(super.localDatabase); static const String _hiveBoxName = 'int'; diff --git a/packages/smooth_app/lib/database/dao_product_list.dart b/packages/smooth_app/lib/database/dao_product_list.dart index b851c657a83..2ce0883b9ce 100644 --- a/packages/smooth_app/lib/database/dao_product_list.dart +++ b/packages/smooth_app/lib/database/dao_product_list.dart @@ -71,7 +71,7 @@ class _BarcodeListAdapter extends TypeAdapter<_BarcodeList> { } class DaoProductList extends AbstractDao { - DaoProductList(final LocalDatabase localDatabase) : super(localDatabase); + DaoProductList(super.localDatabase); static const String _hiveBoxName = 'barcodeLists'; static const String _keySeparator = '::'; diff --git a/packages/smooth_app/lib/database/dao_string.dart b/packages/smooth_app/lib/database/dao_string.dart index ac092a9ffe5..c5d27a7d08a 100644 --- a/packages/smooth_app/lib/database/dao_string.dart +++ b/packages/smooth_app/lib/database/dao_string.dart @@ -1,6 +1,5 @@ import 'package:hive_flutter/hive_flutter.dart'; import 'package:smooth_app/database/abstract_dao.dart'; -import 'package:smooth_app/database/local_database.dart'; /// Where we store strings. /// @@ -9,7 +8,7 @@ import 'package:smooth_app/database/local_database.dart'; /// we're talking about large data (several 10Kb) that we almost never need, /// and that should not make the app boot slower. class DaoString extends AbstractDao { - DaoString(final LocalDatabase localDatabase) : super(localDatabase); + DaoString(super.localDatabase); static const String _hiveBoxName = 'string'; diff --git a/packages/smooth_app/lib/database/dao_string_list.dart b/packages/smooth_app/lib/database/dao_string_list.dart index 57be9377a3f..7a07ed1419e 100644 --- a/packages/smooth_app/lib/database/dao_string_list.dart +++ b/packages/smooth_app/lib/database/dao_string_list.dart @@ -1,10 +1,9 @@ import 'package:hive_flutter/hive_flutter.dart'; import 'package:smooth_app/database/abstract_dao.dart'; -import 'package:smooth_app/database/local_database.dart'; /// Where we store string lists with unique items. class DaoStringList extends AbstractDao { - DaoStringList(final LocalDatabase localDatabase) : super(localDatabase); + DaoStringList(super.localDatabase); static const String _hiveBoxName = 'stringList'; diff --git a/packages/smooth_app/lib/database/dao_string_list_map.dart b/packages/smooth_app/lib/database/dao_string_list_map.dart index c97354d80b9..57b60ea2e32 100644 --- a/packages/smooth_app/lib/database/dao_string_list_map.dart +++ b/packages/smooth_app/lib/database/dao_string_list_map.dart @@ -1,9 +1,8 @@ import 'package:hive_flutter/hive_flutter.dart'; import 'package:smooth_app/database/abstract_dao.dart'; -import 'package:smooth_app/database/local_database.dart'; class DaoStringListMap extends AbstractDao { - DaoStringListMap(final LocalDatabase localDatabase) : super(localDatabase); + DaoStringListMap(super.localDatabase); static const String _hiveBoxName = 'robotoffMap'; static const String _key = 'votedHistory'; diff --git a/packages/smooth_app/lib/database/dao_transient_operation.dart b/packages/smooth_app/lib/database/dao_transient_operation.dart index b0d9d16c861..44660aa029b 100644 --- a/packages/smooth_app/lib/database/dao_transient_operation.dart +++ b/packages/smooth_app/lib/database/dao_transient_operation.dart @@ -1,9 +1,9 @@ import 'dart:async'; import 'dart:convert'; + import 'package:hive/hive.dart'; import 'package:openfoodfacts/openfoodfacts.dart'; import 'package:smooth_app/database/abstract_dao.dart'; -import 'package:smooth_app/database/local_database.dart'; /// Transient operation: a minimalist [product] with a [key]. /// @@ -54,8 +54,7 @@ class _ProductAdapter extends TypeAdapter { /// * it's supposed to be little anyway, so we can load it at startup /// * the way we use it may sometimes require instant access (no `await`) class DaoTransientOperation extends AbstractDao { - DaoTransientOperation(final LocalDatabase localDatabase) - : super(localDatabase); + DaoTransientOperation(super.localDatabase); static const String _hiveBoxName = 'transientOperations'; diff --git a/packages/smooth_app/lib/generic_lib/bottom_sheets/smooth_draggable_bottom_sheet.dart b/packages/smooth_app/lib/generic_lib/bottom_sheets/smooth_draggable_bottom_sheet.dart index 4b33885c2f8..d23491686d3 100644 --- a/packages/smooth_app/lib/generic_lib/bottom_sheets/smooth_draggable_bottom_sheet.dart +++ b/packages/smooth_app/lib/generic_lib/bottom_sheets/smooth_draggable_bottom_sheet.dart @@ -3,7 +3,7 @@ import 'package:flutter/rendering.dart'; class SmoothDraggableBottomSheet extends StatefulWidget { const SmoothDraggableBottomSheet({ - Key? key, + super.key, required this.headerBuilder, required this.headerHeight, required this.bodyBuilder, @@ -13,8 +13,7 @@ class SmoothDraggableBottomSheet extends StatefulWidget { this.animationController, this.bottomSheetColor, this.draggableScrollableController, - }) : assert(maxHeightFraction > 0.0 && maxHeightFraction <= 1.0), - super(key: key); + }) : assert(maxHeightFraction > 0.0 && maxHeightFraction <= 1.0); final double initHeightFraction; final double maxHeightFraction; @@ -152,8 +151,7 @@ class _SmoothDraggableContent extends StatefulWidget { required this.headerHeight, required this.headerBuilder, required this.bodyBuilder, - Key? key, - }) : super(key: key); + }); final WidgetBuilder headerBuilder; final double headerHeight; diff --git a/packages/smooth_app/lib/generic_lib/bottom_sheets/smooth_draggable_bottom_sheet_route.dart b/packages/smooth_app/lib/generic_lib/bottom_sheets/smooth_draggable_bottom_sheet_route.dart index 8a20253362e..3609f74faf5 100644 --- a/packages/smooth_app/lib/generic_lib/bottom_sheets/smooth_draggable_bottom_sheet_route.dart +++ b/packages/smooth_app/lib/generic_lib/bottom_sheets/smooth_draggable_bottom_sheet_route.dart @@ -40,8 +40,8 @@ class _FlexibleBottomSheetRoute extends PopupRoute { required this.borderRadius, this.barrierLabel, this.bottomSheetBackgroundColor, - RouteSettings? settings, - }) : super(settings: settings); + super.settings, + }); final WidgetBuilder headerBuilder; final double headerHeight; diff --git a/packages/smooth_app/lib/generic_lib/widgets/smooth_back_button.dart b/packages/smooth_app/lib/generic_lib/widgets/smooth_back_button.dart index ca4e99636d1..74df9bd1671 100644 --- a/packages/smooth_app/lib/generic_lib/widgets/smooth_back_button.dart +++ b/packages/smooth_app/lib/generic_lib/widgets/smooth_back_button.dart @@ -9,8 +9,8 @@ class SmoothBackButton extends StatelessWidget { const SmoothBackButton({ this.onPressed, this.iconColor, - Key? key, - }) : super(key: key); + super.key, + }); final VoidCallback? onPressed; final Color? iconColor; diff --git a/packages/smooth_app/lib/generic_lib/widgets/smooth_list_tile_card.dart b/packages/smooth_app/lib/generic_lib/widgets/smooth_list_tile_card.dart index 68184d88247..0b1c5b60f7e 100644 --- a/packages/smooth_app/lib/generic_lib/widgets/smooth_list_tile_card.dart +++ b/packages/smooth_app/lib/generic_lib/widgets/smooth_list_tile_card.dart @@ -10,8 +10,8 @@ class SmoothListTileCard extends StatelessWidget { this.subtitle, this.onTap, this.leading, - Key? key, - }) : super(key: key); + super.key, + }); /// Displays a [ListTile] inside a [SmoothCard] with a leading [Column] /// containing the specified [icon] diff --git a/packages/smooth_app/lib/helpers/physics.dart b/packages/smooth_app/lib/helpers/physics.dart index 8a3b0e30bed..9a9e47ec60d 100644 --- a/packages/smooth_app/lib/helpers/physics.dart +++ b/packages/smooth_app/lib/helpers/physics.dart @@ -85,11 +85,14 @@ class _VerticalClampScrollState extends State { if (scrollTo != null) { Future.delayed(Duration.zero, () { - context.read().animateTo( - scrollTo!, - curve: Curves.easeOutCubic, - duration: const Duration(milliseconds: 500), - ); + if (context.mounted) { + // ignore: use_build_context_synchronously + context.read().animateTo( + scrollTo!, + curve: Curves.easeOutCubic, + duration: const Duration(milliseconds: 500), + ); + } }); } } diff --git a/packages/smooth_app/lib/helpers/ui_helpers.dart b/packages/smooth_app/lib/helpers/ui_helpers.dart index ca03682d7fb..72d85bdc576 100644 --- a/packages/smooth_app/lib/helpers/ui_helpers.dart +++ b/packages/smooth_app/lib/helpers/ui_helpers.dart @@ -1,8 +1,9 @@ -/// Contains UI related constant that are shared across the entire app. import 'package:flutter/material.dart'; import 'package:openfoodfacts/openfoodfacts.dart'; import 'package:smooth_app/generic_lib/design_constants.dart'; +/// Contains UI related constant that are shared across the entire app. + /// Main attributes, to be displayed on top const List SCORE_ATTRIBUTE_IDS = [ Attribute.ATTRIBUTE_NUTRISCORE, diff --git a/packages/smooth_app/lib/pages/hunger_games/question_answers_options.dart b/packages/smooth_app/lib/pages/hunger_games/question_answers_options.dart index e1ee8172f20..b0f26c9437a 100755 --- a/packages/smooth_app/lib/pages/hunger_games/question_answers_options.dart +++ b/packages/smooth_app/lib/pages/hunger_games/question_answers_options.dart @@ -14,9 +14,9 @@ const Color _maybeTextColor = Colors.black; class QuestionAnswersOptions extends StatelessWidget { const QuestionAnswersOptions( this.question, { - Key? key, + super.key, required this.onAnswer, - }) : super(key: key); + }); final RobotoffQuestion question; final Function(InsightAnnotation) onAnswer; diff --git a/packages/smooth_app/lib/pages/navigator/app_navigator.dart b/packages/smooth_app/lib/pages/navigator/app_navigator.dart index 44c9086a5f7..e28f03f64e2 100644 --- a/packages/smooth_app/lib/pages/navigator/app_navigator.dart +++ b/packages/smooth_app/lib/pages/navigator/app_navigator.dart @@ -37,13 +37,12 @@ import 'package:smooth_app/query/product_query.dart'; /// /!\ [GoRouter] doesn't support [maybePop] or returning a result from a push. class AppNavigator extends InheritedWidget { AppNavigator({ - Key? key, + super.key, List? observers, - required Widget child, - }) : _router = _SmoothGoRouter( + required super.child, + }) : _router = _SmoothGoRouter( observers: observers, - ), - super(key: key, child: child); + ); // GoRouter is never accessible directly final _SmoothGoRouter _router; diff --git a/packages/smooth_app/lib/pages/navigator/error_page.dart b/packages/smooth_app/lib/pages/navigator/error_page.dart index 69a9d869293..caa11a39e01 100644 --- a/packages/smooth_app/lib/pages/navigator/error_page.dart +++ b/packages/smooth_app/lib/pages/navigator/error_page.dart @@ -9,8 +9,8 @@ import 'package:smooth_app/pages/navigator/app_navigator.dart'; class ErrorPage extends StatelessWidget { const ErrorPage({ required this.url, - Key? key, - }) : super(key: key); + super.key, + }); final String url; diff --git a/packages/smooth_app/lib/pages/navigator/external_page.dart b/packages/smooth_app/lib/pages/navigator/external_page.dart index d28bd9bb2b0..ed725da3de4 100644 --- a/packages/smooth_app/lib/pages/navigator/external_page.dart +++ b/packages/smooth_app/lib/pages/navigator/external_page.dart @@ -18,9 +18,10 @@ import 'package:smooth_app/services/smooth_services.dart'; /// (eg: de.openfoodfacts.org), that's why we try to guess it with the country /// and the locale of the user class ExternalPage extends StatefulWidget { - const ExternalPage({required this.path, Key? key}) - : assert(path != ''), - super(key: key); + const ExternalPage({ + required this.path, + super.key, + }) : assert(path != ''); final String path; diff --git a/packages/smooth_app/lib/pages/offline_data_page.dart b/packages/smooth_app/lib/pages/offline_data_page.dart index 5cc440ffe93..ee3a26d37e8 100644 --- a/packages/smooth_app/lib/pages/offline_data_page.dart +++ b/packages/smooth_app/lib/pages/offline_data_page.dart @@ -14,7 +14,7 @@ import 'package:smooth_app/widgets/smooth_app_bar.dart'; import 'package:smooth_app/widgets/smooth_scaffold.dart'; class OfflineDataPage extends StatefulWidget { - const OfflineDataPage({Key? key}) : super(key: key); + const OfflineDataPage({super.key}); @override State createState() => _OfflineDataPageState(); @@ -117,9 +117,9 @@ class _OfflineDataPageState extends State { // in the database and the size of the database class _StatsWidget extends StatelessWidget { const _StatsWidget({ - Key? key, required this.daoProduct, - }) : super(key: key); + }); + final DaoProduct daoProduct; @override @@ -164,12 +164,12 @@ class _StatsWidget extends StatelessWidget { // and a trailing widget and an onTap callback for OfflineDataPage class _OfflinePageListTile extends StatelessWidget { const _OfflinePageListTile({ - Key? key, required this.title, required this.subtitle, required this.trailing, required this.onTap, - }) : super(key: key); + }); + final String title; final String subtitle; final Widget trailing; diff --git a/packages/smooth_app/lib/pages/preferences/user_preferences_account.dart b/packages/smooth_app/lib/pages/preferences/user_preferences_account.dart index 72e31af9874..f89897d60f9 100644 --- a/packages/smooth_app/lib/pages/preferences/user_preferences_account.dart +++ b/packages/smooth_app/lib/pages/preferences/user_preferences_account.dart @@ -1,9 +1,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:openfoodfacts/openfoodfacts.dart'; import 'package:provider/provider.dart'; -import 'package:smooth_app/data_models/preferences/user_preferences.dart'; import 'package:smooth_app/data_models/user_management_provider.dart'; import 'package:smooth_app/database/local_database.dart'; import 'package:smooth_app/generic_lib/buttons/smooth_simple_button.dart'; @@ -34,16 +32,11 @@ import 'package:smooth_app/query/product_query.dart'; class UserPreferencesAccount extends AbstractUserPreferences { UserPreferencesAccount({ - required final BuildContext context, - required final UserPreferences userPreferences, - required final AppLocalizations appLocalizations, - required final ThemeData themeData, - }) : super( - context: context, - userPreferences: userPreferences, - appLocalizations: appLocalizations, - themeData: themeData, - ); + required super.context, + required super.userPreferences, + required super.appLocalizations, + required super.themeData, + }); @override PreferencePageType getPreferencePageType() => PreferencePageType.ACCOUNT; diff --git a/packages/smooth_app/lib/pages/preferences/user_preferences_connect.dart b/packages/smooth_app/lib/pages/preferences/user_preferences_connect.dart index 1e4e0f169f5..2ed22a33945 100644 --- a/packages/smooth_app/lib/pages/preferences/user_preferences_connect.dart +++ b/packages/smooth_app/lib/pages/preferences/user_preferences_connect.dart @@ -5,11 +5,9 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_email_sender/flutter_email_sender.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:openfoodfacts/openfoodfacts.dart'; import 'package:package_info_plus/package_info_plus.dart'; -import 'package:smooth_app/data_models/preferences/user_preferences.dart'; import 'package:smooth_app/generic_lib/design_constants.dart'; import 'package:smooth_app/generic_lib/dialogs/smooth_alert_dialog.dart'; import 'package:smooth_app/helpers/app_helper.dart'; @@ -24,16 +22,11 @@ import 'package:smooth_app/services/smooth_services.dart'; /// Display of "Connect" for the preferences page. class UserPreferencesConnect extends AbstractUserPreferences { UserPreferencesConnect({ - required final BuildContext context, - required final UserPreferences userPreferences, - required final AppLocalizations appLocalizations, - required final ThemeData themeData, - }) : super( - context: context, - userPreferences: userPreferences, - appLocalizations: appLocalizations, - themeData: themeData, - ); + required super.context, + required super.userPreferences, + required super.appLocalizations, + required super.themeData, + }); @override PreferencePageType getPreferencePageType() => PreferencePageType.CONNECT; diff --git a/packages/smooth_app/lib/pages/preferences/user_preferences_contribute.dart b/packages/smooth_app/lib/pages/preferences/user_preferences_contribute.dart index 12ca3580a73..5807d949c80 100644 --- a/packages/smooth_app/lib/pages/preferences/user_preferences_contribute.dart +++ b/packages/smooth_app/lib/pages/preferences/user_preferences_contribute.dart @@ -27,16 +27,11 @@ import 'package:smooth_app/query/product_query.dart'; /// Display of "Contribute" for the preferences page. class UserPreferencesContribute extends AbstractUserPreferences { UserPreferencesContribute({ - required final BuildContext context, - required final UserPreferences userPreferences, - required final AppLocalizations appLocalizations, - required final ThemeData themeData, - }) : super( - context: context, - userPreferences: userPreferences, - appLocalizations: appLocalizations, - themeData: themeData, - ); + required super.context, + required super.userPreferences, + required super.appLocalizations, + required super.themeData, + }); @override PreferencePageType getPreferencePageType() => PreferencePageType.CONTRIBUTE; @@ -288,6 +283,7 @@ class UserPreferencesContribute extends AbstractUserPreferences { context: context, builder: (BuildContext context) => _ContributorsDialog(), ); + Future _hungerGames() async { // Track the hunger game analytics event AnalyticsHelper.trackEvent( diff --git a/packages/smooth_app/lib/pages/preferences/user_preferences_dev_debug_info.dart b/packages/smooth_app/lib/pages/preferences/user_preferences_dev_debug_info.dart index 07d846001da..38507150fa9 100644 --- a/packages/smooth_app/lib/pages/preferences/user_preferences_dev_debug_info.dart +++ b/packages/smooth_app/lib/pages/preferences/user_preferences_dev_debug_info.dart @@ -12,7 +12,9 @@ import 'package:smooth_app/widgets/smooth_app_bar.dart'; import 'package:smooth_app/widgets/smooth_scaffold.dart'; class UserPreferencesDebugInfo extends StatefulWidget { - const UserPreferencesDebugInfo({Key? key}) : super(key: key); + const UserPreferencesDebugInfo({ + super.key, + }); @override State createState() => diff --git a/packages/smooth_app/lib/pages/preferences/user_preferences_dev_mode.dart b/packages/smooth_app/lib/pages/preferences/user_preferences_dev_mode.dart index 5e65b3ff776..b74813c7f75 100644 --- a/packages/smooth_app/lib/pages/preferences/user_preferences_dev_mode.dart +++ b/packages/smooth_app/lib/pages/preferences/user_preferences_dev_mode.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:intl/intl.dart'; import 'package:openfoodfacts/openfoodfacts.dart'; @@ -9,7 +8,6 @@ import 'package:smooth_app/background/background_task_badge.dart'; import 'package:smooth_app/background/background_task_language_refresh.dart'; import 'package:smooth_app/data_models/continuous_scan_model.dart'; import 'package:smooth_app/data_models/news_feed/newsfeed_provider.dart'; -import 'package:smooth_app/data_models/preferences/user_preferences.dart'; import 'package:smooth_app/data_models/product_list.dart'; import 'package:smooth_app/database/dao_osm_location.dart'; import 'package:smooth_app/database/dao_product.dart'; @@ -36,16 +34,11 @@ import 'package:smooth_app/query/product_query.dart'; /// Settings => FAQ => Develop => Clicking switch class UserPreferencesDevMode extends AbstractUserPreferences { UserPreferencesDevMode({ - required final BuildContext context, - required final UserPreferences userPreferences, - required final AppLocalizations appLocalizations, - required final ThemeData themeData, - }) : super( - context: context, - userPreferences: userPreferences, - appLocalizations: appLocalizations, - themeData: themeData, - ); + required super.context, + required super.userPreferences, + required super.appLocalizations, + required super.themeData, + }); static const String userPreferencesFlagProd = '__devWorkingOnProd'; static const String userPreferencesFlagPriceProd = '__devWorkingOnPricesProd'; diff --git a/packages/smooth_app/lib/pages/preferences/user_preferences_faq.dart b/packages/smooth_app/lib/pages/preferences/user_preferences_faq.dart index 7263e39e9e2..cd5a0af5f72 100644 --- a/packages/smooth_app/lib/pages/preferences/user_preferences_faq.dart +++ b/packages/smooth_app/lib/pages/preferences/user_preferences_faq.dart @@ -1,11 +1,9 @@ import 'dart:io'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:smooth_app/cards/category_cards/svg_cache.dart'; -import 'package:smooth_app/data_models/preferences/user_preferences.dart'; import 'package:smooth_app/generic_lib/design_constants.dart'; import 'package:smooth_app/generic_lib/dialogs/smooth_alert_dialog.dart'; import 'package:smooth_app/helpers/app_helper.dart'; @@ -22,16 +20,11 @@ import 'package:smooth_app/query/product_query.dart'; /// Display of "FAQ" for the preferences page. class UserPreferencesFaq extends AbstractUserPreferences { UserPreferencesFaq({ - required final BuildContext context, - required final UserPreferences userPreferences, - required final AppLocalizations appLocalizations, - required final ThemeData themeData, - }) : super( - context: context, - userPreferences: userPreferences, - appLocalizations: appLocalizations, - themeData: themeData, - ); + required super.context, + required super.userPreferences, + required super.appLocalizations, + required super.themeData, + }); @override PreferencePageType getPreferencePageType() => PreferencePageType.FAQ; diff --git a/packages/smooth_app/lib/pages/preferences/user_preferences_food.dart b/packages/smooth_app/lib/pages/preferences/user_preferences_food.dart index 75d0d4b1517..bab5e81624f 100644 --- a/packages/smooth_app/lib/pages/preferences/user_preferences_food.dart +++ b/packages/smooth_app/lib/pages/preferences/user_preferences_food.dart @@ -2,7 +2,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:openfoodfacts/openfoodfacts.dart'; import 'package:provider/provider.dart'; -import 'package:smooth_app/data_models/preferences/user_preferences.dart'; import 'package:smooth_app/data_models/product_preferences.dart'; import 'package:smooth_app/generic_lib/design_constants.dart'; import 'package:smooth_app/generic_lib/dialogs/smooth_alert_dialog.dart'; @@ -18,16 +17,11 @@ import 'package:smooth_app/widgets/smooth_text.dart'; class UserPreferencesFood extends AbstractUserPreferences { UserPreferencesFood({ required this.productPreferences, - required final BuildContext context, - required final UserPreferences userPreferences, - required final AppLocalizations appLocalizations, - required final ThemeData themeData, - }) : super( - context: context, - userPreferences: userPreferences, - appLocalizations: appLocalizations, - themeData: themeData, - ); + required super.context, + required super.userPreferences, + required super.appLocalizations, + required super.themeData, + }); final ProductPreferences productPreferences; diff --git a/packages/smooth_app/lib/pages/preferences/user_preferences_settings.dart b/packages/smooth_app/lib/pages/preferences/user_preferences_settings.dart index 8488f03e269..5634b59a52f 100644 --- a/packages/smooth_app/lib/pages/preferences/user_preferences_settings.dart +++ b/packages/smooth_app/lib/pages/preferences/user_preferences_settings.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:provider/provider.dart'; import 'package:smooth_app/data_models/preferences/user_preferences.dart'; import 'package:smooth_app/generic_lib/design_constants.dart'; @@ -24,17 +23,12 @@ import 'package:smooth_app/themes/theme_provider.dart'; /// Collapsed/expanded display of settings for the preferences page. class UserPreferencesSettings extends AbstractUserPreferences { UserPreferencesSettings({ - required final BuildContext context, - required final UserPreferences userPreferences, - required final AppLocalizations appLocalizations, - required final ThemeData themeData, + required super.context, + required super.userPreferences, + required super.appLocalizations, + required super.themeData, required this.themeProvider, - }) : super( - context: context, - userPreferences: userPreferences, - appLocalizations: appLocalizations, - themeData: themeData, - ); + }); final ThemeProvider themeProvider; diff --git a/packages/smooth_app/lib/pages/preferences/user_preferences_widgets.dart b/packages/smooth_app/lib/pages/preferences/user_preferences_widgets.dart index 735c70731a4..a5cdbdf33cd 100644 --- a/packages/smooth_app/lib/pages/preferences/user_preferences_widgets.dart +++ b/packages/smooth_app/lib/pages/preferences/user_preferences_widgets.dart @@ -11,8 +11,8 @@ import 'package:smooth_app/themes/smooth_theme_colors.dart'; class UserPreferencesListItemDivider extends StatelessWidget { const UserPreferencesListItemDivider({ this.margin, - Key? key, - }) : super(key: key); + super.key, + }); final EdgeInsetsGeometry? margin; @@ -261,12 +261,11 @@ class UserPreferencesMultipleChoicesItem extends StatelessWidget { this.leadingBuilder, this.descriptions, this.dialogHeight, - Key? key, + super.key, }) : assert(labels.length > 0), assert(values.length == labels.length), assert(descriptions == null || descriptions.length == labels.length), - assert(dialogHeight == null || dialogHeight > 0.0), - super(key: key); + assert(dialogHeight == null || dialogHeight > 0.0); final String title; final IconData? leading; diff --git a/packages/smooth_app/lib/pages/product/autocomplete.dart b/packages/smooth_app/lib/pages/product/autocomplete.dart index b3f5d69f7c7..6b20995ad69 100644 --- a/packages/smooth_app/lib/pages/product/autocomplete.dart +++ b/packages/smooth_app/lib/pages/product/autocomplete.dart @@ -10,7 +10,7 @@ import 'package:smooth_app/widgets/smooth_text.dart'; /// Inspiration was found in https://stackoverflow.com/questions/66935362 class AutocompleteOptions extends StatelessWidget { const AutocompleteOptions({ - Key? key, + super.key, required this.displayStringForOption, required this.onSelected, required this.options, @@ -18,8 +18,7 @@ class AutocompleteOptions extends StatelessWidget { required this.maxOptionsWidth, this.search, }) : assert(maxOptionsHeight >= 0), - assert(maxOptionsWidth >= 0), - super(key: key); + assert(maxOptionsWidth >= 0); final AutocompleteOptionToString displayStringForOption; final AutocompleteOnSelected onSelected; @@ -78,8 +77,8 @@ class _AutocompleteOptionsItem extends StatelessWidget { required this.displayStringForOption, required this.onSelected, this.search, - Key? key, - }) : super(key: key); + super.key, + }); final T option; final String? search; diff --git a/packages/smooth_app/lib/pages/product/common/search_app_bar_title.dart b/packages/smooth_app/lib/pages/product/common/search_app_bar_title.dart index ecafb80ca15..2a133bf9843 100644 --- a/packages/smooth_app/lib/pages/product/common/search_app_bar_title.dart +++ b/packages/smooth_app/lib/pages/product/common/search_app_bar_title.dart @@ -7,8 +7,8 @@ class SearchAppBarTitle extends StatelessWidget { required this.title, this.multiLines = true, required this.editableAppBarTitle, - Key? key, - }) : super(key: key); + super.key, + }); final String title; final bool multiLines; diff --git a/packages/smooth_app/lib/pages/product/common/search_empty_screen.dart b/packages/smooth_app/lib/pages/product/common/search_empty_screen.dart index 98dbf68f7ad..2849331ec99 100644 --- a/packages/smooth_app/lib/pages/product/common/search_empty_screen.dart +++ b/packages/smooth_app/lib/pages/product/common/search_empty_screen.dart @@ -9,8 +9,8 @@ class SearchEmptyScreen extends StatelessWidget { required this.emptiness, this.actions, this.includeAppBar = true, - Key? key, - }) : super(key: key); + super.key, + }); final String name; final Widget emptiness; diff --git a/packages/smooth_app/lib/pages/product/edit_product_page.dart b/packages/smooth_app/lib/pages/product/edit_product_page.dart index d9bc6e58495..6ce68086de5 100644 --- a/packages/smooth_app/lib/pages/product/edit_product_page.dart +++ b/packages/smooth_app/lib/pages/product/edit_product_page.dart @@ -355,8 +355,7 @@ class _ListTitleItem extends SmoothListTileCard { Widget? leading, String? title, String? subtitle, - void Function()? onTap, - Key? key, + super.onTap, }) : super.icon( title: title == null ? null @@ -364,8 +363,6 @@ class _ListTitleItem extends SmoothListTileCard { title, style: const TextStyle(fontWeight: FontWeight.bold), ), - onTap: onTap, - key: key, icon: leading, subtitle: subtitle == null ? null : Text(subtitle), ); @@ -373,10 +370,9 @@ class _ListTitleItem extends SmoothListTileCard { /// Barcodes only allowed have a length of 7, 8, 12 or 13 characters class _ProductBarcode extends StatefulWidget { - _ProductBarcode({required this.product, Key? key}) + _ProductBarcode({required this.product}) : assert(product.barcode?.isNotEmpty == true), - assert(isAValidBarcode(product.barcode)), - super(key: key); + assert(isAValidBarcode(product.barcode)); static const double _barcodeHeight = 120.0; diff --git a/packages/smooth_app/lib/pages/product/hideable_container.dart b/packages/smooth_app/lib/pages/product/hideable_container.dart index 6247c9b5c40..cc784f62933 100644 --- a/packages/smooth_app/lib/pages/product/hideable_container.dart +++ b/packages/smooth_app/lib/pages/product/hideable_container.dart @@ -5,8 +5,8 @@ import 'package:smooth_app/generic_lib/duration_constants.dart'; class HideableContainer extends StatefulWidget { const HideableContainer({ required this.child, - Key? key, - }) : super(key: key); + super.key, + }); final Widget child; diff --git a/packages/smooth_app/lib/pages/product/product_loader_page.dart b/packages/smooth_app/lib/pages/product/product_loader_page.dart index 29805b61ee7..462ceb41e92 100644 --- a/packages/smooth_app/lib/pages/product/product_loader_page.dart +++ b/packages/smooth_app/lib/pages/product/product_loader_page.dart @@ -16,9 +16,8 @@ class ProductLoaderPage extends StatefulWidget { const ProductLoaderPage({ required this.barcode, required this.mode, - Key? key, - }) : assert(barcode != ''), - super(key: key); + super.key, + }) : assert(barcode != ''); final String barcode; final ProductLoaderMode mode; @@ -111,7 +110,7 @@ class _ProductLoaderPageState extends State { } class _ProductLoaderLoadingState extends StatelessWidget { - const _ProductLoaderLoadingState({Key? key}) : super(key: key); + const _ProductLoaderLoadingState(); @override Widget build(BuildContext context) { @@ -122,8 +121,7 @@ class _ProductLoaderLoadingState extends StatelessWidget { class _ProductLoaderNotFoundState extends StatelessWidget { const _ProductLoaderNotFoundState({ required this.barcode, - Key? key, - }) : super(key: key); + }); final String barcode; @@ -168,8 +166,7 @@ class _ProductLoaderNotFoundState extends StatelessWidget { class _ProductLoaderNetworkErrorState extends StatelessWidget { const _ProductLoaderNetworkErrorState({ required this.onRetry, - Key? key, - }) : super(key: key); + }); final VoidCallback onRetry; diff --git a/packages/smooth_app/lib/pages/product/product_question_answers_options.dart b/packages/smooth_app/lib/pages/product/product_question_answers_options.dart index d9e1c31e72a..1b8c0509f0f 100644 --- a/packages/smooth_app/lib/pages/product/product_question_answers_options.dart +++ b/packages/smooth_app/lib/pages/product/product_question_answers_options.dart @@ -7,9 +7,9 @@ import 'package:smooth_app/generic_lib/design_constants.dart'; class ProductQuestionAnswersOptions extends StatelessWidget { const ProductQuestionAnswersOptions( this.question, { - Key? key, + super.key, required this.onAnswer, - }) : super(key: key); + }); final RobotoffQuestion question; final Function(InsightAnnotation) onAnswer; diff --git a/packages/smooth_app/lib/pages/product/product_questions_widget.dart b/packages/smooth_app/lib/pages/product/product_questions_widget.dart index 8e0a5b0a7aa..675dff6676a 100644 --- a/packages/smooth_app/lib/pages/product/product_questions_widget.dart +++ b/packages/smooth_app/lib/pages/product/product_questions_widget.dart @@ -442,8 +442,8 @@ class KeepQuestionWidgetAlive extends InheritedWidget { const KeepQuestionWidgetAlive({ super.key, required this.keepWidgetAlive, - required Widget child, - }) : super(child: child); + required super.child, + }); final bool keepWidgetAlive; diff --git a/packages/smooth_app/lib/pages/product_list_user_dialog_helper.dart b/packages/smooth_app/lib/pages/product_list_user_dialog_helper.dart index 534a97143de..37a50315ce9 100644 --- a/packages/smooth_app/lib/pages/product_list_user_dialog_helper.dart +++ b/packages/smooth_app/lib/pages/product_list_user_dialog_helper.dart @@ -261,11 +261,10 @@ class ProductListUserDialogHelper { /// Handles click rebuilds class _UserLists extends StatefulWidget { const _UserLists({ - Key? key, required this.lists, required this.selectedLists, required this.onListsSubmitted, - }) : super(key: key); + }); final Set lists; final Set selectedLists; @@ -326,7 +325,9 @@ class _UserListsState extends State<_UserLists> { /// Widget indicate that the user has no lists yet /// Pop returns true if a new list is created class _UserEmptyLists extends StatefulWidget { - const _UserEmptyLists(this.daoProductList, {Key? key}) : super(key: key); + const _UserEmptyLists( + this.daoProductList, + ); final DaoProductList daoProductList; diff --git a/packages/smooth_app/lib/pages/scan/carousel/scan_carousel_manager.dart b/packages/smooth_app/lib/pages/scan/carousel/scan_carousel_manager.dart index 85181b9c3fe..f19003055cf 100644 --- a/packages/smooth_app/lib/pages/scan/carousel/scan_carousel_manager.dart +++ b/packages/smooth_app/lib/pages/scan/carousel/scan_carousel_manager.dart @@ -84,10 +84,9 @@ class ExternalScanCarouselManagerState class _InheritedCarouselManager extends InheritedWidget { const _InheritedCarouselManager({ - required Widget child, + required super.child, required this.state, - Key? key, - }) : super(key: key, child: child); + }); final ExternalScanCarouselManagerState state; diff --git a/packages/smooth_app/lib/pages/scan/scan_page.dart b/packages/smooth_app/lib/pages/scan/scan_page.dart index 01185002a79..4f467cf54c9 100644 --- a/packages/smooth_app/lib/pages/scan/scan_page.dart +++ b/packages/smooth_app/lib/pages/scan/scan_page.dart @@ -169,7 +169,7 @@ class _ScanPageState extends State { } class _PermissionDeniedCard extends StatelessWidget { - const _PermissionDeniedCard({Key? key}) : super(key: key); + const _PermissionDeniedCard(); @override Widget build(BuildContext context) { diff --git a/packages/smooth_app/lib/pages/scan/smooth_barcode_scanner_mockup.dart b/packages/smooth_app/lib/pages/scan/smooth_barcode_scanner_mockup.dart index c80677d6753..4a5ebf08f91 100644 --- a/packages/smooth_app/lib/pages/scan/smooth_barcode_scanner_mockup.dart +++ b/packages/smooth_app/lib/pages/scan/smooth_barcode_scanner_mockup.dart @@ -2,7 +2,9 @@ import 'package:flutter/material.dart'; /// Fake barcode scanner, for tests. class SmoothBarcodeScannerMocked extends StatelessWidget { - const SmoothBarcodeScannerMocked({Key? key}) : super(key: key); + const SmoothBarcodeScannerMocked({ + super.key, + }); @override Widget build(BuildContext context) => Container(color: Colors.red); diff --git a/packages/smooth_app/lib/pages/search/search_page.dart b/packages/smooth_app/lib/pages/search/search_page.dart index cda42435bbd..0b47e46128e 100644 --- a/packages/smooth_app/lib/pages/search/search_page.dart +++ b/packages/smooth_app/lib/pages/search/search_page.dart @@ -124,12 +124,6 @@ class _SearchPageState extends State { child: searchHelper.value!.widget, ), ], - onPopPage: (Route route, dynamic result) { - if (!route.didPop(result)) { - return false; - } - return true; - }, ); } }, diff --git a/packages/smooth_app/lib/pages/text_field_helper.dart b/packages/smooth_app/lib/pages/text_field_helper.dart index d297ed9662a..f0ab08310bd 100644 --- a/packages/smooth_app/lib/pages/text_field_helper.dart +++ b/packages/smooth_app/lib/pages/text_field_helper.dart @@ -3,10 +3,9 @@ import 'package:flutter/material.dart'; /// A [TextEditingController] that saves the value passed to the constructor /// and persists the previous value. class TextEditingControllerWithHistory extends TextEditingController { - TextEditingControllerWithHistory({String? text}) + TextEditingControllerWithHistory({super.text}) : _initialValue = text, - _previousValue = text, - super(text: text); + _previousValue = text; final String? _initialValue; String? _previousValue; diff --git a/packages/smooth_app/lib/pages/user_management/sign_up_page.dart b/packages/smooth_app/lib/pages/user_management/sign_up_page.dart index 57ef4ab196f..3d5b01c70ef 100644 --- a/packages/smooth_app/lib/pages/user_management/sign_up_page.dart +++ b/packages/smooth_app/lib/pages/user_management/sign_up_page.dart @@ -442,8 +442,7 @@ class _TermsOfUseCheckbox extends StatelessWidget { required this.disagree, required this.onCheckboxChanged, required this.checkboxColorResolver, - Key? key, - }) : super(key: key); + }); final bool agree; final bool disagree; diff --git a/packages/smooth_app/lib/services/logs/fimber/trees/file_fimber_tree.dart b/packages/smooth_app/lib/services/logs/fimber/trees/file_fimber_tree.dart index 67612adc73b..bbfe6507299 100644 --- a/packages/smooth_app/lib/services/logs/fimber/trees/file_fimber_tree.dart +++ b/packages/smooth_app/lib/services/logs/fimber/trees/file_fimber_tree.dart @@ -3,15 +3,14 @@ import 'dart:io'; import 'package:fimber/fimber.dart'; import 'package:intl/intl.dart'; import 'package:smooth_app/services/logs/fimber/trees/base_fimber_tree.dart'; -import 'package:smooth_app/services/logs/smooth_log_levels.dart'; /// Single file fimber implementation /// When the maxDataSize is reached, half of the content is removed class FileFimberTree extends BaseFimberTree { FileFimberTree({ - required List logLevels, + required super.logLevels, required this.outputFile, - }) : super(logLevels: logLevels) { + }) { outputFile.createSync(); } diff --git a/packages/smooth_app/lib/services/logs/fimber/trees/sentry_fimber_tree.dart b/packages/smooth_app/lib/services/logs/fimber/trees/sentry_fimber_tree.dart index cd8c3cce293..99256d0fe34 100644 --- a/packages/smooth_app/lib/services/logs/fimber/trees/sentry_fimber_tree.dart +++ b/packages/smooth_app/lib/services/logs/fimber/trees/sentry_fimber_tree.dart @@ -1,13 +1,12 @@ import 'package:fimber/fimber.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; import 'package:smooth_app/services/logs/fimber/trees/base_fimber_tree.dart'; -import 'package:smooth_app/services/logs/smooth_log_levels.dart'; /// Custom Fimber [LogTree] that send logs to Sentry class SentryFimberTree extends BaseFimberTree { SentryFimberTree({ - required List logLevels, - }) : super(logLevels: logLevels); + required super.logLevels, + }); @override void log( diff --git a/packages/smooth_app/lib/services/logs/smooth_logs_service.dart b/packages/smooth_app/lib/services/logs/smooth_logs_service.dart index 904e44cb7c3..64d2f6ddb5c 100644 --- a/packages/smooth_app/lib/services/logs/smooth_logs_service.dart +++ b/packages/smooth_app/lib/services/logs/smooth_logs_service.dart @@ -1,8 +1,9 @@ -/// Please use this file for import statements, as it allows to easily change -/// the logging solution import 'package:smooth_app/services/logs/smooth_log_levels.dart'; import 'package:smooth_app/services/smooth_service.dart'; +/// Please use this file for import statements, as it allows to easily change +/// the logging solution + class LogsService extends SmoothService { LogsService() : super(); diff --git a/packages/smooth_app/lib/widgets/smooth_app_bar.dart b/packages/smooth_app/lib/widgets/smooth_app_bar.dart index c63aabb0a0e..a08bc81e44b 100644 --- a/packages/smooth_app/lib/widgets/smooth_app_bar.dart +++ b/packages/smooth_app/lib/widgets/smooth_app_bar.dart @@ -41,11 +41,10 @@ class SmoothAppBar extends StatelessWidget implements PreferredSizeWidget { this.actionModeCloseTooltip, this.onLeaveActionMode, this.ignoreSemanticsForSubtitle = false, - Key? key, + super.key, }) : assert(!actionMode || actionModeTitle != null), preferredSize = - _PreferredAppBarSize(toolbarHeight, bottom?.preferredSize.height), - super(key: key); + _PreferredAppBarSize(toolbarHeight, bottom?.preferredSize.height); final Widget? leading; final bool automaticallyImplyLeading; @@ -234,8 +233,7 @@ class _AppBarTitle extends StatelessWidget { required this.title, required this.subTitle, this.ignoreSemanticsForSubtitle, - Key? key, - }) : super(key: key); + }); final Widget title; final Widget? subTitle; diff --git a/packages/smooth_app/lib/widgets/smooth_scaffold.dart b/packages/smooth_app/lib/widgets/smooth_scaffold.dart index 9dff0baf264..6fc2ff67060 100644 --- a/packages/smooth_app/lib/widgets/smooth_scaffold.dart +++ b/packages/smooth_app/lib/widgets/smooth_scaffold.dart @@ -185,10 +185,10 @@ class SmoothScaffoldState extends ScaffoldState { /// a [SmoothScaffold]. class SmoothBrightnessOverride extends InheritedWidget { const SmoothBrightnessOverride({ - required Widget child, - Key? key, + required super.child, + super.key, this.brightness, - }) : super(key: key, child: child); + }); final Brightness? brightness; diff --git a/packages/smooth_app/lib/widgets/widget_height.dart b/packages/smooth_app/lib/widgets/widget_height.dart index 68a9924d712..72f301ecf28 100644 --- a/packages/smooth_app/lib/widgets/widget_height.dart +++ b/packages/smooth_app/lib/widgets/widget_height.dart @@ -3,10 +3,11 @@ import 'package:flutter/widgets.dart'; class MeasureSize extends SingleChildRenderObjectWidget { const MeasureSize({ - Key? key, + super.key, required this.onChange, - required Widget child, - }) : super(key: key, child: child); + required Widget super.child, + }); + final OnWidgetSizeChange onChange; @override diff --git a/packages/smooth_app/lib/widgets/will_pop_scope.dart b/packages/smooth_app/lib/widgets/will_pop_scope.dart index d7ce206d70e..c50a8856d5c 100644 --- a/packages/smooth_app/lib/widgets/will_pop_scope.dart +++ b/packages/smooth_app/lib/widgets/will_pop_scope.dart @@ -19,7 +19,7 @@ class WillPopScope2 extends StatelessWidget { Widget build(BuildContext context) { return PopScope( canPop: false, - onPopInvoked: (bool didPop) async { + onPopInvokedWithResult: (bool didPop, dynamic result) async { if (didPop) { return; } diff --git a/packages/smooth_app/macos/Podfile.lock b/packages/smooth_app/macos/Podfile.lock new file mode 100644 index 00000000000..836d5fd5893 --- /dev/null +++ b/packages/smooth_app/macos/Podfile.lock @@ -0,0 +1,127 @@ +PODS: + - audioplayers_darwin (0.0.1): + - FlutterMacOS + - connectivity_plus (0.0.1): + - FlutterMacOS + - ReachabilitySwift + - device_info_plus (0.0.1): + - FlutterMacOS + - file_selector_macos (0.0.1): + - FlutterMacOS + - flutter_image_compress_macos (1.0.0): + - FlutterMacOS + - flutter_secure_storage_macos (6.1.1): + - FlutterMacOS + - FlutterMacOS (1.0.0) + - in_app_review (0.2.0): + - FlutterMacOS + - mobile_scanner (3.5.6): + - FlutterMacOS + - package_info_plus (0.0.1): + - FlutterMacOS + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - ReachabilitySwift (5.2.3) + - rive_common (0.0.1): + - FlutterMacOS + - Sentry/HybridSDK (8.36.0) + - sentry_flutter (8.9.0): + - Flutter + - FlutterMacOS + - Sentry/HybridSDK (= 8.36.0) + - share_plus (0.0.1): + - FlutterMacOS + - shared_preferences_foundation (0.0.1): + - Flutter + - FlutterMacOS + - sqflite (0.0.3): + - Flutter + - FlutterMacOS + - url_launcher_macos (0.0.1): + - FlutterMacOS + +DEPENDENCIES: + - audioplayers_darwin (from `Flutter/ephemeral/.symlinks/plugins/audioplayers_darwin/macos`) + - connectivity_plus (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus/macos`) + - device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`) + - file_selector_macos (from `Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos`) + - flutter_image_compress_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_image_compress_macos/macos`) + - flutter_secure_storage_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos`) + - FlutterMacOS (from `Flutter/ephemeral`) + - in_app_review (from `Flutter/ephemeral/.symlinks/plugins/in_app_review/macos`) + - mobile_scanner (from `Flutter/ephemeral/.symlinks/plugins/mobile_scanner/macos`) + - package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`) + - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) + - rive_common (from `Flutter/ephemeral/.symlinks/plugins/rive_common/macos`) + - sentry_flutter (from `Flutter/ephemeral/.symlinks/plugins/sentry_flutter/macos`) + - share_plus (from `Flutter/ephemeral/.symlinks/plugins/share_plus/macos`) + - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`) + - sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/darwin`) + - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`) + +SPEC REPOS: + trunk: + - ReachabilitySwift + - Sentry + +EXTERNAL SOURCES: + audioplayers_darwin: + :path: Flutter/ephemeral/.symlinks/plugins/audioplayers_darwin/macos + connectivity_plus: + :path: Flutter/ephemeral/.symlinks/plugins/connectivity_plus/macos + device_info_plus: + :path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos + file_selector_macos: + :path: Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos + flutter_image_compress_macos: + :path: Flutter/ephemeral/.symlinks/plugins/flutter_image_compress_macos/macos + flutter_secure_storage_macos: + :path: Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos + FlutterMacOS: + :path: Flutter/ephemeral + in_app_review: + :path: Flutter/ephemeral/.symlinks/plugins/in_app_review/macos + mobile_scanner: + :path: Flutter/ephemeral/.symlinks/plugins/mobile_scanner/macos + package_info_plus: + :path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos + path_provider_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin + rive_common: + :path: Flutter/ephemeral/.symlinks/plugins/rive_common/macos + sentry_flutter: + :path: Flutter/ephemeral/.symlinks/plugins/sentry_flutter/macos + share_plus: + :path: Flutter/ephemeral/.symlinks/plugins/share_plus/macos + shared_preferences_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin + sqflite: + :path: Flutter/ephemeral/.symlinks/plugins/sqflite/darwin + url_launcher_macos: + :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos + +SPEC CHECKSUMS: + audioplayers_darwin: dcad41de4fbd0099cb3749f7ab3b0cb8f70b810c + connectivity_plus: 18d3c32514c886e046de60e9c13895109866c747 + device_info_plus: ce1b7762849d3ec103d0e0517299f2db7ad60720 + file_selector_macos: 54fdab7caa3ac3fc43c9fac4d7d8d231277f8cf2 + flutter_image_compress_macos: c26c3c13ea0f28ae6dea4e139b3292e7729f99f1 + flutter_secure_storage_macos: 59459653abe1adb92abbc8ea747d79f8d19866c9 + FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 + in_app_review: a850789fad746e89bce03d4aeee8078b45a53fd0 + mobile_scanner: 54ceceae0c8da2457e26a362a6be5c61154b1829 + package_info_plus: fa739dd842b393193c5ca93c26798dff6e3d0e0c + path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 + ReachabilitySwift: 7f151ff156cea1481a8411701195ac6a984f4979 + rive_common: cf5ab646aa576b2d742d0e2d528126fbf032c856 + Sentry: f8374b5415bc38dfb5645941b3ae31230fbeae57 + sentry_flutter: 0eb93e5279eb41e2392212afe1ccd2fecb4f8cbe + share_plus: 36537c04ce0c3e3f5bd297ce4318b6d5ee5fd6cf + shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 + sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec + url_launcher_macos: 5f437abeda8c85500ceb03f5c1938a8c5a705399 + +PODFILE CHECKSUM: 0d3963a09fc94f580682bd88480486da345dc3f0 + +COCOAPODS: 1.14.3 diff --git a/packages/smooth_app/macos/Runner/AppDelegate.swift b/packages/smooth_app/macos/Runner/AppDelegate.swift index d53ef643772..8e02df28883 100644 --- a/packages/smooth_app/macos/Runner/AppDelegate.swift +++ b/packages/smooth_app/macos/Runner/AppDelegate.swift @@ -1,7 +1,7 @@ import Cocoa import FlutterMacOS -@NSApplicationMain +@main class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true diff --git a/packages/smooth_app/pubspec.lock b/packages/smooth_app/pubspec.lock index 1562a32cd0e..46957f8fbc8 100644 --- a/packages/smooth_app/pubspec.lock +++ b/packages/smooth_app/pubspec.lock @@ -635,10 +635,10 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 + sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" url: "https://pub.dev" source: hosted - version: "2.0.3" + version: "4.0.0" flutter_localizations: dependency: "direct main" description: flutter @@ -988,10 +988,10 @@ packages: dependency: transitive description: name: lints - sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" + sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "4.0.0" lists: dependency: transitive description: @@ -1108,8 +1108,8 @@ packages: dependency: "direct dev" description: path: "." - ref: HEAD - resolved-ref: e91bc71bccc317948dc769b8c5d55052d949ec2e + ref: flutter_3_24 + resolved-ref: eba41af0e05c6474224851fe85bf67f0829f8192 url: "https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git" source: git version: "1.0.0" @@ -1852,5 +1852,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.4.0 <4.0.0" + dart: ">=3.5.3 <4.0.0" flutter: ">=3.22.0" diff --git a/packages/smooth_app/pubspec.yaml b/packages/smooth_app/pubspec.yaml index d5218333724..592dbf773eb 100644 --- a/packages/smooth_app/pubspec.yaml +++ b/packages/smooth_app/pubspec.yaml @@ -4,7 +4,7 @@ version: 0.0.0+734 publish_to: "none" environment: - sdk: '>=3.4.0 <4.0.0' + sdk: ^3.5.3 dependencies: flutter: @@ -114,9 +114,11 @@ dev_dependencies: mockito: 5.4.4 path_provider_platform_interface: 2.1.2 plugin_platform_interface: 2.1.8 - flutter_lints: 2.0.3 + flutter_lints: 4.0.0 openfoodfacts_flutter_lints: - git: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git + git: + url: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git + ref: flutter_3_24 # 'flutter pub run flutter_launcher_icons:main' to update flutter_icons: diff --git a/packages/smooth_app/test/smooth_ui_library/animations/smooth_reveal_animation_test.dart b/packages/smooth_app/test/smooth_ui_library/animations/smooth_reveal_animation_test.dart index 98ae1a8eee4..473dbe17b36 100644 --- a/packages/smooth_app/test/smooth_ui_library/animations/smooth_reveal_animation_test.dart +++ b/packages/smooth_app/test/smooth_ui_library/animations/smooth_reveal_animation_test.dart @@ -5,9 +5,8 @@ import 'package:smooth_app/widgets/smooth_scaffold.dart'; class _SwitchablePage extends StatefulWidget { const _SwitchablePage({ - Key? key, this.delay = 0, - }) : super(key: key); + }); final int delay; diff --git a/packages/smooth_app/test/smooth_ui_library/dialogs/smooth_category_picker_test.dart b/packages/smooth_app/test/smooth_ui_library/dialogs/smooth_category_picker_test.dart index 86b985e6378..d20fbab3200 100644 --- a/packages/smooth_app/test/smooth_ui_library/dialogs/smooth_category_picker_test.dart +++ b/packages/smooth_app/test/smooth_ui_library/dialogs/smooth_category_picker_test.dart @@ -6,9 +6,10 @@ import 'package:smooth_app/generic_lib/dialogs/smooth_category_picker.dart'; import 'package:smooth_app/widgets/smooth_scaffold.dart'; class TestCategory extends SmoothCategory { - TestCategory(String value, [Iterable? children]) - : children = children?.toSet() ?? const {}, - super(value); + TestCategory( + super.value, [ + Iterable? children, + ]) : children = children?.toSet() ?? const {}; Set children; diff --git a/packages/smooth_app/windows/flutter/generated_plugin_registrant.cc b/packages/smooth_app/windows/flutter/generated_plugin_registrant.cc index a871a1bf3bd..c67ac76fbe2 100644 --- a/packages/smooth_app/windows/flutter/generated_plugin_registrant.cc +++ b/packages/smooth_app/windows/flutter/generated_plugin_registrant.cc @@ -12,7 +12,6 @@ #include #include #include -#include #include #include @@ -29,8 +28,6 @@ void RegisterPlugins(flutter::PluginRegistry* registry) { registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin")); RivePluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("RivePlugin")); - SentryFlutterPluginRegisterWithRegistrar( - registry->GetRegistrarForPlugin("SentryFlutterPlugin")); SharePlusWindowsPluginCApiRegisterWithRegistrar( registry->GetRegistrarForPlugin("SharePlusWindowsPluginCApi")); UrlLauncherWindowsRegisterWithRegistrar( diff --git a/packages/smooth_app/windows/flutter/generated_plugins.cmake b/packages/smooth_app/windows/flutter/generated_plugins.cmake index ff0af32c54e..b7d63f3af8a 100644 --- a/packages/smooth_app/windows/flutter/generated_plugins.cmake +++ b/packages/smooth_app/windows/flutter/generated_plugins.cmake @@ -9,12 +9,12 @@ list(APPEND FLUTTER_PLUGIN_LIST flutter_secure_storage_windows permission_handler_windows rive_common - sentry_flutter share_plus url_launcher_windows ) list(APPEND FLUTTER_FFI_PLUGIN_LIST + sentry_flutter ) set(PLUGIN_BUNDLED_LIBRARIES) From d3fcb579841f1154e77837d3dd977898cb83f997 Mon Sep 17 00:00:00 2001 From: Edouard Marquez Date: Wed, 25 Sep 2024 15:58:37 +0200 Subject: [PATCH 2/3] `openfoodfacts_flutter_lints` from the `main` branch --- packages/app_store/apple_app_store/pubspec.yaml | 4 +--- packages/app_store/google_play/pubspec.yaml | 4 +--- packages/app_store/shared/pubspec.yaml | 4 +--- packages/app_store/uri_store/pubspec.yaml | 4 +--- packages/scanner/ml_kit/pubspec.yaml | 4 +--- packages/scanner/shared/pubspec.yaml | 4 +--- packages/scanner/zxing/pubspec.yaml | 4 +--- packages/smooth_app/pubspec.yaml | 4 +--- 8 files changed, 8 insertions(+), 24 deletions(-) diff --git a/packages/app_store/apple_app_store/pubspec.yaml b/packages/app_store/apple_app_store/pubspec.yaml index f630a3a4fd6..97423969116 100644 --- a/packages/app_store/apple_app_store/pubspec.yaml +++ b/packages/app_store/apple_app_store/pubspec.yaml @@ -20,6 +20,4 @@ dev_dependencies: sdk: flutter flutter_lints: 4.0.0 openfoodfacts_flutter_lints: - git: - url: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git - ref: flutter_3_24 \ No newline at end of file + git: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git \ No newline at end of file diff --git a/packages/app_store/google_play/pubspec.yaml b/packages/app_store/google_play/pubspec.yaml index 85751604fb8..e3b73a6181e 100644 --- a/packages/app_store/google_play/pubspec.yaml +++ b/packages/app_store/google_play/pubspec.yaml @@ -20,8 +20,6 @@ dev_dependencies: sdk: flutter flutter_lints: 4.0.0 openfoodfacts_flutter_lints: - git: - url: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git - ref: flutter_3_24 + git: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git flutter: \ No newline at end of file diff --git a/packages/app_store/shared/pubspec.yaml b/packages/app_store/shared/pubspec.yaml index 4ce8e19620d..29d79b705fc 100644 --- a/packages/app_store/shared/pubspec.yaml +++ b/packages/app_store/shared/pubspec.yaml @@ -15,8 +15,6 @@ dev_dependencies: sdk: flutter flutter_lints: 4.0.0 openfoodfacts_flutter_lints: - git: - url: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git - ref: flutter_3_24 + git: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git flutter: \ No newline at end of file diff --git a/packages/app_store/uri_store/pubspec.yaml b/packages/app_store/uri_store/pubspec.yaml index 898a9d166d5..24bf8717346 100644 --- a/packages/app_store/uri_store/pubspec.yaml +++ b/packages/app_store/uri_store/pubspec.yaml @@ -20,6 +20,4 @@ dev_dependencies: sdk: flutter flutter_lints: 4.0.0 openfoodfacts_flutter_lints: - git: - url: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git - ref: flutter_3_24 \ No newline at end of file + git: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git \ No newline at end of file diff --git a/packages/scanner/ml_kit/pubspec.yaml b/packages/scanner/ml_kit/pubspec.yaml index 2e7223e3350..cd3b8f91293 100644 --- a/packages/scanner/ml_kit/pubspec.yaml +++ b/packages/scanner/ml_kit/pubspec.yaml @@ -22,6 +22,4 @@ dev_dependencies: sdk: flutter flutter_lints: 4.0.0 openfoodfacts_flutter_lints: - git: - url: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git - ref: flutter_3_24 \ No newline at end of file + git: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git \ No newline at end of file diff --git a/packages/scanner/shared/pubspec.yaml b/packages/scanner/shared/pubspec.yaml index 6e382fe6cf8..31a4b877580 100644 --- a/packages/scanner/shared/pubspec.yaml +++ b/packages/scanner/shared/pubspec.yaml @@ -18,8 +18,6 @@ dev_dependencies: sdk: flutter flutter_lints: 4.0.0 openfoodfacts_flutter_lints: - git: - url: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git - ref: flutter_3_24 + git: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git flutter: \ No newline at end of file diff --git a/packages/scanner/zxing/pubspec.yaml b/packages/scanner/zxing/pubspec.yaml index 9f1a7a86c24..ba3c43099b4 100644 --- a/packages/scanner/zxing/pubspec.yaml +++ b/packages/scanner/zxing/pubspec.yaml @@ -20,6 +20,4 @@ dev_dependencies: sdk: flutter flutter_lints: 4.0.0 openfoodfacts_flutter_lints: - git: - url: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git - ref: flutter_3_24 \ No newline at end of file + git: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git \ No newline at end of file diff --git a/packages/smooth_app/pubspec.yaml b/packages/smooth_app/pubspec.yaml index 592dbf773eb..85724048548 100644 --- a/packages/smooth_app/pubspec.yaml +++ b/packages/smooth_app/pubspec.yaml @@ -116,9 +116,7 @@ dev_dependencies: plugin_platform_interface: 2.1.8 flutter_lints: 4.0.0 openfoodfacts_flutter_lints: - git: - url: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git - ref: flutter_3_24 + git: https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git # 'flutter pub run flutter_launcher_icons:main' to update flutter_icons: From 59147fc36ad6f543415d70fb129c4cf4e0ab9ba5 Mon Sep 17 00:00:00 2001 From: Edouard Marquez Date: Wed, 25 Sep 2024 16:14:34 +0200 Subject: [PATCH 3/3] A fix for `/// For the world view` --- .../lib/pages/search/search_page.dart | 144 ++++++++++-------- packages/smooth_app/pubspec.lock | 32 ++-- 2 files changed, 96 insertions(+), 80 deletions(-) diff --git a/packages/smooth_app/lib/pages/search/search_page.dart b/packages/smooth_app/lib/pages/search/search_page.dart index 0b47e46128e..5717eb8e416 100644 --- a/packages/smooth_app/lib/pages/search/search_page.dart +++ b/packages/smooth_app/lib/pages/search/search_page.dart @@ -7,6 +7,7 @@ import 'package:smooth_app/pages/product/common/search_preloaded_item.dart'; import 'package:smooth_app/pages/search/search_field.dart'; import 'package:smooth_app/pages/search/search_history_view.dart'; import 'package:smooth_app/widgets/smooth_scaffold.dart'; +import 'package:smooth_app/widgets/will_pop_scope.dart'; /// The [SearchPage] screen. /// It can opened directly with the [SearchPageExtra] constructor. @@ -61,75 +62,90 @@ class _SearchPageState extends State { @override Widget build(BuildContext context) { - return MultiProvider( - providers: >[ - ChangeNotifierProvider.value( - value: _searchTextController, - ), - ChangeNotifierProvider.value( - value: widget.searchHelper, - ), - ], - child: SmoothScaffold( - body: Column( - children: [ - ValueNotifierListener( - listener: _onSearchChanged, - child: SafeArea( - bottom: false, - child: Padding( - padding: const EdgeInsetsDirectional.symmetric( - vertical: SMALL_SPACE, - horizontal: BALANCED_SPACE, - ), - child: SearchField( - autofocus: widget.autofocus, - focusNode: _searchFocusNode, - searchHelper: widget.searchHelper, - heroTag: widget.heroTag, + return WillPopScope2( + onWillPop: () async { + /// For the world view, we need to intercept the back button from here + /// See below for the custom [Navigator] + if (widget.searchHelper.value != null) { + setState(() => widget.searchHelper.value = null); + return (false, null); + } + return (true, null); + }, + child: MultiProvider( + providers: >[ + ChangeNotifierProvider.value( + value: _searchTextController, + ), + ChangeNotifierProvider.value( + value: widget.searchHelper, + ), + ], + child: SmoothScaffold( + body: Column( + children: [ + ValueNotifierListener( + listener: _onSearchChanged, + child: SafeArea( + bottom: false, + child: Padding( + padding: const EdgeInsetsDirectional.symmetric( + vertical: SMALL_SPACE, + horizontal: BALANCED_SPACE, + ), + child: SearchField( + autofocus: widget.autofocus, + focusNode: _searchFocusNode, + searchHelper: widget.searchHelper, + heroTag: widget.heroTag, + ), ), ), ), - ), - Expanded( - child: Consumer( - builder: ( - BuildContext context, - SearchHelper searchHelper, - _, - ) { - /// Show the history when there is no search - if (searchHelper.value == null) { - return SearchHistoryView( - focusNode: _searchFocusNode, - onTap: (String query) => - widget.searchHelper.searchWithController( - context, - query, - _searchTextController, - _searchFocusNode, - ), - searchHelper: widget.searchHelper, - preloadedList: - widget.preloadedList ?? [], - ); - } else { - /// A custom [Navigator] is used to intercept the World - /// results to be embedded in this part of the screen and - /// not on a new one. - return Navigator( - key: _navigatorKey, - pages: >[ - MaterialPage( - child: searchHelper.value!.widget, + Expanded( + child: Consumer( + builder: ( + BuildContext context, + SearchHelper searchHelper, + _, + ) { + /// Show the history when there is no search + if (searchHelper.value == null) { + return SearchHistoryView( + focusNode: _searchFocusNode, + onTap: (String query) => + widget.searchHelper.searchWithController( + context, + query, + _searchTextController, + _searchFocusNode, ), - ], - ); - } - }, + searchHelper: widget.searchHelper, + preloadedList: + widget.preloadedList ?? [], + ); + } else { + /// A custom [Navigator] is used to intercept the World + /// results to be embedded in this part of the screen and + /// not on a new one. + return Navigator( + key: _navigatorKey, + pages: >[ + MaterialPage( + child: searchHelper.value!.widget, + ), + ], + onDidRemovePage: (_) { + /// Mandatory to provide this method + /// The event is intercepted by the [WillPopScope2] + }, + ); + } + }, + ), ), - ), - ], + ], + ), ), ), ); diff --git a/packages/smooth_app/pubspec.lock b/packages/smooth_app/pubspec.lock index 46957f8fbc8..7b739f7a2e6 100644 --- a/packages/smooth_app/pubspec.lock +++ b/packages/smooth_app/pubspec.lock @@ -964,18 +964,18 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" url: "https://pub.dev" source: hosted - version: "10.0.4" + version: "10.0.5" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.5" leak_tracker_testing: dependency: transitive description: @@ -1028,10 +1028,10 @@ packages: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.11.1" matomo_tracker: dependency: "direct main" description: @@ -1044,10 +1044,10 @@ packages: dependency: transitive description: name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.15.0" mgrs_dart: dependency: transitive description: @@ -1108,8 +1108,8 @@ packages: dependency: "direct dev" description: path: "." - ref: flutter_3_24 - resolved-ref: eba41af0e05c6474224851fe85bf67f0829f8192 + ref: HEAD + resolved-ref: "151205f097aad11e78d56c4735aef44157c04f34" url: "https://github.com/openfoodfacts/openfoodfacts_flutter_lints.git" source: git version: "1.0.0" @@ -1269,10 +1269,10 @@ packages: dependency: transitive description: name: platform - sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" + sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65" url: "https://pub.dev" source: hosted - version: "3.1.4" + version: "3.1.5" plugin_platform_interface: dependency: "direct dev" description: @@ -1599,10 +1599,10 @@ packages: dependency: transitive description: name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" url: "https://pub.dev" source: hosted - version: "0.7.0" + version: "0.7.2" typed_data: dependency: transitive description: @@ -1743,10 +1743,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d" url: "https://pub.dev" source: hosted - version: "14.2.1" + version: "14.2.5" watcher: dependency: transitive description: