From fc076f7290fbde0d83f0f174b1c1184740faa620 Mon Sep 17 00:00:00 2001 From: your-name Date: Wed, 30 Jul 2025 18:21:31 +0300 Subject: [PATCH] style: Updates reception scan UI and data handling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refines the `ProductScannedComponent` by updating button labels, icons, and actions to clarify the user workflow. The "Nouveau scan" button is now "Terminer" (onDetails), and "Voir détails" is "Continuer" (onRescan). Transitions the `ReceptionScanPageModel` to fetch reception data from the local ObjectBox database, enhancing offline capabilities and responsiveness. Prepares for local barcode processing by introducing a new handler. --- lib/components/product_scanned_component.dart | 53 +++++--- .../reception/reception_scan_page_model.dart | 23 ++-- pubspec.yaml.bak | 128 ++++++++++++++++++ 3 files changed, 173 insertions(+), 31 deletions(-) create mode 100644 pubspec.yaml.bak diff --git a/lib/components/product_scanned_component.dart b/lib/components/product_scanned_component.dart index 1fa1908..0464633 100644 --- a/lib/components/product_scanned_component.dart +++ b/lib/components/product_scanned_component.dart @@ -101,16 +101,6 @@ class _ProductScannedComponentState extends State { ), ], ), - Divider( - height: 1.0, - thickness: 1.0, - color: Colors.grey.shade300, - ), - Divider( - height: 1.0, - thickness: 1.0, - color: Colors.grey.shade300, - ), // Row( // mainAxisSize: MainAxisSize.max, // mainAxisAlignment: @@ -128,30 +118,51 @@ class _ProductScannedComponentState extends State { children: [ Expanded( child: FilledButton.tonal( + style: ButtonStyle( + backgroundColor: WidgetStatePropertyAll( + AppTheme.of(context).warning, + ), + ), onPressed: () async { - await widget.onRescan?.call(); + await widget.onDetails?.call(); }, - child: Text( - 'Nouveau scan', - style: AppTheme.of(context).bodyMedium, + child: Row( + spacing: 5, + children: [ + Icon(Icons.exit_to_app), + Text( + 'Terminer', + style: AppTheme.of(context).bodyMedium, + ), + ], ), ), ), Expanded( - child: FilledButton( + child: ElevatedButton( style: ButtonStyle( + elevation: WidgetStatePropertyAll(10), backgroundColor: WidgetStatePropertyAll( AppTheme.of(context).primary, ), ), onPressed: () { - widget.onDetails?.call(); + widget.onRescan?.call(); }, - child: Text( - 'Voir détails', - style: AppTheme.of(context).bodyMedium.override( - color: AppTheme.of(context).white, - ), + child: Row( + spacing: 5, + children: [ + Icon( + Icons.qr_code, + color: AppTheme.of(context).white, + ), + Text( + 'Continuer', + style: AppTheme.of(context).bodyMedium.override( + color: AppTheme.of(context).white, + ), + ), + ], ), ), ), diff --git a/lib/pages/operation/reception/reception_scan_page_model.dart b/lib/pages/operation/reception/reception_scan_page_model.dart index 61a34fe..71ecae7 100644 --- a/lib/pages/operation/reception/reception_scan_page_model.dart +++ b/lib/pages/operation/reception/reception_scan_page_model.dart @@ -1,8 +1,9 @@ -import 'package:e_scan/backend/api/api_calls.dart'; import 'package:e_scan/backend/objectbox/entities/stock_picking/stock_picking_record_entity.dart'; +import 'package:e_scan/backend/objectbox/objectbox_manager.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:mobile_scanner/mobile_scanner.dart'; part 'reception_scan_page_model.freezed.dart'; @@ -20,20 +21,22 @@ class ReceptionScanPageModel Future getReceptionById({required int id}) async { try { + final stockPickingRecords = objectboxManager.store + .box(); state = state.copyWith(loading: true); - final res = await ApiCalls.getStockPikingById(id: id); - res.when( - (data) { - state = state.copyWith(loading: false, reception: data); - }, - (error) { - state = state.copyWith(loading: false); - }, - ); + final entity = stockPickingRecords.get(id); + state = state.copyWith(loading: false, reception: entity); } catch (e) { state = state.copyWith(loading: false); } } + + Future handleBarcode({required BarcodeCapture barcodeCapture}) async { + try { + final stockPickingRecords = objectboxManager.store + .box(); + } catch (e) {} + } } @freezed diff --git a/pubspec.yaml.bak b/pubspec.yaml.bak new file mode 100644 index 0000000..4ba24ca --- /dev/null +++ b/pubspec.yaml.bak @@ -0,0 +1,128 @@ +name: e_scan +description: "A new Flutter project." +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: "none" # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +# In Windows, build-name is used as the major, minor, and patch parts +# of the product and file versions while build-number is used as the build suffix. +version: 0.0.1+2 + +environment: + sdk: ^3.8.1 + +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. +dependencies: + flutter: + sdk: flutter + flutter_localizations: + sdk: flutter + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.8 + mobile_scanner: ^7.0.1 + go_router: ^15.2.3 + flutter_riverpod: ^2.6.1 + flutter_launcher_icons: ^0.14.4 + freezed_annotation: ^3.0.0 + freezed: ^3.0.6 + json_serializable: ^6.9.5 + json_annotation: ^4.9.0 + dio: ^5.8.0+1 + connectivity_plus: ^6.1.4 + responsive_framework: ^1.5.1 + flutter_secure_storage: ^9.2.4 + google_fonts: ^6.2.1 + shared_preferences: ^2.5.3 + objectbox: ^4.3.0 + objectbox_flutter_libs: any + path_provider: ^2.1.5 + path: ^1.9.1 + multiple_result: ^5.1.0 + +dev_dependencies: + flutter_test: + sdk: flutter + go_router_builder: ^3.0.1 + build_runner: ^2.4.15 + objectbox_generator: any + + # The "flutter_lints" package below contains a set of recommended lints to + # encourage good coding practices. The lint set provided by the package is + # activated in the `analysis_options.yaml` file located at the root of your + # package. See that file for information about deactivating specific lint + # rules and activating additional ones. + flutter_lints: ^6.0.0 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +flutter_icons: + android: true + ios: true + image_path: "assets/icons/ic_launcher.png" + adaptive_icon_foreground: "assets/icons/ic_launcher.png" # Set the foreground image (same or different from image_path) + adaptive_icon_background: "#FFFFFF" + remove_alpha_ios: true + min_sdk_android: 21 + +objectbox: + # Writes objectbox-model.json and objectbox.g.dart to lib/objectbox (and test/objectbox). + output_dir: backend/objectbox + # Or optionally specify the lib and test output folder separately. + # output_dir: + # lib: custom + # test: other + +# The following section is specific to Flutter packages. +flutter: + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + assets: + - assets/icons/ + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/to/resolution-aware-images + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/to/asset-from-package + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/to/font-from-package