mobile_scanner

A universal scanner for Flutter based on MLKit. Uses CameraX on Android and AVFoundation on iOS.

BSD-3-CLAUSE License

Stars
823

Bot releases are hidden (Show)

mobile_scanner - v5.1.0 Latest Release

Published by juliansteenbakker 6 months ago

This updates reverts a few breaking changes made in v5.0.0 in order to keep things simple.

  • The onDetect method has been reinstated in the MobileScanner widget, but is nullable. You can
    still listen to MobileScannerController.barcodes directly by passing null to this parameter.
  • The autoStart attribute has been reinstated in the MobileScannerController and defaults to true. However, if you want
    to control which camera is used on start, or you want to manage the lifecycle yourself, you should set
    autoStart to false and manually call MobileScannerController.start({CameraFacing? cameraDirection}).
  • The controller is no longer required in the MobileScanner widget. However if provided, the user should take care
    of disposing it.
  • [Android] Revert Gradle 8 back to Gradle 7, to be inline with most Flutter plugins and prevent build issues.
  • [Android] Revert Kotlin back from 1.9 to 1.7 to be inline with most Flutter plugins. Special 1.9 functionality
    has been refactored to be compatible with 1.7.
mobile_scanner - v5.0.2

Published by juliansteenbakker 6 months ago

Bugs fixed:

  • Fixed a crash when the controller is disposed while it is still starting. #1036 (thanks @EArminjon !)
  • Fixed an issue that causes the initial torch state to be out of sync.

Improvements:

  • Updated the lifeycle code sample to handle not-initialized controllers.
mobile_scanner - v5.0.1

Published by juliansteenbakker 6 months ago

Improvements:

  • Adjusted the platform checks to use the defaultTargetPlatform API, so that tests can use the correct platform overrides.
mobile_scanner - v5.0.0

Published by juliansteenbakker 6 months ago

This major release contains all the changes from the 5.0.0 beta releases, along with the following changes:

Improvements:

  • [Android] Remove the Kotlin Standard Library from the dependencies, as it is automatically included in Kotlin 1.4+
mobile_scanner - v5.0.0-beta.3

Published by juliansteenbakker 6 months ago

BREAKING CHANGES:

  • Flutter 3.19.0 is now required.
  • [iOS] iOS 12.0 is now the minimum supported iOS version.
  • [iOS] Adds a Privacy Manifest.

Bugs fixed:

  • Fixed an issue where the camera preview and barcode scanner did not work the second time on web.

Improvements:

  • [web] Migrates to extension types. (thanks @koji-1009 !)
mobile_scanner - v5.0.0-beta.2

Published by juliansteenbakker 6 months ago

Bugs fixed:

  • Fixed an issue where the scan window was not updated when its size was changed. (thanks @navaronbracke !)
mobile_scanner - v5.0.0-beta.1

Published by juliansteenbakker 6 months ago

BREAKING CHANGES:

  • The width and height of BarcodeCapture have been removed, in favor of size.
  • The raw attribute is now Object? instead of dynamic, so that it participates in type promotion.
  • The MobileScannerArguments class has been removed from the public API, as it is an internal type.
  • The cameraFacingOverride named argument for the start() method has been renamed to cameraDirection.
  • The analyzeImage function now correctly returns a BarcodeCapture? instead of a boolean.
  • The formats attribute of the MobileScannerController is now non-null.
  • The MobileScannerState enum has been renamed to MobileScannerAuthorizationState.
  • The various ValueNotifiers for the camera state have been removed. Use the value of the MobileScannerController instead.
  • The hasTorch getter has been removed. Instead, use the torch state of the controller's value.
    The TorchState enum now provides a new value for unavailable flashlights.
  • The autoStart attribute has been removed from the MobileScannerController. The controller should be manually started on-demand.
  • A controller is now required for the MobileScanner widget.
  • The onPermissionSet, onStart and onScannerStarted methods have been removed from the MobileScanner widget. Instead, await MobileScannerController.start().
  • The startDelay has been removed from the MobileScanner widget. Instead, use a delay between manual starts of one or more controllers.
  • The onDetect method has been removed from the MobileScanner widget. Instead, listen to MobileScannerController.barcodes directly.
  • The overlay widget of the MobileScanner has been replaced by a new property, overlayBuilder, which provides the constraints for the overlay.
  • The torch can no longer be toggled on the web, as this is only available for image tracks and not video tracks. As a result the torch state for the web will always be TorchState.unavailable.
  • The zoom scale can no longer be modified on the web, as this is only available for image tracks and not video tracks. As a result, the zoom scale will always be 1.0.

Improvements:

  • The MobileScannerController is now a ChangeNotifier, with MobileScannerState as its model.
  • The web implementation now supports alternate URLs for loading the barcode library.
