diff --git a/example/lib/main.dart b/example/lib/main.dart index 63a172b..33926af 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -3,8 +3,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_zxing/flutter_zxing.dart'; import 'widgets/debug_info_widget.dart'; -import 'widgets/scan_from_gallery_widget.dart'; -import 'widgets/scan_mode_dropdown.dart'; import 'widgets/scan_result_widget.dart'; import 'widgets/unsupported_platform_widget.dart'; @@ -86,24 +84,13 @@ class _DemoPageState extends State { onScanFailure: _onScanFailure, onMultiScan: _onMultiScanSuccess, onMultiScanFailure: _onMultiScanFailure, + onMultiScanModeChanged: _onMultiScanModeChanged, isMultiScan: isMultiScan, scanDelay: isMultiScan ? Duration.zero : const Duration(milliseconds: 500), tryInverted: true, - ), - ScanFromGalleryWidget( - onScan: _onScanSuccess, - onScanFailure: _onScanFailure, - ), - // Change single/multi scan mode dropdown button - ScanModeDropdown( - isMultiScan: isMultiScan, - onChanged: (value) { - setState(() { - isMultiScan = value; - }); - }, + actionButtonsAlignment: Alignment.bottomLeft, ), if (showDebugInfo) DebugInfoWidget( @@ -192,4 +179,10 @@ class _DemoPageState extends State { failedScans = 0; }); } + + _onMultiScanModeChanged(bool isMultiScan) { + setState(() { + this.isMultiScan = isMultiScan; + }); + } } diff --git a/example/lib/widgets/debug_info_widget.dart b/example/lib/widgets/debug_info_widget.dart index 0996df1..94d0ad5 100644 --- a/example/lib/widgets/debug_info_widget.dart +++ b/example/lib/widgets/debug_info_widget.dart @@ -19,22 +19,37 @@ class DebugInfoWidget extends StatelessWidget { @override Widget build(BuildContext context) { + TextStyle? style = + Theme.of(context).textTheme.bodySmall?.copyWith(color: Colors.white); return Align( - alignment: Alignment.topLeft, + alignment: Alignment.topCenter, child: Padding( - padding: const EdgeInsets.all(8.0), + padding: const EdgeInsets.all(10.0), child: ClipRRect( borderRadius: BorderRadius.circular(10), child: Container( - color: Colors.white.withOpacity(0.7), - padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 5), - child: Column( + color: Colors.black54, + padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 0), + child: Row( mainAxisSize: MainAxisSize.min, children: [ - Text( - 'Success: $successScans\nFailed: $failedScans\nDuration: $duration ms', - style: Theme.of(context).textTheme.bodySmall, + Flexible( + child: SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: Row( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text('Success: $successScans', style: style), + const SizedBox(width: 10), + Text('Failed: $failedScans', style: style), + const SizedBox(width: 10), + Text('Duration: $duration ms', style: style), + ], + ), + ), ), + const SizedBox(width: 10), TextButton( onPressed: onReset, child: const Text('Reset'), diff --git a/example/lib/widgets/scan_from_gallery_widget.dart b/example/lib/widgets/scan_from_gallery_widget.dart deleted file mode 100644 index e0a2f61..0000000 --- a/example/lib/widgets/scan_from_gallery_widget.dart +++ /dev/null @@ -1,43 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_zxing/flutter_zxing.dart'; -import 'package:image_picker/image_picker.dart'; - -class ScanFromGalleryWidget extends StatelessWidget { - const ScanFromGalleryWidget({ - Key? key, - this.onScan, - this.onScanFailure, - }) : super(key: key); - - final Function(Code)? onScan; - final Function(Code?)? onScanFailure; - - @override - Widget build(BuildContext context) { - return Positioned( - bottom: 20, - right: 20, - child: FloatingActionButton( - onPressed: _onFromGalleryButtonTapped, - child: const Icon(Icons.image), - ), - ); - } - - void _onFromGalleryButtonTapped() async { - final XFile? file = - await ImagePicker().pickImage(source: ImageSource.gallery); - if (file != null) { - final Code? result = await zx.readBarcodeImagePath( - file, - params: DecodeParams(tryInverted: true), - ); - if (result != null && result.isValid) { - onScan?.call(result); - } else { - result?.error = 'No barcode found'; - onScanFailure?.call(result); - } - } - } -} diff --git a/example/pubspec.lock b/example/pubspec.lock index 00eac6f..b491d3e 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -5,10 +5,10 @@ packages: dependency: transitive description: name: archive - sha256: ed7cc591a948744994714375caf9a2ce89e1d82e8243997c8a2994d57181c212 + sha256: d6347d54a2d8028e0437e3c099f66fdb8ae02c4720c1e7534c9f24c10351f85d url: "https://pub.dev" source: hosted - version: "3.3.5" + version: "3.3.6" async: dependency: transitive description: @@ -29,34 +29,34 @@ packages: dependency: transitive description: name: camera - sha256: "045e7739f9362f3c01d5c7187ac7e2ba9e2bc9f2ae6470ecdcc5e34d060ed81c" + sha256: e7ac55af24a890d20276821eb3c95857074d03b7de6f9892b99a205ee30bd179 url: "https://pub.dev" source: hosted - version: "0.10.2+1" + version: "0.10.3" camera_android: dependency: transitive description: name: camera_android - sha256: "417e9eddda8025d7342f82ee53b214f149793e95c8490c3440a46144409f7966" + sha256: e491c836147f60dd8a54cf3895fd2960e13b21b78a9d15b563a1b6c70894f142 url: "https://pub.dev" source: hosted - version: "0.10.2+3" + version: "0.10.4" camera_avfoundation: dependency: transitive description: name: camera_avfoundation - sha256: eeda6a7947b1f7c47395c4459342d1e6866014186449e141a251f0549aba0c8b + sha256: "6a68c20593d4cd58974d555f74a48b244f9db28cc9156de57781122d11b8754b" url: "https://pub.dev" source: hosted - version: "0.9.10+2" + version: "0.9.11" camera_platform_interface: dependency: transitive description: name: camera_platform_interface - sha256: "0eedd642d905ca24f1c483fe9ea0d0e7287b86a402845c28d24df28cc7b0ee6e" + sha256: b632be28e61d00a233f67d98ea90fd7041956f27a1c65500188ee459be60e15f url: "https://pub.dev" source: hosted - version: "2.3.4" + version: "2.4.0" camera_web: dependency: transitive description: @@ -101,10 +101,10 @@ packages: dependency: transitive description: name: cross_file - sha256: f71079978789bc2fe78d79227f1f8cfe195b31bbd8db2399b0d15a4b96fb843b + sha256: "0b0036e8cccbfbe0555fd83c1d31a6f30b77a96b598b35a5d36dd41f718695e9" url: "https://pub.dev" source: hosted - version: "0.3.3+2" + version: "0.3.3+4" crypto: dependency: transitive description: @@ -167,14 +167,6 @@ packages: relative: true source: path version: "1.0.0" - font_awesome_flutter: - dependency: "direct main" - description: - name: font_awesome_flutter - sha256: "875dbb9ec1ad30d68102019ceb682760d06c72747c1c5b7885781b95f88569cc" - url: "https://pub.dev" - source: hosted - version: "10.3.0" http: dependency: transitive description: @@ -192,7 +184,7 @@ packages: source: hosted version: "4.0.2" image: - dependency: "direct main" + dependency: transitive description: name: image sha256: "8e9d133755c3e84c73288363e6343157c383a0c6c56fc51afcc5d4d7180306d6" @@ -200,7 +192,7 @@ packages: source: hosted version: "3.3.0" image_picker: - dependency: "direct main" + dependency: transitive description: name: image_picker sha256: f98d76672d309c8b7030c323b3394669e122d52b307d2bbd8d06bd70f5b2aabe @@ -211,10 +203,10 @@ packages: dependency: transitive description: name: image_picker_android - sha256: b1cbfec0f5aef427a18eb573f5445af8c9c568626bf3388553e40c263d3f7368 + sha256: "385f12ee9c7288575572c7873a332016ec45ebd092e1c2f6bd421b4a9ad21f1d" url: "https://pub.dev" source: hosted - version: "0.8.5+5" + version: "0.8.5+6" image_picker_for_web: dependency: transitive description: @@ -227,10 +219,10 @@ packages: dependency: transitive description: name: image_picker_ios - sha256: "39c013200046d14c58b71dc4fa3d00e425fc9c699d589136cd3ca018727c0493" + sha256: "8ffb14b43713d7c43fb21299cc18181cc5b39bd3ea1cc427a085c6400fe5aa52" url: "https://pub.dev" source: hosted - version: "0.8.6+6" + version: "0.8.6+7" image_picker_platform_interface: dependency: transitive description: @@ -405,5 +397,5 @@ packages: source: hosted version: "6.2.2" sdks: - dart: ">=2.18.0 <4.0.0" + dart: ">=2.18.0 <3.0.0" flutter: ">=3.3.0" diff --git a/example/pubspec.yaml b/example/pubspec.yaml index 092a8b7..df2247d 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -11,9 +11,6 @@ dependencies: sdk: flutter flutter_zxing: path: ../ - font_awesome_flutter: ^10.3.0 - image: ^3.3.0 - image_picker: ^0.8.6 dev_dependencies: flutter_lints: ^2.0.1 diff --git a/lib/flutter_zxing.dart b/lib/flutter_zxing.dart index 4982f12..3abc9e2 100644 --- a/lib/flutter_zxing.dart +++ b/lib/flutter_zxing.dart @@ -45,19 +45,19 @@ abstract class Zxing { }); /// Reads barcode from String image path - Future readBarcodeImagePathString( + Future readBarcodeImagePathString( String path, { DecodeParams? params, }); /// Reads barcode from XFile image path - Future readBarcodeImagePath( + Future readBarcodeImagePath( XFile path, { DecodeParams? params, }); /// Reads barcode from image url - Future readBarcodeImageUrl( + Future readBarcodeImageUrl( String url, { DecodeParams? params, }); diff --git a/lib/src/logic/barcode_reader.dart b/lib/src/logic/barcode_reader.dart index 00211a0..ae2c8da 100644 --- a/lib/src/logic/barcode_reader.dart +++ b/lib/src/logic/barcode_reader.dart @@ -1,7 +1,7 @@ part of 'zxing.dart'; /// Reads barcode from String image path -Future zxingReadBarcodeImagePathString( +Future zxingReadBarcodeImagePathString( String path, { DecodeParams? params, }) => @@ -11,14 +11,14 @@ Future zxingReadBarcodeImagePathString( ); /// Reads barcode from XFile image path -Future zxingReadBarcodeImagePath( +Future zxingReadBarcodeImagePath( XFile path, { DecodeParams? params, }) async { final Uint8List imageBytes = await path.readAsBytes(); imglib.Image? image = imglib.decodeImage(imageBytes); if (image == null) { - return null; + return Code(); } image = resizeToMaxSize(image, params?.maxSize); return zxingReadBarcode( @@ -30,7 +30,7 @@ Future zxingReadBarcodeImagePath( } /// Reads barcode from image url -Future zxingReadBarcodeImageUrl( +Future zxingReadBarcodeImageUrl( String url, { DecodeParams? params, }) async { @@ -38,7 +38,7 @@ Future zxingReadBarcodeImageUrl( (await NetworkAssetBundle(Uri.parse(url)).load(url)).buffer.asUint8List(); imglib.Image? image = imglib.decodeImage(imageBytes); if (image == null) { - return null; + return Code(error: 'Failed to decode image'); } image = resizeToMaxSize(image, params?.maxSize); return zxingReadBarcode( diff --git a/lib/src/logic/barcodes_reader.dart b/lib/src/logic/barcodes_reader.dart index dd6bcea..dd7a732 100644 --- a/lib/src/logic/barcodes_reader.dart +++ b/lib/src/logic/barcodes_reader.dart @@ -18,7 +18,7 @@ Future zxingReadBarcodesImagePath( final Uint8List imageBytes = await path.readAsBytes(); imglib.Image? image = imglib.decodeImage(imageBytes); if (image == null) { - return Codes([], 0); + return Codes(); } image = resizeToMaxSize(image, params?.maxSize); return zxingReadBarcodes( @@ -38,7 +38,7 @@ Future zxingReadBarcodesImageUrl( (await NetworkAssetBundle(Uri.parse(url)).load(url)).buffer.asUint8List(); imglib.Image? image = imglib.decodeImage(imageBytes); if (image == null) { - return Codes([], 0); + return Codes(); } image = resizeToMaxSize(image, params?.maxSize); return zxingReadBarcodes( @@ -80,5 +80,5 @@ Codes _readBarcodes( for (int i = 0; i < result.count; i++) { results.add(result.results.elementAt(i).ref.toCode()); } - return Codes(results, result.duration); + return Codes(codes: results, duration: result.duration); } diff --git a/lib/src/models/code.dart b/lib/src/models/code.dart index 743cb90..ba24b9f 100644 --- a/lib/src/models/code.dart +++ b/lib/src/models/code.dart @@ -4,17 +4,17 @@ import 'position.dart'; // Represents a barcode code class Code { - Code( + Code({ this.text, - this.isValid, + this.isValid = false, this.error, this.rawBytes, this.format, this.position, - this.isInverted, - this.isMirrored, - this.duration, - ); + this.isInverted = false, + this.isMirrored = false, + this.duration = 0, + }); String? text; // The text of the code bool isValid; // Whether the code is valid @@ -29,10 +29,10 @@ class Code { // Represents a list of barcode codes class Codes { - Codes( - this.codes, - this.duration, - ); + Codes({ + this.codes = const [], + this.duration = 0, + }); List codes; // The list of codes int duration; // The duration of the decoding in milliseconds diff --git a/lib/src/ui/reader_widget.dart b/lib/src/ui/reader_widget.dart index 2aa2ba9..cbfd92f 100644 --- a/lib/src/ui/reader_widget.dart +++ b/lib/src/ui/reader_widget.dart @@ -4,8 +4,10 @@ import 'dart:math'; import 'package:camera/camera.dart'; import 'package:flutter/material.dart'; +import 'package:image_picker/image_picker.dart'; import '../../flutter_zxing.dart'; +import 'scan_mode_dropdown.dart'; /// Widget to scan a code from the camera stream class ReaderWidget extends StatefulWidget { @@ -16,13 +18,18 @@ class ReaderWidget extends StatefulWidget { this.onMultiScan, this.onMultiScanFailure, this.onControllerCreated, + this.onMultiScanModeChanged, this.isMultiScan = false, this.codeFormat = Format.any, this.tryHarder = false, this.tryInverted = false, this.showScannerOverlay = true, this.scannerOverlay, + this.actionButtonsAlignment = Alignment.topCenter, + this.actionButtonsPadding = const EdgeInsets.all(10), this.showFlashlight = true, + this.showToggleCamera = true, + this.showGallery = true, this.allowPinchZoom = true, this.scanDelay = const Duration(milliseconds: 1000), this.scanDelaySuccess = const Duration(milliseconds: 1000), @@ -47,6 +54,9 @@ class ReaderWidget extends StatefulWidget { /// Called when the camera controller is created final Function(CameraController?)? onControllerCreated; + /// Called when the multi scan mode is changed + final Function(bool)? onMultiScanModeChanged; + /// Allow multiple scans final bool isMultiScan; @@ -65,9 +75,21 @@ class ReaderWidget extends StatefulWidget { /// Custom scanner overlay final ScannerOverlay? scannerOverlay; + /// Align for action buttons + final AlignmentGeometry actionButtonsAlignment; + + /// Padding for action buttons + final EdgeInsetsGeometry actionButtonsPadding; + /// Show flashlight button final bool showFlashlight; + /// Show toggle camera + final bool showGallery; + + /// Show toggle camera + final bool showToggleCamera; + /// Allow pinch zoom final bool allowPinchZoom; @@ -93,6 +115,7 @@ class ReaderWidget extends StatefulWidget { class _ReaderWidgetState extends State with TickerProviderStateMixin, WidgetsBindingObserver { List cameras = []; + CameraDescription? selectedCamera; CameraController? controller; bool _cameraOn = false; @@ -106,12 +129,15 @@ class _ReaderWidgetState extends State // true when code detecting is ongoing bool _isProcessing = false; - Codes results = Codes([], 0); + bool isMultiScan = false; + + Codes results = Codes(); @override void initState() { super.initState(); WidgetsBinding.instance.addObserver(this); + isMultiScan = widget.isMultiScan; initStateAsync(); } @@ -123,7 +149,8 @@ class _ReaderWidgetState extends State setState(() { this.cameras = cameras; if (cameras.isNotEmpty) { - onNewCameraSelected(cameras.first); + selectedCamera = cameras.first; + onNewCameraSelected(selectedCamera); } }); }); @@ -171,7 +198,10 @@ class _ReaderWidgetState extends State } } - Future onNewCameraSelected(CameraDescription cameraDescription) async { + Future onNewCameraSelected(CameraDescription? cameraDescription) async { + if (cameraDescription == null) { + return; + } final CameraController? oldController = controller; if (oldController != null) { // controller?.removeListener(rebuildOnMount); @@ -235,7 +265,7 @@ class _ReaderWidgetState extends State await Future.delayed(widget.scanDelaySuccess); } } else { - results = Codes([], 0); + results = Codes(); widget.onMultiScanFailure?.call(result); } } else { @@ -327,45 +357,106 @@ class _ReaderWidgetState extends State controller?.setZoomLevel(_scaleFactor); }, ), - if (widget.showFlashlight && isCameraReady) - Positioned( - bottom: 20, - left: 20, - child: FloatingActionButton( - onPressed: () { - FlashMode mode = controller!.value.flashMode; - if (mode == FlashMode.torch) { - mode = FlashMode.off; - } else { - mode = FlashMode.torch; - } - controller?.setFlashMode(mode); - setState(() {}); - }, - backgroundColor: Colors.black26, - child: _FlashIcon( - flashMode: controller?.value.flashMode ?? FlashMode.off)), + Align( + alignment: widget.actionButtonsAlignment, + child: Padding( + padding: widget.actionButtonsPadding, + child: ClipRRect( + borderRadius: BorderRadius.circular(10), + child: Container( + color: Colors.black.withOpacity(0.5), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + if (widget.showFlashlight && isCameraReady) + IconButton( + onPressed: _onFlashButtonTapped, + color: Colors.white, + icon: Icon( + _flashIcon( + controller?.value.flashMode ?? FlashMode.off), + ), + ), + if (widget.showGallery && isCameraReady) + IconButton( + onPressed: _onGalleryButtonTapped, + color: Colors.white, + icon: const Icon(Icons.photo_library), + ), + if (widget.showToggleCamera && isCameraReady) + IconButton( + onPressed: _onCameraButtonTapped, + color: Colors.white, + icon: const Icon(Icons.switch_camera), + ), + ], + ), + ), + ), ), + ), + ScanModeDropdown( + isMultiScan: isMultiScan, + onChanged: (bool value) { + setState(() { + isMultiScan = value; + }); + widget.onMultiScanModeChanged?.call(value); + }, + ), ], ); } -} -class _FlashIcon extends StatelessWidget { - const _FlashIcon({required this.flashMode}); - final FlashMode flashMode; + void _onFlashButtonTapped() { + FlashMode mode = controller!.value.flashMode; + if (mode == FlashMode.torch) { + mode = FlashMode.off; + } else { + mode = FlashMode.torch; + } + controller?.setFlashMode(mode); + setState(() {}); + } - @override - Widget build(BuildContext context) { - switch (flashMode) { + Future _onGalleryButtonTapped() async { + final XFile? file = + await ImagePicker().pickImage(source: ImageSource.gallery); + if (file != null) { + final Code result = await zx.readBarcodeImagePath( + file, + params: DecodeParams( + format: widget.codeFormat, + tryHarder: widget.tryHarder, + tryInverted: widget.tryInverted, + isMultiScan: widget.isMultiScan, + ), + ); + if (result.isValid) { + widget.onScan?.call(result); + } else { + widget.onScanFailure?.call(result); + } + } + } + + void _onCameraButtonTapped() { + final int cameraIndex = cameras.indexOf(controller!.description); + final int nextCameraIndex = (cameraIndex + 1) % cameras.length; + selectedCamera = cameras[nextCameraIndex]; + onNewCameraSelected(selectedCamera); + } + + IconData _flashIcon(FlashMode mode) { + switch (mode) { case FlashMode.torch: - return const Icon(Icons.flash_on); + return Icons.flash_on; case FlashMode.off: - return const Icon(Icons.flash_off); + return Icons.flash_off; case FlashMode.always: - return const Icon(Icons.flash_on); + return Icons.flash_on; case FlashMode.auto: - return const Icon(Icons.flash_auto); + return Icons.flash_auto; } } } diff --git a/example/lib/widgets/scan_mode_dropdown.dart b/lib/src/ui/scan_mode_dropdown.dart similarity index 50% rename from example/lib/widgets/scan_mode_dropdown.dart rename to lib/src/ui/scan_mode_dropdown.dart index 39315fe..0c4811f 100644 --- a/example/lib/widgets/scan_mode_dropdown.dart +++ b/lib/src/ui/scan_mode_dropdown.dart @@ -2,10 +2,10 @@ import 'package:flutter/material.dart'; class ScanModeDropdown extends StatelessWidget { const ScanModeDropdown({ - Key? key, + super.key, this.isMultiScan = false, this.onChanged, - }) : super(key: key); + }); final bool isMultiScan; final Function(bool value)? onChanged; @@ -13,30 +13,36 @@ class ScanModeDropdown extends StatelessWidget { @override Widget build(BuildContext context) { return Align( - alignment: Alignment.bottomCenter, + alignment: Alignment.bottomRight, child: Padding( - padding: const EdgeInsets.only(bottom: 20), + padding: const EdgeInsets.all(10), child: Container( - height: 56, - padding: const EdgeInsets.symmetric(horizontal: 16), + padding: const EdgeInsets.symmetric(horizontal: 10), decoration: BoxDecoration( - color: Colors.white, + color: Colors.black54, borderRadius: BorderRadius.circular(10), ), child: DropdownButtonHideUnderline( child: DropdownButton( value: isMultiScan, - items: const [ - DropdownMenuItem( + dropdownColor: Colors.black87, + items: const >[ + DropdownMenuItem( value: false, - child: Text('Single Scan'), + child: Text( + 'Single Code', + style: TextStyle(color: Colors.white), + ), ), - DropdownMenuItem( + DropdownMenuItem( value: true, - child: Text('Multi Scan'), + child: Text( + 'Multi Code', + style: TextStyle(color: Colors.white), + ), ), ], - onChanged: (value) => onChanged?.call(value ?? false), + onChanged: (bool? value) => onChanged?.call(value ?? false), ), ), ), diff --git a/lib/src/utils/extentions.dart b/lib/src/utils/extentions.dart index 09865dc..8b08d0f 100644 --- a/lib/src/utils/extentions.dart +++ b/lib/src/utils/extentions.dart @@ -8,17 +8,17 @@ import '../../zxing_mobile.dart'; extension CodeExt on CodeResult { Code toCode() { return Code( - text == nullptr ? null : text.cast().toDartString(), - isValid == 1, - error == nullptr ? null : error.cast().toDartString(), - bytes == nullptr + text: text == nullptr ? null : text.cast().toDartString(), + isValid: isValid == 1, + error: error == nullptr ? null : error.cast().toDartString(), + rawBytes: bytes == nullptr ? null : Uint8List.fromList(bytes.cast().asTypedList(length)), - format, - pos == nullptr ? null : pos.ref.toPosition(), - isInverted == 1, - isMirrored == 1, - duration, + format: format, + position: pos == nullptr ? null : pos.ref.toPosition(), + isInverted: isInverted == 1, + isMirrored: isMirrored == 1, + duration: duration, ); } } diff --git a/lib/zxing_mobile.dart b/lib/zxing_mobile.dart index 7b61a66..2be6687 100644 --- a/lib/zxing_mobile.dart +++ b/lib/zxing_mobile.dart @@ -53,21 +53,21 @@ class ZxingMobile implements Zxing { await zxingProcessCameraImage(image, params: params) as Codes; @override - Future readBarcodeImagePathString( + Future readBarcodeImagePathString( String path, { DecodeParams? params, }) => zxingReadBarcodeImagePathString(path, params: params); @override - Future readBarcodeImagePath( + Future readBarcodeImagePath( XFile path, { DecodeParams? params, }) => zxingReadBarcodeImagePath(path, params: params); @override - Future readBarcodeImageUrl( + Future readBarcodeImageUrl( String url, { DecodeParams? params, }) => diff --git a/lib/zxing_web.dart b/lib/zxing_web.dart index 880d7e2..043e1be 100644 --- a/lib/zxing_web.dart +++ b/lib/zxing_web.dart @@ -46,21 +46,21 @@ class ZxingWeb implements Zxing { throw UnimplementedError(); @override - Future readBarcodeImagePathString( + Future readBarcodeImagePathString( String path, { DecodeParams? params, }) => throw UnimplementedError(); @override - Future readBarcodeImagePath( + Future readBarcodeImagePath( XFile path, { DecodeParams? params, }) => throw UnimplementedError(); @override - Future readBarcodeImageUrl( + Future readBarcodeImageUrl( String url, { DecodeParams? params, }) => diff --git a/pubspec.yaml b/pubspec.yaml index 77f8a87..299eb90 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -13,6 +13,7 @@ dependencies: flutter: sdk: flutter image: ^3.0.0 + image_picker: ^0.8.0 dev_dependencies: ffigen: ^7.0.0 # dart run ffigen diff --git a/src/native_zxing.cpp b/src/native_zxing.cpp index 31d3e56..0b3b105 100644 --- a/src/native_zxing.cpp +++ b/src/native_zxing.cpp @@ -3,6 +3,7 @@ #include "MultiFormatWriter.h" #include "BitMatrix.h" #include "native_zxing.h" +#include "ZXVersion.h" #include #include @@ -22,8 +23,7 @@ extern "C" FUNCTION_ATTRIBUTE char const *version() { - // TODO: use ZXING_VERSION_STR after zxing-cpp 2.1 is released - return "2.0.0"; + return ZXING_VERSION_STR; } FUNCTION_ATTRIBUTE diff --git a/src/zxing b/src/zxing index 86b253d..72023ad 160000 --- a/src/zxing +++ b/src/zxing @@ -1 +1 @@ -Subproject commit 86b253d699b13b1da8fca0c5e4fbd62691582d5a +Subproject commit 72023ad3dded9f3f94b5d85bc10385e0cf76620a diff --git a/zxscanner/pubspec.lock b/zxscanner/pubspec.lock index 3a1c901..4269f23 100644 --- a/zxscanner/pubspec.lock +++ b/zxscanner/pubspec.lock @@ -5,299 +5,296 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - url: "https://pub.dartlang.org" + sha256: "0c80aeab9bc807ab10022cd3b2f4cf2ecdf231949dc1ddd9442406a003f19201" + url: "https://pub.dev" source: hosted version: "52.0.0" analyzer: dependency: transitive description: name: analyzer - url: "https://pub.dartlang.org" + sha256: cd8ee83568a77f3ae6b913a36093a1c9b1264e7cb7f834d9ddd2311dade9c1f4 + url: "https://pub.dev" source: hosted version: "5.4.0" archive: dependency: transitive description: name: archive -<<<<<<< HEAD sha256: d6347d54a2d8028e0437e3c099f66fdb8ae02c4720c1e7534c9f24c10351f85d url: "https://pub.dev" -======= - url: "https://pub.dartlang.org" ->>>>>>> 5a44f6cb68a580e377a18e6cc0210d0b36477f77 source: hosted version: "3.3.6" args: dependency: transitive description: name: args - url: "https://pub.dartlang.org" + sha256: "139d809800a412ebb26a3892da228b2d0ba36f0ef5d9a82166e5e52ec8d61611" + url: "https://pub.dev" source: hosted version: "2.3.2" async: dependency: transitive description: name: async - url: "https://pub.dartlang.org" + sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + url: "https://pub.dev" source: hosted version: "2.10.0" boolean_selector: dependency: transitive description: name: boolean_selector - url: "https://pub.dartlang.org" + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" source: hosted version: "2.1.1" build: dependency: transitive description: name: build - url: "https://pub.dartlang.org" + sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777" + url: "https://pub.dev" source: hosted version: "2.3.1" build_config: dependency: transitive description: name: build_config - url: "https://pub.dartlang.org" + sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 + url: "https://pub.dev" source: hosted version: "1.1.1" build_daemon: dependency: transitive description: name: build_daemon - url: "https://pub.dartlang.org" + sha256: "6bc5544ea6ce4428266e7ea680e945c68806c4aae2da0eb5e9ccf38df8d6acbf" + url: "https://pub.dev" source: hosted version: "3.1.0" build_resolvers: dependency: transitive description: name: build_resolvers - url: "https://pub.dartlang.org" + sha256: "7c35a3a7868626257d8aee47b51c26b9dba11eaddf3431117ed2744951416aab" + url: "https://pub.dev" source: hosted version: "2.1.0" build_runner: dependency: "direct dev" description: name: build_runner - url: "https://pub.dartlang.org" + sha256: b0a8a7b8a76c493e85f1b84bffa0588859a06197863dba8c9036b15581fd9727 + url: "https://pub.dev" source: hosted version: "2.3.3" build_runner_core: dependency: transitive description: name: build_runner_core - url: "https://pub.dartlang.org" + sha256: "14febe0f5bac5ae474117a36099b4de6f1dbc52df6c5e55534b3da9591bf4292" + url: "https://pub.dev" source: hosted version: "7.2.7" built_collection: dependency: transitive description: name: built_collection - url: "https://pub.dartlang.org" + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" source: hosted version: "5.1.1" built_value: dependency: transitive description: name: built_value - url: "https://pub.dartlang.org" + sha256: "169565c8ad06adb760c3645bf71f00bff161b00002cace266cad42c5d22a7725" + url: "https://pub.dev" source: hosted version: "8.4.3" camera: dependency: transitive description: name: camera -<<<<<<< HEAD sha256: e7ac55af24a890d20276821eb3c95857074d03b7de6f9892b99a205ee30bd179 url: "https://pub.dev" -======= - url: "https://pub.dartlang.org" ->>>>>>> 5a44f6cb68a580e377a18e6cc0210d0b36477f77 source: hosted version: "0.10.3" camera_android: dependency: transitive description: name: camera_android -<<<<<<< HEAD sha256: "4cef01e8e78fe27c809a429bf74352ab94ab76b0c980e3ec708f1414614e3d9f" url: "https://pub.dev" -======= - url: "https://pub.dartlang.org" ->>>>>>> 5a44f6cb68a580e377a18e6cc0210d0b36477f77 source: hosted version: "0.10.3" camera_avfoundation: dependency: transitive description: name: camera_avfoundation -<<<<<<< HEAD sha256: "6a68c20593d4cd58974d555f74a48b244f9db28cc9156de57781122d11b8754b" url: "https://pub.dev" -======= - url: "https://pub.dartlang.org" ->>>>>>> 5a44f6cb68a580e377a18e6cc0210d0b36477f77 source: hosted version: "0.9.11" camera_platform_interface: dependency: transitive description: name: camera_platform_interface - url: "https://pub.dartlang.org" + sha256: "0eedd642d905ca24f1c483fe9ea0d0e7287b86a402845c28d24df28cc7b0ee6e" + url: "https://pub.dev" source: hosted version: "2.3.4" camera_web: dependency: transitive description: name: camera_web - url: "https://pub.dartlang.org" + sha256: "496de93c5d462738ce991dbfe91fb19026f115ed36406700a20a380fb0018299" + url: "https://pub.dev" source: hosted version: "0.3.1+1" characters: dependency: transitive description: name: characters - url: "https://pub.dartlang.org" + sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + url: "https://pub.dev" source: hosted version: "1.2.1" checked_yaml: dependency: transitive description: name: checked_yaml - url: "https://pub.dartlang.org" + sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311" + url: "https://pub.dev" source: hosted version: "2.0.2" clock: dependency: transitive description: name: clock - url: "https://pub.dartlang.org" + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" source: hosted version: "1.1.1" code_builder: dependency: transitive description: name: code_builder - url: "https://pub.dartlang.org" + sha256: "0d43dd1288fd145de1ecc9a3948ad4a6d5a82f0a14c4fdd0892260787d975cbe" + url: "https://pub.dev" source: hosted version: "4.4.0" collection: dependency: transitive description: name: collection - url: "https://pub.dartlang.org" + sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + url: "https://pub.dev" source: hosted version: "1.17.0" convert: dependency: transitive description: name: convert - url: "https://pub.dartlang.org" + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" source: hosted version: "3.1.1" convex_bottom_bar: dependency: "direct main" description: name: convex_bottom_bar -<<<<<<< HEAD sha256: ebf0f3deb1e8e99374d844fee7485d2980ec502dedfaad395c12118477933aef url: "https://pub.dev" -======= - url: "https://pub.dartlang.org" ->>>>>>> 5a44f6cb68a580e377a18e6cc0210d0b36477f77 source: hosted version: "3.2.0" cross_file: dependency: transitive description: name: cross_file -<<<<<<< HEAD sha256: "0b0036e8cccbfbe0555fd83c1d31a6f30b77a96b598b35a5d36dd41f718695e9" url: "https://pub.dev" -======= - url: "https://pub.dartlang.org" ->>>>>>> 5a44f6cb68a580e377a18e6cc0210d0b36477f77 source: hosted version: "0.3.3+4" crypto: dependency: transitive description: name: crypto - url: "https://pub.dartlang.org" + sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + url: "https://pub.dev" source: hosted version: "3.0.2" csslib: dependency: transitive description: name: csslib - url: "https://pub.dartlang.org" + sha256: b36c7f7e24c0bdf1bf9a3da461c837d1de64b9f8beb190c9011d8c72a3dfd745 + url: "https://pub.dev" source: hosted version: "0.17.2" cupertino_icons: dependency: "direct main" description: name: cupertino_icons - url: "https://pub.dartlang.org" + sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be + url: "https://pub.dev" source: hosted version: "1.0.5" dart_style: dependency: transitive description: name: dart_style - url: "https://pub.dartlang.org" + sha256: "7a03456c3490394c8e7665890333e91ae8a49be43542b616e414449ac358acd4" + url: "https://pub.dev" source: hosted version: "2.2.4" fake_async: dependency: transitive description: name: fake_async - url: "https://pub.dartlang.org" + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" source: hosted version: "1.3.1" ffi: dependency: transitive description: name: ffi - url: "https://pub.dartlang.org" + sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978 + url: "https://pub.dev" source: hosted version: "2.0.1" file: dependency: transitive description: name: file - url: "https://pub.dartlang.org" + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + url: "https://pub.dev" source: hosted version: "6.1.4" fixnum: dependency: transitive description: name: fixnum -<<<<<<< HEAD sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" url: "https://pub.dev" -======= - url: "https://pub.dartlang.org" ->>>>>>> 5a44f6cb68a580e377a18e6cc0210d0b36477f77 source: hosted version: "1.1.0" flex_color_scheme: dependency: "direct main" description: name: flex_color_scheme - url: "https://pub.dartlang.org" + sha256: "03a0ad67cc224b20aab9f9a775a6cef76c8f884887902a2d94635c187858b31b" + url: "https://pub.dev" source: hosted version: "6.1.2" flex_seed_scheme: dependency: transitive description: name: flex_seed_scheme -<<<<<<< HEAD sha256: e61950ccadfb8d43ce5cdef382e8f689edc053ce6b837e277539410ecfb3b3e5 url: "https://pub.dev" -======= - url: "https://pub.dartlang.org" ->>>>>>> 5a44f6cb68a580e377a18e6cc0210d0b36477f77 source: hosted version: "1.2.2" flutter: @@ -309,7 +306,8 @@ packages: dependency: "direct dev" description: name: flutter_lints - url: "https://pub.dartlang.org" + sha256: aeb0b80a8b3709709c9cc496cdc027c5b3216796bc0af0ce1007eaf24464fd4c + url: "https://pub.dev" source: hosted version: "2.0.1" flutter_localizations: @@ -321,33 +319,32 @@ packages: dependency: "direct main" description: name: flutter_markdown -<<<<<<< HEAD sha256: "818cf6c28377ba2c91ed283c96fd712e9c175dd2d2488eb7fc93b6afb9ad2e08" url: "https://pub.dev" -======= - url: "https://pub.dartlang.org" ->>>>>>> 5a44f6cb68a580e377a18e6cc0210d0b36477f77 source: hosted version: "0.6.13+1" flutter_mobx: dependency: "direct main" description: name: flutter_mobx - url: "https://pub.dartlang.org" + sha256: "0da4add0016387a7bf309a0d0c41d36c6b3ae25ed7a176409267f166509e723e" + url: "https://pub.dev" source: hosted version: "2.0.6+5" flutter_native_splash: dependency: "direct dev" description: name: flutter_native_splash - url: "https://pub.dartlang.org" + sha256: "6777a3abb974021a39b5fdd2d46a03ca390e03903b6351f21d10e7ecc969f12d" + url: "https://pub.dev" source: hosted version: "2.2.16" flutter_plugin_android_lifecycle: dependency: transitive description: name: flutter_plugin_android_lifecycle - url: "https://pub.dartlang.org" + sha256: "60fc7b78455b94e6de2333d2f95196d32cf5c22f4b0b0520a628804cb463503b" + url: "https://pub.dev" source: hosted version: "2.0.7" flutter_test: @@ -364,435 +361,480 @@ packages: dependency: "direct main" description: name: flutter_zxing - url: "https://pub.dartlang.org" + sha256: fe7fb8d53ade636758fde71a90f85197346e2fd61e268c2bad287f1fa33abf63 + url: "https://pub.dev" source: hosted version: "1.0.0" font_awesome_flutter: dependency: "direct main" description: name: font_awesome_flutter - url: "https://pub.dartlang.org" + sha256: "875dbb9ec1ad30d68102019ceb682760d06c72747c1c5b7885781b95f88569cc" + url: "https://pub.dev" source: hosted version: "10.3.0" frontend_server_client: dependency: transitive description: name: frontend_server_client - url: "https://pub.dartlang.org" + sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + url: "https://pub.dev" source: hosted version: "3.2.0" glob: dependency: transitive description: name: glob - url: "https://pub.dartlang.org" + sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" + url: "https://pub.dev" source: hosted version: "2.1.1" graphs: dependency: transitive description: name: graphs - url: "https://pub.dartlang.org" + sha256: f9e130f3259f52d26f0cfc0e964513796dafed572fa52e45d2f8d6ca14db39b2 + url: "https://pub.dev" source: hosted version: "2.2.0" hive: dependency: "direct main" description: name: hive - url: "https://pub.dartlang.org" + sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" + url: "https://pub.dev" source: hosted version: "2.2.3" hive_flutter: dependency: "direct main" description: name: hive_flutter - url: "https://pub.dartlang.org" + sha256: dca1da446b1d808a51689fb5d0c6c9510c0a2ba01e22805d492c73b68e33eecc + url: "https://pub.dev" source: hosted version: "1.1.0" hive_generator: dependency: "direct dev" description: name: hive_generator - url: "https://pub.dartlang.org" + sha256: "65998cc4d2cd9680a3d9709d893d2f6bb15e6c1f92626c3f1fa650b4b3281521" + url: "https://pub.dev" source: hosted version: "2.0.0" html: dependency: transitive description: name: html - url: "https://pub.dartlang.org" + sha256: d9793e10dbe0e6c364f4c59bf3e01fb33a9b2a674bc7a1081693dba0614b6269 + url: "https://pub.dev" source: hosted version: "0.15.1" http: dependency: transitive description: name: http - url: "https://pub.dartlang.org" + sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" + url: "https://pub.dev" source: hosted version: "0.13.5" http_multi_server: dependency: transitive description: name: http_multi_server - url: "https://pub.dartlang.org" + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" source: hosted version: "3.2.1" http_parser: dependency: transitive description: name: http_parser - url: "https://pub.dartlang.org" + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" source: hosted version: "4.0.2" icons_launcher: dependency: "direct dev" description: name: icons_launcher - url: "https://pub.dartlang.org" + sha256: c8e3ae1263822feafaec8a3c666ec84c2143470e1612f5481f1c875024c5f37e + url: "https://pub.dev" source: hosted version: "2.0.6" image: dependency: "direct main" description: name: image - url: "https://pub.dartlang.org" + sha256: "8e9d133755c3e84c73288363e6343157c383a0c6c56fc51afcc5d4d7180306d6" + url: "https://pub.dev" source: hosted version: "3.3.0" image_picker: dependency: "direct main" description: name: image_picker - url: "https://pub.dartlang.org" + sha256: f98d76672d309c8b7030c323b3394669e122d52b307d2bbd8d06bd70f5b2aabe + url: "https://pub.dev" source: hosted version: "0.8.6+1" image_picker_android: dependency: transitive description: name: image_picker_android - url: "https://pub.dartlang.org" + sha256: b1cbfec0f5aef427a18eb573f5445af8c9c568626bf3388553e40c263d3f7368 + url: "https://pub.dev" source: hosted version: "0.8.5+5" image_picker_for_web: dependency: transitive description: name: image_picker_for_web - url: "https://pub.dartlang.org" + sha256: "7d319fb74955ca46d9bf7011497860e3923bb67feebcf068f489311065863899" + url: "https://pub.dev" source: hosted version: "2.1.10" image_picker_ios: dependency: transitive description: name: image_picker_ios - url: "https://pub.dartlang.org" + sha256: "39c013200046d14c58b71dc4fa3d00e425fc9c699d589136cd3ca018727c0493" + url: "https://pub.dev" source: hosted version: "0.8.6+6" image_picker_platform_interface: dependency: transitive description: name: image_picker_platform_interface - url: "https://pub.dartlang.org" + sha256: "7cef2f28f4f2fef99180f636c3d446b4ccbafd6ba0fad2adc9a80c4040f656b8" + url: "https://pub.dev" source: hosted version: "2.6.2" intl: dependency: "direct main" description: name: intl - url: "https://pub.dartlang.org" + sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" + url: "https://pub.dev" source: hosted version: "0.17.0" io: dependency: transitive description: name: io - url: "https://pub.dartlang.org" + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" source: hosted version: "1.0.4" js: dependency: transitive description: name: js - url: "https://pub.dartlang.org" + sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + url: "https://pub.dev" source: hosted version: "0.6.5" json_annotation: dependency: transitive description: name: json_annotation - url: "https://pub.dartlang.org" + sha256: c33da08e136c3df0190bd5bbe51ae1df4a7d96e7954d1d7249fea2968a72d317 + url: "https://pub.dev" source: hosted version: "4.8.0" lints: dependency: transitive description: name: lints - url: "https://pub.dartlang.org" + sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593" + url: "https://pub.dev" source: hosted version: "2.0.1" logging: dependency: transitive description: name: logging -<<<<<<< HEAD sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" url: "https://pub.dev" -======= - url: "https://pub.dartlang.org" ->>>>>>> 5a44f6cb68a580e377a18e6cc0210d0b36477f77 source: hosted version: "1.1.1" markdown: dependency: transitive description: name: markdown - url: "https://pub.dartlang.org" + sha256: c2b81e184067b41d0264d514f7cdaa2c02d38511e39d6521a1ccc238f6d7b3f2 + url: "https://pub.dev" source: hosted version: "6.0.1" matcher: dependency: transitive description: name: matcher - url: "https://pub.dartlang.org" + sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + url: "https://pub.dev" source: hosted version: "0.12.13" material_color_utilities: dependency: transitive description: name: material_color_utilities - url: "https://pub.dartlang.org" + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + url: "https://pub.dev" source: hosted version: "0.2.0" meta: dependency: transitive description: name: meta - url: "https://pub.dartlang.org" + sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + url: "https://pub.dev" source: hosted version: "1.8.0" mime: dependency: transitive description: name: mime - url: "https://pub.dartlang.org" + sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + url: "https://pub.dev" source: hosted version: "1.0.4" mobx: dependency: "direct main" description: name: mobx - url: "https://pub.dartlang.org" + sha256: "41f814e90db4d5fe1303efc570db837a56507832c08c4f0842320fa3d40c14cd" + url: "https://pub.dev" source: hosted version: "2.1.3" mobx_codegen: dependency: "direct dev" description: name: mobx_codegen - url: "https://pub.dartlang.org" + sha256: "86122e410d8ea24dda0c69adb5c2a6ccadd5ce02ad46e144764e0d0184a06181" + url: "https://pub.dev" source: hosted version: "2.1.1" package_config: dependency: transitive description: name: package_config - url: "https://pub.dartlang.org" + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" source: hosted version: "2.1.0" path: dependency: transitive description: name: path - url: "https://pub.dartlang.org" + sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + url: "https://pub.dev" source: hosted version: "1.8.2" path_provider: dependency: "direct main" description: name: path_provider - url: "https://pub.dartlang.org" + sha256: dcea5feb97d8abf90cab9e9030b497fb7c3cbf26b7a1fe9e3ef7dcb0a1ddec95 + url: "https://pub.dev" source: hosted version: "2.0.12" path_provider_android: dependency: transitive description: name: path_provider_android - url: "https://pub.dartlang.org" + sha256: a776c088d671b27f6e3aa8881d64b87b3e80201c64e8869b811325de7a76c15e + url: "https://pub.dev" source: hosted version: "2.0.22" path_provider_foundation: dependency: transitive description: name: path_provider_foundation -<<<<<<< HEAD sha256: "62a68e7e1c6c459f9289859e2fae58290c981ce21d1697faf54910fe1faa4c74" url: "https://pub.dev" -======= - url: "https://pub.dartlang.org" ->>>>>>> 5a44f6cb68a580e377a18e6cc0210d0b36477f77 source: hosted version: "2.1.1" path_provider_linux: dependency: transitive description: name: path_provider_linux - url: "https://pub.dartlang.org" + sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379 + url: "https://pub.dev" source: hosted version: "2.1.7" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface - url: "https://pub.dartlang.org" + sha256: f0abc8ebd7253741f05488b4813d936b4d07c6bae3e86148a09e342ee4b08e76 + url: "https://pub.dev" source: hosted version: "2.0.5" path_provider_windows: dependency: transitive description: name: path_provider_windows - url: "https://pub.dartlang.org" + sha256: bcabbe399d4042b8ee687e17548d5d3f527255253b4a639f5f8d2094a9c2b45c + url: "https://pub.dev" source: hosted version: "2.1.3" petitparser: dependency: transitive description: name: petitparser - url: "https://pub.dartlang.org" + sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4" + url: "https://pub.dev" source: hosted version: "5.1.0" platform: dependency: transitive description: name: platform - url: "https://pub.dartlang.org" + sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + url: "https://pub.dev" source: hosted version: "3.1.0" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - url: "https://pub.dartlang.org" + sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a + url: "https://pub.dev" source: hosted version: "2.1.3" pointycastle: dependency: transitive description: name: pointycastle - url: "https://pub.dartlang.org" + sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346 + url: "https://pub.dev" source: hosted version: "3.6.2" pool: dependency: transitive description: name: pool - url: "https://pub.dartlang.org" + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" source: hosted version: "1.5.1" process: dependency: transitive description: name: process - url: "https://pub.dartlang.org" + sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + url: "https://pub.dev" source: hosted version: "4.2.4" pub_semver: dependency: transitive description: name: pub_semver - url: "https://pub.dartlang.org" + sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" + url: "https://pub.dev" source: hosted version: "2.1.3" pubspec_parse: dependency: transitive description: name: pubspec_parse - url: "https://pub.dartlang.org" + sha256: "75f6614d6dde2dc68948dffbaa4fe5dae32cd700eb9fb763fe11dfb45a3c4d0a" + url: "https://pub.dev" source: hosted version: "1.2.1" quiver: dependency: transitive description: name: quiver - url: "https://pub.dartlang.org" + sha256: b1c1ac5ce6688d77f65f3375a9abb9319b3cb32486bdc7a1e0fdf004d7ba4e47 + url: "https://pub.dev" source: hosted version: "3.2.1" share_plus: dependency: "direct main" description: name: share_plus - url: "https://pub.dartlang.org" + sha256: e387077716f80609bb979cd199331033326033ecd1c8f200a90c5f57b1c9f55e + url: "https://pub.dev" source: hosted version: "6.3.0" share_plus_platform_interface: dependency: transitive description: name: share_plus_platform_interface - url: "https://pub.dartlang.org" + sha256: "82ddd4ab9260c295e6e39612d4ff00390b9a7a21f1bb1da771e2f232d80ab8a1" + url: "https://pub.dev" source: hosted version: "3.2.0" shared_preferences: dependency: "direct main" description: name: shared_preferences - url: "https://pub.dartlang.org" + sha256: "5949029e70abe87f75cfe59d17bf5c397619c4b74a099b10116baeb34786fad9" + url: "https://pub.dev" source: hosted version: "2.0.17" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - url: "https://pub.dartlang.org" + sha256: "955e9736a12ba776bdd261cf030232b30eadfcd9c79b32a3250dd4a494e8c8f7" + url: "https://pub.dev" source: hosted version: "2.0.15" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation -<<<<<<< HEAD sha256: "2b55c18636a4edc529fa5cd44c03d3f3100c00513f518c5127c951978efcccd0" url: "https://pub.dev" -======= - url: "https://pub.dartlang.org" ->>>>>>> 5a44f6cb68a580e377a18e6cc0210d0b36477f77 source: hosted version: "2.1.3" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - url: "https://pub.dartlang.org" + sha256: f8ea038aa6da37090093974ebdcf4397010605fd2ff65c37a66f9d28394cb874 + url: "https://pub.dev" source: hosted version: "2.1.3" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - url: "https://pub.dartlang.org" + sha256: da9431745ede5ece47bc26d5d73a9d3c6936ef6945c101a5aca46f62e52c1cf3 + url: "https://pub.dev" source: hosted version: "2.1.0" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - url: "https://pub.dartlang.org" + sha256: a4b5bc37fe1b368bbc81f953197d55e12f49d0296e7e412dfe2d2d77d6929958 + url: "https://pub.dev" source: hosted version: "2.0.4" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - url: "https://pub.dartlang.org" + sha256: "5eaf05ae77658d3521d0e993ede1af962d4b326cd2153d312df716dc250f00c9" + url: "https://pub.dev" source: hosted version: "2.1.3" shelf: dependency: transitive description: name: shelf - url: "https://pub.dartlang.org" + sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c + url: "https://pub.dev" source: hosted version: "1.4.0" shelf_web_socket: dependency: transitive description: name: shelf_web_socket - url: "https://pub.dartlang.org" + sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 + url: "https://pub.dev" source: hosted version: "1.0.3" sky_engine: @@ -804,212 +846,226 @@ packages: dependency: transitive description: name: source_gen -<<<<<<< HEAD sha256: c2bea18c95cfa0276a366270afaa2850b09b4a76db95d546f3d003dcc7011298 url: "https://pub.dev" -======= - url: "https://pub.dartlang.org" ->>>>>>> 5a44f6cb68a580e377a18e6cc0210d0b36477f77 source: hosted version: "1.2.7" source_helper: dependency: transitive description: name: source_helper - url: "https://pub.dartlang.org" + sha256: "3b67aade1d52416149c633ba1bb36df44d97c6b51830c2198e934e3fca87ca1f" + url: "https://pub.dev" source: hosted version: "1.3.3" source_span: dependency: transitive description: name: source_span - url: "https://pub.dartlang.org" + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + url: "https://pub.dev" source: hosted version: "1.9.1" stack_trace: dependency: transitive description: name: stack_trace - url: "https://pub.dartlang.org" + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" source: hosted version: "1.11.0" stream_channel: dependency: transitive description: name: stream_channel - url: "https://pub.dartlang.org" + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" source: hosted version: "2.1.1" stream_transform: dependency: transitive description: name: stream_transform - url: "https://pub.dartlang.org" + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" source: hosted version: "2.1.0" string_scanner: dependency: transitive description: name: string_scanner - url: "https://pub.dartlang.org" + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" source: hosted version: "1.2.0" term_glyph: dependency: transitive description: name: term_glyph - url: "https://pub.dartlang.org" + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" source: hosted version: "1.2.1" test_api: dependency: transitive description: name: test_api - url: "https://pub.dartlang.org" + sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + url: "https://pub.dev" source: hosted version: "0.4.16" timing: dependency: transitive description: name: timing - url: "https://pub.dartlang.org" + sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + url: "https://pub.dev" source: hosted version: "1.0.1" typed_data: dependency: transitive description: name: typed_data - url: "https://pub.dartlang.org" + sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + url: "https://pub.dev" source: hosted version: "1.3.1" universal_io: dependency: transitive description: name: universal_io - url: "https://pub.dartlang.org" + sha256: "79f78ddad839ee3aae3ec7c01eb4575faf0d5c860f8e5223bc9f9c17f7f03cef" + url: "https://pub.dev" source: hosted version: "2.0.4" url_launcher: dependency: "direct main" description: name: url_launcher - url: "https://pub.dartlang.org" + sha256: "698fa0b4392effdc73e9e184403b627362eb5fbf904483ac9defbb1c2191d809" + url: "https://pub.dev" source: hosted version: "6.1.8" url_launcher_android: dependency: transitive description: name: url_launcher_android - url: "https://pub.dartlang.org" + sha256: "3e2f6dfd2c7d9cd123296cab8ef66cfc2c1a13f5845f42c7a0f365690a8a7dd1" + url: "https://pub.dev" source: hosted version: "6.0.23" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - url: "https://pub.dartlang.org" + sha256: bb328b24d3bccc20bdf1024a0990ac4f869d57663660de9c936fb8c043edefe3 + url: "https://pub.dev" source: hosted version: "6.0.18" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - url: "https://pub.dartlang.org" + sha256: "318c42cba924e18180c029be69caf0a1a710191b9ec49bb42b5998fdcccee3cc" + url: "https://pub.dev" source: hosted version: "3.0.2" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - url: "https://pub.dartlang.org" + sha256: "41988b55570df53b3dd2a7fc90c76756a963de6a8c5f8e113330cb35992e2094" + url: "https://pub.dev" source: hosted version: "3.0.2" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface - url: "https://pub.dartlang.org" + sha256: "4eae912628763eb48fc214522e58e942fd16ce195407dbf45638239523c759a6" + url: "https://pub.dev" source: hosted version: "2.1.1" url_launcher_web: dependency: transitive description: name: url_launcher_web - url: "https://pub.dartlang.org" + sha256: "44d79408ce9f07052095ef1f9a693c258d6373dc3944249374e30eff7219ccb0" + url: "https://pub.dev" source: hosted version: "2.0.14" url_launcher_windows: dependency: transitive description: name: url_launcher_windows -<<<<<<< HEAD sha256: b6217370f8eb1fd85c8890c539f5a639a01ab209a36db82c921ebeacefc7a615 url: "https://pub.dev" -======= - url: "https://pub.dartlang.org" ->>>>>>> 5a44f6cb68a580e377a18e6cc0210d0b36477f77 source: hosted version: "3.0.3" uuid: dependency: transitive description: name: uuid - url: "https://pub.dartlang.org" + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + url: "https://pub.dev" source: hosted version: "3.0.7" vector_math: dependency: transitive description: name: vector_math - url: "https://pub.dartlang.org" + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" source: hosted version: "2.1.4" watcher: dependency: transitive description: name: watcher - url: "https://pub.dartlang.org" + sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" + url: "https://pub.dev" source: hosted version: "1.0.2" web_socket_channel: dependency: transitive description: name: web_socket_channel - url: "https://pub.dartlang.org" + sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b + url: "https://pub.dev" source: hosted version: "2.3.0" win32: dependency: transitive description: name: win32 - url: "https://pub.dartlang.org" + sha256: c9ebe7ee4ab0c2194e65d3a07d8c54c5d00bb001b76081c4a04cdb8448b59e46 + url: "https://pub.dev" source: hosted version: "3.1.3" xdg_directories: dependency: transitive description: name: xdg_directories - url: "https://pub.dartlang.org" + sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86 + url: "https://pub.dev" source: hosted version: "0.2.0+3" xml: dependency: transitive description: name: xml - url: "https://pub.dartlang.org" + sha256: "979ee37d622dec6365e2efa4d906c37470995871fe9ae080d967e192d88286b5" + url: "https://pub.dev" source: hosted version: "6.2.2" yaml: dependency: transitive description: name: yaml - url: "https://pub.dartlang.org" + sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" + url: "https://pub.dev" source: hosted version: "3.1.1" sdks: -<<<<<<< HEAD - dart: ">=2.19.0 <4.0.0" -======= dart: ">=2.19.0 <3.0.0" ->>>>>>> 5a44f6cb68a580e377a18e6cc0210d0b36477f77 flutter: ">=3.7.0"