mobile_scanner - v4.0.1

Published by juliansteenbakker 6 months ago

Bugs fixed:

[iOS] Fixed a crash with a nil capture session when starting the camera. (thanks @navaronbracke !)

mobile_scanner - v4.0.0

Published by juliansteenbakker 9 months ago

BREAKING CHANGES:

  • [Android] compileSdk has been upgraded to version 34.
  • [Android] Java version has been upgraded to version 17.
mobile_scanner - v3.5.7

Published by juliansteenbakker 9 months ago

Improvements:

  • Updated js dependency together with other dependencies.
  • Reverted compileSdk version to 33 on Android. This update will be released under version 4.0.0.
mobile_scanner - v3.5.6

Published by juliansteenbakker 9 months ago

Bugs fixed:

  • [web] Fixed a crash with the ZXing barcode format (thanks @hazzo!)
  • [web] Fixed stream controller not being closed on web.
  • [iOS] Fixed a crash with unsupported torch modes. (thanks @navaronbracke !)
  • [iOS] Fixed a crash with the camera discovery session. (thanks @navaronbracke !)

Improvements:

  • Upgrade camera dependencies on Android.
  • Upgrade compileSdk version to 34 on Android.
  • Add numberOfCameras parameter in MobileScannerArguments callback, which shows how many cameras there are available on Android.
  • [Android] Migrated to ResolutionSelector with ResolutionStrategy. You can opt in into the new selector by setting [useNewCameraSelector] in the [MobileScannerController] to true.
mobile_scanner - v3.5.5

Published by juliansteenbakker 11 months ago

Bugs fixed:

  • Fixed a bug where the scanner would get stuck after denying permissions on Android. (thanks @navaronbracke !)
mobile_scanner - v3.5.4

Published by juliansteenbakker 11 months ago

Bugs fixed:

  • Fixed a bug with an implicit conversion to integer for the scan timeout for iOS. (thanks @EArminjon !)
mobile_scanner - v3.5.2

Published by juliansteenbakker 11 months ago

Improvements:

  • Updated to play-services-mlkit-barcode-scanning version 18.3.0

Bugs fixed:

  • Fixed the updateScanWindow() function not completing on Android and MacOS. (thanks @navaronbracke !)
  • Fixed some camera access issues, when the camera could have been null on Android. (thanks @navaronbracke !)
  • Fixed a crash on Android when there is no camera. (thanks @navaronbracke !)
  • Fixed a bug with the noDuplicates detection speed. (thanks @pgeof !)
  • Fixed a synchronization issue for the torch state. (thanks @navaronbracke !)
mobile_scanner - v3.5.1

Published by juliansteenbakker 11 months ago

Improvements:

  • The type of an Address is now non-null.
  • The type of an Email is now non-null.
  • The phoneNumber of an SMS is now non-null.
  • The latitude and longitude of a GeoPoint are now non-null.
  • The phones and urls of ContactInfo are now non-null.
  • The url of a UrlBookmark is now non-null.
  • The type of Phone is now non-null.
  • The width and height of BarcodeCapture are now non-null.
  • The BarcodeCapture class now exposes a size.
  • The list of corners of a Barcode is now non-null.

Bugs fixed:

  • Fixed the default values for the format and type arguments of the Barcode constructor.
    These now use BarcodeFormat.unknown and BarcodeType.unknown, rather than BarcodeFormat.ean13 and BarcodeType.text.
    (thanks @navaronbracke !)
  • Fixed messages not being sent on the main thread for Android, iOS and MacOS. (thanks @navaronbracke !)
mobile_scanner - v3.5.0

Published by juliansteenbakker 11 months ago

New Features:

  • Added the option to switch between bundled and unbundled MLKit for Android. (thanks @woolfred !)
  • Added the option to specify the camera resolution for Android. (thanks @EArminjon !)
  • Added a sample with a scanner overlay. (thanks @Spyy004 !)

Bugs fixed:

  • Fixed the scan window calculation taking into account the widget coordinates, instead of the screen coordinates. (thanks @jlin5 !)
  • Fixed the scan window calculation returning wrong results. (thanks @MBulli !)
  • Fixed the BarcodeCapture format on MacOS. (thanks @ryanduffyne !)
  • Fixed the timeout for scanning on MacOS. (thanks @ryanduffyne !)
  • Fixed Android builds failing by downgrading from Kotlin 1.9.10 to 1.7.22. (thanks @vbuberen !)
  • Fixed images on iOS being rotated, resulting in bad detection rates. (thanks @EArminjon !)
  • Fixed scan timeout not working on iOS. (thanks @navaronbracke !)
  • Fixed a crash on iOS when the device is nil. (thanks @navaronbracke !)
  • Fixed a case of an unhandled exception when starting the scanner. (thanks @navaronbracke !)

Improvements:

  • Improved MacOS memory footprint by using a background queue. (thanks @ryanduffyne !)
mobile_scanner - v3.4.1

Published by juliansteenbakker about 1 year ago

Change MediaQuery.sizeOf(context) to of(context).size for backwards compatibility

mobile_scanner - v3.4.0

Published by juliansteenbakker about 1 year ago

New Features:

  • This PR adds an option to add an overlay to the scanner which is only visible when the scanner has started. (thanks @svenopdehipt !)

Improvements:

  • fix a bug in the static interop binding of PhotoCapabilities (thanks @navaronbracke !)

  • [Web] add the corners from the ZXing result to the barcode on web (thanks @navaronbracke !)

  • update the example app web entrypoint to the latest template by running flutter create . --platforms=web (thanks @navaronbracke !)

  • add better handling for the case where scanning barcodes is unsupported (for example a desktop running the browser sample) (thanks @navaronbracke !)

  • [Web] fix the permission denied handling on the web, by using the NotAllowedError error message as defined by MDN (thanks @navaronbracke !)

  • add app bars with back buttons to the example app (so that you can go back easily) (thanks @navaronbracke !)

  • [iOS] Implements a fix from issue iOS After first QR Code Scan, When Scanning again, First Image stays on Camera buffer (thanks @FlockiiX !)

  • By dynamically adjusting the positioning and scaling of the scan window relative to the texture, the package ensures optimal coverage and alignment for scanning targets. (thanks @sdkysfzai !)

  • In the original package, If there are multiple barcode/qrcodes in the screen, the scan would randomly pick up any barcode/qrcode that shows in the screen, This upgrade fixes it and picks on the qrcode/barcode that is in the center of the camera. (thanks @sdkysfzai !)

  • In the original package if you changed the camera size, it would still pick scans even if the barcode are not shown in the screen, This issue is also fixed in the upgraded packaged. (thanks @sdkysfzai !)

  • [iOS] This removes a threading warning (and potentially jank). (thanks @ened !)

  • [Android] fix(ScanImage): fix android image result is not correct format and orientation (thanks @phanbaohuy96 !)

  • [iOS] Respect detectionTimeout on iOS devices, instead of arbitrarily waiting 10 frames (thanks @jorgenpt !)

  • [iOS] Don't start a second scan until the first one is done, to keep memory usage more fixed if the device is slow (thanks @jorgenpt !)

  • [Android] This PR ensure that the camera is not stopped in the callback. (thanks @g123k !)

  • [macOS] Fix some macOS build errors (thanks @svenopdehipt !)

  • [Android] Fixed an issue which caused the App Lifecycle States to not work correctly on Android. (thanks @androi7 !)

mobile_scanner - v3.3.0

Published by juliansteenbakker over 1 year ago

Bugs fixed:

  • Fixed bug where onDetect method was being called multiple times
  • [Android] Fix Gradle 8 compatibility by adding the namespace attribute to the build.gradle.

Improvements:

  • [Android] Upgraded camera2 dependency
  • Added zoomScale value notifier in MobileScannerController for the application to know the zoom scale value set actually.
    The value is notified from the native SDK(CameraX/AVFoundation).
  • Added resetZoomScale() in MobileScannerController to reset zoom ratio with 1x.
    Both Android and iOS, if the device have ultra-wide camera, calling setZoomScale with small value causes to use ultra-wide camera and may be diffcult to detect barcodes.
    resetZoomScale() is useful to use standard camera with zoom 1x.
    setZoomScale() with the specific value can realize same effect, but added resetZoomScale for avoiding floating point errors.
    The application can know what zoom scale value is selected actually by subscribing zoomScale above after calling resetZoomScale.
  • [iOS] Call resetZoomScale while starting scan.
    Android camera is initialized with a zoom of 1x, whereas iOS is initialized with the minimum zoom value, which causes to select the ultra-wide camera unintentionally ([iOS] Impossible to focus and scan the QR code due to picking the wide back camera #554).
    Fixed this issue by calling resetZoomScale
  • [iOS] Remove zoom animation with ramp function to match Android behavior.
mobile_scanner - v3.2.0

Published by juliansteenbakker over 1 year ago

Improvements:

  • [iOS] Updated GoogleMLKit/BarcodeScanning to 4.0.0
  • [Android] Updated com.google.mlkit:barcode-scanning from 17.0.3 to 17.1.0

Bugs fixed:

  • Fixed onDetect not working with analyzeImage when autoStart is false in MobileScannerController
  • [iOS] Explicit returned type for compactMap