mobile_scanner - A universal scanner for Flutter based on MLKit

Overview

mobile_scanner

pub package mobile_scanner

A universal barcode and QR code scanner for Flutter based on MLKit. Uses CameraX on Android, AVFoundation on iOS and Apple Vision & AVFoundation on macOS.

Platform Support

Android iOS MacOS Web Linux Windows
✔️ ✔️ ✔️

CameraX for Android requires at least SDK 21.

MLKit for iOS requires at least iOS 11 and a 64bit device.

Usage

Import package:mobile_scanner/mobile_scanner.dart, and use the widget with or without the controller.

If you don't provide a controller, you can't control functions like the torch(flash) or switching camera.

Example without controller:

import 'package:mobile_scanner/mobile_scanner.dart';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Mobile Scanner')),
      body: MobileScanner(
          onDetect: (barcode, args) {
            final String code = barcode.rawValue;
            debugPrint('Barcode found! $code');
          }),
    );
  }

Example with controller and initial values:

import 'package:mobile_scanner/mobile_scanner.dart';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Mobile Scanner')),
      body: MobileScanner(
          controller: MobileScannerController(
            facing: CameraFacing.front, torchEnabled: true),
          onDetect: (barcode, args) {
            final String code = barcode.rawValue;
            debugPrint('Barcode found! $code');
          }),
    );
  }

Example with controller and torch & camera controls:

import 'package:mobile_scanner/mobile_scanner.dart';

  MobileScannerController cameraController = MobileScannerController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: const Text('Mobile Scanner'),
          actions: [
            IconButton(
              color: Colors.white,
              icon: ValueListenableBuilder(
                valueListenable: cameraController.torchState,
                builder: (context, state, child) {
                  switch (state as TorchState) {
                    case TorchState.off:
                      return const Icon(Icons.flash_off, color: Colors.grey);
                    case TorchState.on:
                      return const Icon(Icons.flash_on, color: Colors.yellow);
                  }
                },
              ),
              iconSize: 32.0,
              onPressed: () => cameraController.toggleTorch(),
            ),
            IconButton(
              color: Colors.white,
              icon: ValueListenableBuilder(
                valueListenable: cameraController.cameraFacingState,
                builder: (context, state, child) {
                  switch (state as CameraFacing) {
                    case CameraFacing.front:
                      return const Icon(Icons.camera_front);
                    case CameraFacing.back:
                      return const Icon(Icons.camera_rear);
                  }
                },
              ),
              iconSize: 32.0,
              onPressed: () => cameraController.switchCamera(),
            ),
          ],
        ),
        body: MobileScanner(
            controller: cameraController,
            onDetect: (barcode, args) {
              final String code = barcode.rawValue;
              debugPrint('Barcode found! $code');
            }));
  }
Comments
  • MobileScanner: Called stop() while already stopped!

    MobileScanner: Called stop() while already stopped!

    I am getting an exception when navigating to another screen after scanning or just switching screens without scanning The camera attempts to complete a state change even when it is already stopped.

    I use this code to start scanning:

         cameraController = MobileScannerController(
            facing: CameraFacing.back,
            formats: [BarcodeFormat.qrCode],
            torchEnabled: false,
          );
    

    and I manually stop the camera to prevent it from working on the back when I already move on to the next pages

    cameraController.stop();
    

    debug console shows:

    D/Camera2CameraImpl( 9667): {Camera@ed74e7b[id=0]} Use cases [androidx.camera.core.Preview-5ba484ec-9a34-4aca-a6a4-872db2421639225955340, androidx.camera.core.ImageAnalysis-752c8076-504c-4c7a-bc6f-29d067be6710101880661] now DETACHED for camera
    D/UseCaseAttachState( 9667): All use case: [] for camera: 0
    D/Camera2CameraImpl( 9667): {Camera@ed74e7b[id=0]} Resetting Capture Session
    D/Camera2CameraImpl( 9667): {Camera@ed74e7b[id=0]} Releasing session in state OPENED
    D/UseCaseAttachState( 9667): Active and attached use case: [] for camera: 0
    D/UseCaseAttachState( 9667): Active and attached use case: [] for camera: 0
    D/DeferrableSurface( 9667): surface closed,  useCount=1 closed=true androidx.camera.core.SurfaceRequest$2@64e4d37
    D/DeferrableSurface( 9667): surface closed,  useCount=1 closed=true androidx.camera.core.impl.ImmediateSurface@f023c2
    D/Camera2CameraImpl( 9667): {Camera@ed74e7b[id=0]} Closing camera.
    D/Camera2CameraImpl( 9667): {Camera@ed74e7b[id=0]} Transitioning camera internal state: OPENED --> CLOSING
    D/CameraStateRegistry( 9667): Recalculating open cameras:
    D/CameraStateRegistry( 9667): Camera                                       State
    D/CameraStateRegistry( 9667): -------------------------------------------------------------------
    D/CameraStateRegistry( 9667): Camera@fcacc62[id=1]                         UNKNOWN
    D/CameraStateRegistry( 9667): Camera@ed74e7b[id=0]                         CLOSING
    D/CameraStateRegistry( 9667): -------------------------------------------------------------------
    D/CameraStateRegistry( 9667): Open count: 1 (Max allowed: 1)
    D/CameraStateMachine( 9667): New public camera state CameraState{type=CLOSING, error=null} from CLOSING and null
    D/CameraStateMachine( 9667): Publishing new public camera state CameraState{type=CLOSING, error=null}
    D/Camera2CameraImpl( 9667): {Camera@ed74e7b[id=0]} Resetting Capture Session
    D/Camera2CameraImpl( 9667): {Camera@ed74e7b[id=0]} Releasing session in state CLOSING
    D/CaptureSession( 9667): onSessionFinished()
    W/eteselectorale( 9667): Accessing hidden method Lsun/misc/Unsafe;->getInt(Ljava/lang/Object;J)I (greylist, linking, allowed)
    W/eteselectorale( 9667): Accessing hidden method Lsun/misc/Unsafe;->putInt(Ljava/lang/Object;JI)V (greylist, linking, allowed)
    E/BufferQueueProducer( 9667): [SurfaceTexture-0-9667-0] cancelBuffer: BufferQueue has been abandoned
    I/chatty  ( 9667): uid=10550(com.mx.test.project) CameraX-core_ca identical 4 lines
    E/BufferQueueProducer( 9667): [SurfaceTexture-0-9667-0] cancelBuffer: BufferQueue has been abandoned
    W/Binder:9667_3( 9667): type=1400 audit(0.0:2349768): avc: denied { read } for name="u:object_r:persist_camera_prop:s0" dev="tmpfs" ino=11636 scontext=u:r:untrusted_app:s0:c38,c258,c512,c768 tcontext=u:object_r:persist_camera_prop:s0 tclass=file permissive=0
    E/libc    ( 9667): Access denied finding property "vendor.camera.aux.packagelist"
    W/Binder:9667_3( 9667): type=1400 audit(0.0:2349769): avc: denied { read } for name="u:object_r:persist_camera_prop:s0" dev="tmpfs" ino=11636 scontext=u:r:untrusted_app:s0:c38,c258,c512,c768 tcontext=u:object_r:persist_camera_prop:s0 tclass=file permissive=0
    E/libc    ( 9667): Access denied finding property "vendor.camera.aux.packagelist"
    D/UseCaseAttachState( 9667): Active and attached use case: [] for camera: 0
    D/DeferrableSurface( 9667): use count-1,  useCount=0 closed=true androidx.camera.core.SurfaceRequest$2@64e4d37
    D/DeferrableSurface( 9667): Surface no longer in use[total_surfaces=2, used_surfaces=1](androidx.camera.core.SurfaceRequest$2@64e4d37}
    D/DeferrableSurface( 9667): Surface terminated[total_surfaces=1, used_surfaces=1](androidx.camera.core.SurfaceRequest$2@64e4d37}
    D/DeferrableSurface( 9667): use count-1,  useCount=0 closed=true androidx.camera.core.impl.ImmediateSurface@f023c2
    D/DeferrableSurface( 9667): Surface no longer in use[total_surfaces=1, used_surfaces=0](androidx.camera.core.impl.ImmediateSurface@f023c2}
    D/DeferrableSurface( 9667): Surface terminated[total_surfaces=0, used_surfaces=0](androidx.camera.core.impl.ImmediateSurface@f023c2}
    D/Camera2CameraImpl( 9667): {Camera@ed74e7b[id=0]} CameraDevice.onClosed()
    D/Camera2CameraImpl( 9667): {Camera@ed74e7b[id=0]} Transitioning camera internal state: CLOSING --> INITIALIZED
    D/CameraStateRegistry( 9667): Recalculating open cameras:
    D/CameraStateRegistry( 9667): Camera                                       State
    D/CameraStateRegistry( 9667): -------------------------------------------------------------------
    D/CameraStateRegistry( 9667): Camera@fcacc62[id=1]                         UNKNOWN
    D/CameraStateRegistry( 9667): Camera@ed74e7b[id=0]                         CLOSED
    D/CameraStateRegistry( 9667): -------------------------------------------------------------------
    D/CameraStateRegistry( 9667): Open count: 0 (Max allowed: 1)
    D/CameraStateMachine( 9667): New public camera state CameraState{type=CLOSED, error=null} from CLOSED and null
    D/CameraStateMachine( 9667): Publishing new public camera state CameraState{type=CLOSED, error=null}
    I/flutter ( 9667): MobileScanner: Called stop() while already stopped!
    
    bug 
    opened by Arcttyx 20
  • APP crashes when I turn on debug or profile mode

    APP crashes when I turn on debug or profile mode

    APP crashes when I turn on debug or profile mode.

    Version: mobile_scanner:0.2.0 flutter:2.10.3 And 2.8.1 (Both versions 2.10.3 and 2.8.1 have appeared, and other Flutter versions have not been tested yet.)

    My Code :

    import 'package:flutter/material.dart';
    import 'package:miffy_tuya_smart_sdk_example/component/MiffyScreen.dart';
    import 'package:mobile_scanner/mobile_scanner.dart';
    
    class Scan extends StatelessWidget {
      final MobileScannerController _controller =
          MobileScannerController(torchEnabled: false);
      @override
      Widget build(BuildContext context) {
        return ConstrainedBox(
            constraints: const BoxConstraints.expand(),
            child: Stack(
              alignment: Alignment.topCenter,
              children: [
                MobileScanner(
                    controller: _controller,
                    onDetect: (barcode, args) {
                      final String? code = barcode.rawValue;
                      debugPrint('Barcode found! $code');
                      _controller.dispose();
                      Navigator.pop(context);
                    }),
              ],
            ));
      }
    }
    

    Crash Log:

    D/ViewRootImpl( 9140): enqueueInputEventMotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=568.0, y[0]=2323.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=1082620301, downTime=1082620301, deviceId=3, source=0x1002, displayId=0 }
    D/ViewRootImpl[MainActivity]( 9140): processMotionEvent MotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=568.0, y[0]=2323.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=1082620301, downTime=1082620301, deviceId=3, source=0x1002, displayId=0 }
    D/ViewRootImpl[MainActivity]( 9140): dispatchPointerEvent handled=true, event=MotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=568.0, y[0]=2323.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=1082620301, downTime=1082620301, deviceId=3, source=0x1002, displayId=0 }
    D/ViewRootImpl[MainActivity]( 9140): processMotionEvent MotionEvent { action=ACTION_UP, actionButton=0, id[0]=0, x[0]=568.0, y[0]=2323.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=1082620342, downTime=1082620301, deviceId=3, source=0x1002, displayId=0 }
    D/ViewRootImpl[MainActivity]( 9140): dispatchPointerEvent handled=true, event=MotionEvent { action=ACTION_UP, actionButton=0, id[0]=0, x[0]=568.0, y[0]=2323.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=1082620342, downTime=1082620301, deviceId=3, source=0x1002, displayId=0 }
    I/OplusCameraManager( 9140): saveOpPackageName, mOpPackageName: com.smart.happy
    I/OplusCameraManagerGlobal( 9140): setClientInfo, packageName: com.smart.happy, uid: 10392, pid: 9140
    I/OplusCameraManagerGlobal( 9140): Connecting to camera service
    I/CameraManagerGlobal( 9140): Connecting to camera service
    E/libc    ( 9140): Access denied finding property "vendor.camera.aux.packagelist"
    I/chatty  ( 9140): uid=10392(com.smart.happy) CameraX-core_ca identical 1 line
    E/libc    ( 9140): Access denied finding property "vendor.camera.aux.packagelist"
    E/libc    ( 9140): Access denied finding property "vendor.camera.aux.packagelist"
    E/libc    ( 9140): Access denied finding property "vendor.camera.aux.packagelist"
    W/CameraManagerGlobal( 9140): ignore the torch status update of camera: 2
    E/libc    ( 9140): Access denied finding property "vendor.camera.aux.packagelist"
    W/CameraManagerGlobal( 9140): ignore the torch status update of camera: 3
    E/libc    ( 9140): Access denied finding property "vendor.camera.aux.packagelist"
    W/CameraManagerGlobal( 9140): ignore the torch status update of camera: 4
    I/OplusCameraManagerGlobal( 9140): setClientInfo, packageName: com.smart.happy, uid: 10392, pid: 9140
    I/chatty  ( 9140): uid=10392(com.smart.happy) CameraX-core_ca identical 4 lines
    I/OplusCameraManagerGlobal( 9140): setClientInfo, packageName: com.smart.happy, uid: 10392, pid: 9140
    D/CameraRepository( 9140): Added camera: 0
    I/Camera2CameraInfo( 9140): Device Level: INFO_SUPPORTED_HARDWARE_LEVEL_3
    I/OplusCameraManagerGlobal( 9140): setClientInfo, packageName: com.smart.happy, uid: 10392, pid: 9140
    D/CameraRepository( 9140): Added camera: 1
    I/Camera2CameraInfo( 9140): Device Level: INFO_SUPPORTED_HARDWARE_LEVEL_3
    I/OplusCameraManagerGlobal( 9140): setClientInfo, packageName: com.smart.happy, uid: 10392, pid: 9140
    D/CameraValidator( 9140): Verifying camera lens facing on RMX3161CN, lensFacingInteger: null
    D/DeferrableSurface( 9140): Surface created[total_surfaces=1, used_surfaces=0](androidx.camera.core.SurfaceRequest$2@5331dae}
    D/CameraOrientationUtil( 9140): getRelativeImageRotation: destRotationDegrees=0, sourceRotationDegrees=90, isOppositeFacing=true, result=90
    I/chatty  ( 9140): uid=10392(com.smart.happy) identical 1 line
    D/CameraOrientationUtil( 9140): getRelativeImageRotation: destRotationDegrees=0, sourceRotationDegrees=90, isOppositeFacing=true, result=90
    D/DeferrableSurface( 9140): Surface created[total_surfaces=2, used_surfaces=0](androidx.camera.core.impl.ImmediateSurface@be9ebe5}
    D/Camera2CameraImpl( 9140): {Camera@4acbb13[id=0]} Use case androidx.camera.core.Preview-96105928-e476-4b12-a90d-e1b4453c95fb38840790 ACTIVE
    D/CameraOrientationUtil( 9140): getRelativeImageRotation: destRotationDegrees=0, sourceRotationDegrees=90, isOppositeFacing=true, result=90
    D/UseCaseAttachState( 9140): Active and attached use case: [] for camera: 0
    D/CameraOrientationUtil( 9140): getRelativeImageRotation: destRotationDegrees=0, sourceRotationDegrees=90, isOppositeFacing=true, result=90
    I/LOG     ( 9140): Analyzer: 640x480
    I/LOG     ( 9140): Preview: 1600x1200
    D/CameraOrientationUtil( 9140): getRelativeImageRotation: destRotationDegrees=0, sourceRotationDegrees=90, isOppositeFacing=true, result=90
    D/CameraOrientationUtil( 9140): getRelativeImageRotation: destRotationDegrees=0, sourceRotationDegrees=90, isOppositeFacing=true, result=90
    D/Camera2CameraImpl( 9140): {Camera@4acbb13[id=0]} Use case androidx.camera.core.ImageAnalysis-ffe93fde-7004-46d4-970a-a221c124a63926981463 ACTIVE
    D/UseCaseAttachState( 9140): Active and attached use case: [] for camera: 0
    D/Camera2CameraImpl( 9140): {Camera@4acbb13[id=0]} Use cases [androidx.camera.core.Preview-96105928-e476-4b12-a90d-e1b4453c95fb38840790, androidx.camera.core.ImageAnalysis-ffe93fde-7004-46d4-970a-a221c124a63926981463] now ATTACHED
    D/UseCaseAttachState( 9140): All use case: [androidx.camera.core.Preview-96105928-e476-4b12-a90d-e1b4453c95fb38840790, androidx.camera.core.ImageAnalysis-ffe93fde-7004-46d4-970a-a221c124a63926981463] for camera: 0
    D/UseCaseAttachState( 9140): Active and attached use case: [androidx.camera.core.Preview-96105928-e476-4b12-a90d-e1b4453c95fb38840790, androidx.camera.core.ImageAnalysis-ffe93fde-7004-46d4-970a-a221c124a63926981463] for camera: 0
    E/com.smart.happ( 9140): [SurfaceTexture-0-9140-0] attachToContext: invalid current EGLDisplay
    E/flutter ( 9140): [ERROR:flutter/fml/platform/android/jni_util.cc(211)] java.lang.RuntimeException: Error during attachToGLContext (see logcat for details)
    E/flutter ( 9140): 	at android.graphics.SurfaceTexture.attachToGLContext(SurfaceTexture.java:295)
    E/flutter ( 9140): 	at io.flutter.embedding.engine.renderer.SurfaceTextureWrapper.attachToGLContext(SurfaceTextureWrapper.java:71)
    E/flutter ( 9140):
    F/flutter ( 9140): [FATAL:flutter/shell/platform/android/platform_view_android_jni_impl.cc(1301)] Check failed: fml::jni::CheckException(env).
    F/libc    ( 9140): Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 9237 (1.raster), pid 9140 (com.smart.happy)
    Process name is com.smart.happy, not key_process
    *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
    Build fingerprint: 'realme/RMX3161/RMX3161CN:11/RKQ1.201217.002/1639934812003:user/release-keys'
    Revision: '0'
    ABI: 'arm64'
    Timestamp: 2022-03-08 15:55:47+0800
    pid: 9140, tid: 9237, name: 1.raster  >>> com.smart.happy <<<
    uid: 10392
    signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr --------
    Abort message: '[FATAL:flutter/shell/platform/android/platform_view_android_jni_impl.cc(1301)] Check failed: fml::jni::CheckException(env).
    '
        x0  0000000000000000  x1  0000000000002415  x2  0000000000000006  x3  0000007034e4ab00
        x4  fefeff091f2d2875  x5  fefeff091f2d2875  x6  fefeff091f2d2875  x7  7f7f7f7f7f7f7f7f
        x8  00000000000000f0  x9  8b59b306532be312  x10 0000000000000000  x11 ffffffc0fffffbdf
        x12 0000000000000001  x13 000000000000007e  x14 000c656d2705769f  x15 0000000034155555
        x16 000000712ace87e0  x17 000000712acc7da0  x18 000000702ff94000  x19 00000000000023b4
        x20 0000000000002415  x21 00000000ffffffff  x22 b400007087fd3518  x23 b4000070190cc0e8
        x24 0000000000000000  x25 0000000000000000  x26 0000000000000000  x27 b400007087e41f58
        x28 0000000000000001  x29 0000007034e4ab80
        lr  000000712ac7b460  sp  0000007034e4aae0  pc  000000712ac7b48c  pst 0000000000001000
    backtrace:
          #00 pc 000000000007848c  /apex/com.android.runtime/lib64/bionic/libc.so (abort+164) (BuildId: e81bf516b888e895d4e757da439c8117)
          #01 pc 00000000006aae14  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #02 pc 00000000006cef94  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #03 pc 00000000006bde3c  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #04 pc 00000000006abfc4  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #05 pc 00000000009138bc  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #06 pc 0000000000910518  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #07 pc 0000000000913a88  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #08 pc 0000000000910518  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #09 pc 0000000000913a88  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #10 pc 0000000000910518  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #11 pc 000000000090faa8  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #12 pc 0000000000910518  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #13 pc 0000000000913a88  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #14 pc 0000000000910518  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #15 pc 0000000000913a88  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #16 pc 0000000000910518  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #17 pc 0000000000912d74  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #18 pc 0000000000910518  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #19 pc 0000000000913a88  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #20 pc 0000000000910518  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #21 pc 000000000090e6f0  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #22 pc 00000000009201b8  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #23 pc 000000000091febc  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #24 pc 00000000009210b0  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #25 pc 0000000000920ad4  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #26 pc 000000000092928c  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #27 pc 00000000006cfbc0  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #28 pc 00000000006d34c4  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #29 pc 0000000000019da8  /system/lib64/libutils.so (android::Looper::pollInner(int)+916) (BuildId: 85aad54dcf3341150498b846bfca7931)
          #30 pc 00000000000199ac  /system/lib64/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+112) (BuildId: 85aad54dcf3341150498b846bfca7931)
          #31 pc 0000000000012c74  /system/lib64/libandroid.so (ALooper_pollOnce+100) (BuildId: 35fcec94a508276f883368d9eaad1c96)
          #32 pc 00000000006d35d4  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #33 pc 00000000006d1890  /data/app/~~pqTss0DWkbeEv6LjNlQ-oQ==/com.smart.happy-IxCucnU6giwbnd-6MigAZw==/lib/arm64/libflutter.so (BuildId: 3ff4e11779799bd3186efb7b5dc7e19692fe982e)
          #34 pc 00000000000da278  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+64) (BuildId: e81bf516b888e895d4e757da439c8117)
          #35 pc 000000000007a448  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64) (BuildId: e81bf516b888e895d4e757da439c8117)
    Lost connection to device.
    Exited (sigterm)
    
    
    bug android 
    opened by zhangstar666 15
  • A black screen on IOS 15.4.1

    A black screen on IOS 15.4.1

    When I first entered the page on IOS 15.4.1, it gave me a black screen. I need to switch to the background and come back for it to work. But it is ok on Android. Please hepl me,what can i do?Thank you!

    bug ios 
    opened by shijia2118 14
  • Black screen on Flutter Web and iOS

    Black screen on Flutter Web and iOS

    What

    • When trying to use scanner on Flutter web and IOS I get a black screen and scanner is not working.
    • This issue is also mentioned in first comment of this tutorial: https://www.youtube.com/watch?v=Oaujc9-LagY
    web ios 
    opened by mklepaczko 14
  • App crashes in android release mode

    App crashes in android release mode

    worked fine on debug or profile.

    $ flutter doctor

    [✓] Flutter (Channel stable, 3.0.0, on macOS 11.5.1 20G80 darwin-x64, locale en-AS) [✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0) [✓] Xcode - develop for iOS and macOS (Xcode 13.0) [✓] Chrome - develop for the web [✓] Android Studio (version 2021.1) [✓] VS Code (version 1.68.1) [✓] Connected device (3 available)

    $ flutter run --release

    E/AndroidRuntime(22407): FATAL EXCEPTION: CameraX-core_camera_0 E/AndroidRuntime(22407): Process: com.ubisor.cloud.production_tool, PID: 22407 E/AndroidRuntime(22407): java.lang.ExceptionInInitializerError E/AndroidRuntime(22407): at androidx.camera.camera2.internal.s.(Unknown Source:149) E/AndroidRuntime(22407): at androidx.camera.camera2.internal.M.(Unknown Source:138) E/AndroidRuntime(22407): at androidx.camera.camera2.internal.t.a(Unknown Source:34) E/AndroidRuntime(22407): at m.G.b(Unknown Source:47) E/AndroidRuntime(22407): at androidx.camera.core.C.b(Unknown Source:108) E/AndroidRuntime(22407): at androidx.camera.core.A.run(Unknown Source:10) E/AndroidRuntime(22407): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) E/AndroidRuntime(22407): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) E/AndroidRuntime(22407): at java.lang.Thread.run(Thread.java:933) E/AndroidRuntime(22407): Caused by: java.lang.RuntimeException: java.lang.NoSuchMethodException: m.n.values [] E/AndroidRuntime(22407): at java.lang.Enum.enumValues(Enum.java:270) E/AndroidRuntime(22407): at java.lang.Enum.access$000(Enum.java:61) E/AndroidRuntime(22407): at java.lang.Enum$1.create(Enum.java:277) E/AndroidRuntime(22407): at java.lang.Enum$1.create(Enum.java:275) E/AndroidRuntime(22407): at libcore.util.BasicLruCache.get(BasicLruCache.java:63) E/AndroidRuntime(22407): at java.lang.Enum.getSharedConstants(Enum.java:289) E/AndroidRuntime(22407): at java.lang.Class.getEnumConstantsShared(Class.java:2428) E/AndroidRuntime(22407): at java.util.EnumSet.getUniverse(EnumSet.java:407) E/AndroidRuntime(22407): at java.util.EnumSet.noneOf(EnumSet.java:109) E/AndroidRuntime(22407): at java.util.EnumSet.of(EnumSet.java:283) E/AndroidRuntime(22407): at androidx.camera.camera2.internal.r0.(Unknown Source:8) E/AndroidRuntime(22407): ... 9 more E/AndroidRuntime(22407): Caused by: java.lang.NoSuchMethodException: m.n.values [] E/AndroidRuntime(22407): at java.lang.Class.getMethod(Class.java:2072) E/AndroidRuntime(22407): at java.lang.Class.getDeclaredMethod(Class.java:2050) E/AndroidRuntime(22407): at java.lang.Enum.enumValues(Enum.java:267) E/AndroidRuntime(22407): ... 19 more

    opened by orliu 13
  • Getting randomly: Called start() while already started!

    Getting randomly: Called start() while already started!

    Hi everyone,

    i've implemented the scanner in a Stack widget and customized the onDetect callback. When arriving on the page containing the Scanner, i'm getting very often: flutter: MobileScanner: Called start() while already started! (and black screen (with actions icons) instead of camera)

    I tried to simply copy past the example file: barcode_scanner_controller.dart but same thing...

    I don't know what to do, if you have a recommendation?

    opened by baptistesx 11
  • [web] Bad state: stream has already been listened too

    [web] Bad state: stream has already been listened too

    On my web app, I have 2 different screens where I want to use MobileScanner. Both are stateful widgets where I initialize the controller in the state, and dispose it in the state's dispose() function.

    When I use the scanner in the first screen, everything works fine. Then I switch to the other screen and I get this error:

    ======== Exception caught by flutter web plugins ===================================================
    The following StateError was thrown during a framework-to-plugin message:
    Bad state: Stream has already been listened to.
    
    When the exception was thrown, this was the stack: 
    dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 251:49  throw_
    dart-sdk/lib/async/stream_controller.dart 676:7                               [_subscribe]
    dart-sdk/lib/async/stream_controller.dart 827:19                              [_createSubscription]
    dart-sdk/lib/async/stream_impl.dart 473:9                                     listen
    packages/flutter_web_plugins/src/plugin_event_channel.dart 136:38             _listen
    dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 45:50            <fn>
    dart-sdk/lib/async/zone.dart 1685:54                                          runUnary
    dart-sdk/lib/async/future_impl.dart 159:18                                    handleValue
    dart-sdk/lib/async/future_impl.dart 766:44                                    handleValueCallback
    dart-sdk/lib/async/future_impl.dart 795:13                                    _propagateToListeners
    dart-sdk/lib/async/future_impl.dart 465:9                                     callback
    dart-sdk/lib/async/schedule_microtask.dart 40:11                              _microtaskLoop
    dart-sdk/lib/async/schedule_microtask.dart 49:5                               _startMicrotaskLoop
    dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 166:15           <fn>
    ====================================================================================================
    
    ======== Exception caught by services library ======================================================
    The following MissingPluginException was thrown while activating platform stream on channel dev.steenbakker.mobile_scanner/scanner/event:
    MissingPluginException(No implementation found for method listen on channel dev.steenbakker.mobile_scanner/scanner/event)
    
    When the exception was thrown, this was the stack: 
    dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 251:49  throw_
    packages/flutter/src/services/platform_channel.dart 175:7                     _invokeMethod
    dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 45:50            <fn>
    dart-sdk/lib/async/zone.dart 1685:54                                          runUnary
    dart-sdk/lib/async/future_impl.dart 159:18                                    handleValue
    dart-sdk/lib/async/future_impl.dart 766:44                                    handleValueCallback
    dart-sdk/lib/async/future_impl.dart 795:13                                    _propagateToListeners
    dart-sdk/lib/async/future_impl.dart 601:5                                     [_completeWithValue]
    dart-sdk/lib/async/future_impl.dart 639:7                                     callback
    dart-sdk/lib/async/schedule_microtask.dart 40:11                              _microtaskLoop
    dart-sdk/lib/async/schedule_microtask.dart 49:5                               _startMicrotaskLoop
    dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 166:15           <fn>
    ====================================================================================================
    
    
    bug web 
    opened by sarbogast 11
  • crash on iOS

    crash on iOS

    Thread 1: "<mobile_scanner.MobileScanner: 0x2802d1810>: An -observeValueForKeyPath:ofObject:change:context: message was received but not handled.\nKey path: torchMode\nObserved object: <AVCaptureFigVideoDevice: 0x1048fb000 [Back Camera][com.apple.avfoundation.avcapturedevice.built-in_video:0]>\nChange: {\n kind = 1;\n new = 0;\n}\nContext: 0x0"

    opened by Adrift001 10
  • Multiple Detections causing problems

    Multiple Detections causing problems

    I think this may be a bug. If not, feel free to close, but it's not clear to me why a detected barcode wouldn't finish the onDetect logic prior to scanning another barcode.

    Discussed in https://github.com/juliansteenbakker/mobile_scanner/discussions/357

    Originally posted by adplant November 2, 2022 I've got an AlertDialog that I include a button to scan a MobileScanner() from. It works great most of the time, but I've noticed on one barcode in particular that onDetect gets called multiple times before popping the screen, and I don't know why.

    This is the code:

                                MobileScanner(
                                  onDetect: (barcode, args) async {
                                    if (barcode.rawValue == null) {
                                      debugPrint('Failed to scan Barcode');
                                      Navigator.pop(context);
                                    } else {
                                      final String code = barcode.rawValue!;
                                      debugPrint(
                                          'Barcode found! $code type: ${barcode.type}');
                                      textController.text = code;
                                      Navigator.pop(context);
                                    }
                                  },
                                ),
    

    And my console ends up looking something like this (notice the two different results that are found in the rawValue):

    I/flutter (32327): Barcode found! OIIPPP6 7 type: BarcodeType.text
    I/flutter (32327): Barcode found! XIIPPP6 P type: BarcodeType.text
    E/flutter (32327): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: 'package:flutter/src/widgets/navigator.dart': Failed assertion: line 4959 pos 16: 'entry.route._popCompleter.isCompleted': is not true.
    E/flutter (32327): #0      _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:51:61)
    E/flutter (32327): #1      _AssertionError._throwNew (dart:core-patch/errors_patch.dart:40:5)
    E/flutter (32327): #2      NavigatorState.pop (package:flutter/src/widgets/navigator.dart:4959:16)
    E/flutter (32327): #3      Navigator.pop (package:flutter/src/widgets/navigator.dart:2433:27)
    .....
    .....
    E/flutter (32327): #6      _RootZone.runUnaryGuarded (dart:async/zone.dart:1586:10)
    E/flutter (32327): #7      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
    E/flutter (32327): #8      _DelayedData.perform (dart:async/stream_impl.dart:515:14)
    E/flutter (32327): #9      _PendingEvents.handleNext (dart:async/stream_impl.dart:620:11)
    E/flutter (32327): #10     _PendingEvents.schedule.<anonymous closure> (dart:async/stream_impl.dart:591:7)
    E/flutter (32327): #11     _microtaskLoop (dart:async/schedule_microtask.dart:40:21)
    E/flutter (32327): #12     _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)
    

    So basically, I think I just need to know how to make sure the MobileScanner only detects one time before popping the screen. I do, however, need to still be able to select the Scan button as many times as I want while using the app and have the Scanner page populate.

    opened by adplant 9
  • Wrong rawValue on scan

    Wrong rawValue on scan

    Using the latest version of mobile_scanner often the value returned from rawValue is not the expected value.

    Use with BAR CODE.

    The best way to reproduce the problem is to start the MobileScanner with a barcode already in front of the camera.

    My code:

    class ScanTicketPage extends StatefulWidget {
      const ScanTicketPage({Key? key}) : super(key: key);
    
      // This widget is the home page of your application. It is stateful, meaning
      // that it has a State object (defined below) that contains fields that affect
      // how it looks.
    
      // This class is the configuration for the state. It holds the values (in this
      // case the title) provided by the parent (in this case the App widget) and
      // used by the build method of the State. Fields in a Widget subclass are
      // always marked "final".
      @override
      State<ScanTicketPage> createState() => _ScanTicketPageState();
    }
    
    class _ScanTicketPageState extends TranslateState<ScanTicketPage> {
      late MobileScannerController _scannerController;
      bool _submitted = false;
      TicketData? _ticketData;
    
      @override
      initState() {
        super.initState();
        _scannerController = MobileScannerController(
          facing: CameraFacing.back,
          torchEnabled: false,
        );
      }
    
      // ...
    
      getTicketInfo(String barcode) {
        // ... Check if exist ticket with given barcode
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(),
          body: SingleChildScrollView(
            child: Column(
              children: [
                Column(
                  children: [
                    // ...
                    Container(
                      margin: const EdgeInsets.symmetric(vertical: 20),
                      height: MediaQuery.of(context).size.height * 0.5,
                      child: MobileScanner(
                        allowDuplicates: false,
                        fit: BoxFit.cover,
                        controller: _scannerController,
                        onDetect: (barcode, args) {
                          if (barcode.rawValue != null && !_submitted) {
                            getTicketInfo(barcode.rawValue!);
                          }
                        },
                      ),
                    ),
                    // ...
                  ],
                ),
              ],
            ),
          ),
        );
      }
    }
    

    Expected value: 477230307788446333

    Here are the results of some attempts: 4777376733416333, 477130307788446333, 3631903333, 477230307788446333, 477230307785446333, 3077230307723030772303077230307788446333, 477230307785446333

    opened by LorenzoGuerriniSTEB 9
  • Stopping the controller crashes the app

    Stopping the controller crashes the app

    Platform: iOS Version: ^0.0.3

    Crash log when `MobileScanerController.stop()` is called.

    Runner was compiled with optimization - stepping may behave oddly; variables may not be available. thread # 1, queue = 'com.apple.main-thread', stop reason = Swift runtime failure: Unexpectedly found nil while implicitly unwrapping an Optional value frame # 1: 0x00000001056cea70 Runner specialized SwiftMobileScannerPlugin.stop(self=0x000000028252de00) at SwiftMobileScannerPlugin.swift:239:9 [opt] 236 } 237
    238 func stop(_ result: FlutterResult) { -> 239 captureSession.stopRunning() ^ 240 for input in captureSession.inputs { 241 captureSession.removeInput(input) 242 } Target 0: (Runner) stopped.

    I have tried to add a null check on the captureSession and other variables that are causing the crash and it fixes the crash, but then it won't stop scanning.

    Flutter Doctor Doctor summary (to see all details, run flutter doctor -v):
    • [✓] Flutter (Channel stable, 2.10.1, on macOS 12.1 21C52 darwin-x64, locale en-ET)
    • [✓] Android toolchain - develop for Android devices (Android SDK version 32.1.0-rc1)
    • [✓] Xcode - develop for iOS and macOS (Xcode 13.2.1)
    • [✓] Chrome - develop for the web
    • [✓] Android Studio (version 2021.1)
    • [✓] IntelliJ IDEA Community Edition (version 2021.3.1)
    • [✓] VS Code (version 1.64.2)
    • [✓] Connected device (4 available)
    • [✓] HTTP Host Availability
    bug 
    opened by elias8 9
  •  CocoaPods could not find compatible versions for pod

    CocoaPods could not find compatible versions for pod "GTMSessionFetcher/Core"

    When trying to run my App i get that error (caused by firebase_storage using a different version of GTMSessionFetcher/Core). What can I do about it?

    (The 2 suggestions at the bottom don't work)

    [!] CocoaPods could not find compatible versions for pod "GTMSessionFetcher/Core":
      In snapshot (Podfile.lock):
        GTMSessionFetcher/Core (< 4.0, = 3.0.0, >= 2.1)
    
      In Podfile:
        mobile_scanner (from `.symlinks/plugins/mobile_scanner/ios`) was resolved to 0.0.1, which depends on
          GoogleMLKit/BarcodeScanning (~> 3.2.0) was resolved to 3.2.0, which depends on
            MLKitBarcodeScanning (~> 2.2.0) was resolved to 2.2.0, which depends on
              MLKitVision (~> 4.2) was resolved to 4.2.0, which depends on
                GTMSessionFetcher/Core (~> 1.1)
    
    
    You have either:
     * out-of-date source repos which you can update with `pod repo update` or with `pod install --repo-update`.
     * changed the constraints of dependency `GTMSessionFetcher/Core` inside your development pod `mobile_scanner`.
       You should run `pod update GTMSessionFetcher/Core` to apply changes you've made.
    
    opened by FynnFrings 2
  • Crash Android RuntimeException ResultInfo and ArrayIndexOutOfBoundsException

    Crash Android RuntimeException ResultInfo and ArrayIndexOutOfBoundsException

    Hello :)

    I detected a crash with Google Crashlytics from mobile_scanner 2.0.0, on Android 11, Redmi Note 10 Pro and Android 12, Galaxy A13 5G, on decembre 2022 :

     MobileScanner.kt line 86
    
    Fatal Exception: java.lang.RuntimeException: Failure delivering result ResultInfo{who=@android:requestPermissions:, request=22022022, result=0, data=null} to activity {com.tao.mytao/com.tao.mytao.MainActivity}: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
           at android.app.ActivityThread.deliverResults(ActivityThread.java:5946)
           at android.app.ActivityThread.handleSendResult(ActivityThread.java:5985)
           at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:54)
           at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
           at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
           at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2443)
           at android.os.Handler.dispatchMessage(Handler.java:106)
           at android.os.Looper.loopOnce(Looper.java:226)
           at android.os.Looper.loop(Looper.java:313)
           at android.app.ActivityThread.main(ActivityThread.java:8751)
           at java.lang.reflect.Method.invoke(Method.java)
           at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
    
    Caused by java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
           at dev.steenbakker.mobile_scanner.MobileScanner.requestPermission$lambda-0(MobileScanner.kt:86)
           at dev.steenbakker.mobile_scanner.MobileScanner.$r8$lambda$QpUV_Cf6UTOHhJ2jK0mCWvPJnQI(MobileScanner.kt)
           at dev.steenbakker.mobile_scanner.MobileScanner$$InternalSyntheticLambda$0$e09502981050d625ecf594773ac76c7d9246fc158cfbc8e914f3647beb81515d$0.onRequestPermissionsResult(MobileScanner.java:4)
           at dev.steenbakker.mobile_scanner.MobileScanner.onRequestPermissionsResult(MobileScanner.kt:70)
           at io.flutter.embedding.engine.FlutterEngineConnectionRegistry$FlutterEngineActivityPluginBinding.onRequestPermissionsResult(FlutterEngineConnectionRegistry.java:777)
           at io.flutter.embedding.engine.FlutterEngineConnectionRegistry.onRequestPermissionsResult(FlutterEngineConnectionRegistry.java:409)
           at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onRequestPermissionsResult(FlutterActivityAndFragmentDelegate.java:757)
           at io.flutter.embedding.android.FlutterFragment.onRequestPermissionsResult(FlutterFragment.java:915)
           at io.flutter.embedding.android.FlutterFragmentActivity.onRequestPermissionsResult(FlutterFragmentActivity.java:549)
           at android.app.Activity.dispatchRequestPermissionsResult(Activity.java:8833)
           at android.app.Activity.dispatchActivityResult(Activity.java:8663)
           at android.app.ActivityThread.deliverResults(ActivityThread.java:5939)
           at android.app.ActivityThread.handleSendResult(ActivityThread.java:5985)
           at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:54)
           at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
           at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
           at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2443)
           at android.os.Handler.dispatchMessage(Handler.java:106)
           at android.os.Looper.loopOnce(Looper.java:226)
           at android.os.Looper.loop(Looper.java:313)
           at android.app.ActivityThread.main(ActivityThread.java:8751)
           at java.lang.reflect.Method.invoke(Method.java)
           at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
    
    opened by dleurs 0
  • chore(deps): bump kotlin_version from 1.7.22 to 1.8.0 in /android

    chore(deps): bump kotlin_version from 1.7.22 to 1.8.0 in /android

    Bumps kotlin_version from 1.7.22 to 1.8.0. Updates kotlin-gradle-plugin from 1.7.22 to 1.8.0

    Release notes

    Sourced from kotlin-gradle-plugin's releases.

    Kotlin 1.8.0

    Changelog

    Analysis API

    • KT-50255 Analysis API: Implement standalone mode for the Analysis API

    Analysis API. FIR

    • KT-54292 Symbol Light classes: implement PsiVariable.computeConstantValue for light field
    • KT-54293 Analysis API: fix constructor symbol creation when its accessed via type alias

    Android

    • KT-53342 TCS: New AndroidSourceSet layout for multiplatform
    • KT-53013 Increase AGP compile version in KGP to 4.1.3
    • KT-54013 Report error when using deprecated Kotlin Android Extensions compiler plugin
    • KT-53709 MPP, Android SSL2: Conflicting warnings for androidTest/kotlin source set folder

    Backend. Native. Debug

    • KT-53561 Invalid LLVM module: "inlinable function call in a function with debug info must have a !dbg location"

    Compiler

    New Features

    • KT-52817 Add @JvmSerializableLambda annotation to keep old behavior of non-invokedynamic lambdas
    • KT-54460 Implementation of non-local break and continue
    • KT-53916 Support Xcode 14 and new Objective-C frameworks in Kotlin/Native compiler
    • KT-32208 Generate method annotations into bytecode for suspend lambdas (on invokeSuspend)
    • KT-53438 Introduce a way to get SourceDebugExtension attribute value via JVMTI for profiler and coverage

    Performance Improvements

    • KT-53347 Get rid of excess allocations in parser
    • KT-53689 JVM: Optimize equality on class literals
    • KT-53119 Improve String Concatenation Lowering

    Fixes

    • KT-53465 Unnecessary checkcast to array of reified type is not optimized since Kotlin 1.6.20
    • KT-49658 NI: False negative TYPE_MISMATCH on nullable type with when
    • KT-48162 NON_VARARG_SPREAD isn't reported on *toTypedArray() call
    • KT-43493 NI: False negative: no compilation error "Operator '==' cannot be applied to 'Long' and 'Int'" is reported in builder inference lambdas
    • KT-54393 Change in behavior from 1.7.10 to 1.7.20 for java field override.
    • KT-55357 IllegalStateException when reading a class that delegates to a Java class with a definitely-not-null type with a flexible upper bound
    • KT-55068 Kotlin Gradle DSL: No mapping for symbol: VALUE_PARAMETER SCRIPT_IMPLICIT_RECEIVER on JVM IR backend
    • KT-51284 SAM conversion doesn't work if method has context receivers
    • KT-48532 Remove old JVM backend

    ... (truncated)

    Changelog

    Sourced from kotlin-gradle-plugin's changelog.

    1.8.0

    Analysis API

    • KT-50255 Analysis API: Implement standalone mode for the Analysis API

    Analysis API. FIR

    • KT-54292 Symbol Light classes: implement PsiVariable.computeConstantValue for light field
    • KT-54293 Analysis API: fix constructor symbol creation when its accessed via type alias

    Android

    • KT-53342 TCS: New AndroidSourceSet layout for multiplatform
    • KT-53013 Increase AGP compile version in KGP to 4.1.3
    • KT-54013 Report error when using deprecated Kotlin Android Extensions compiler plugin
    • KT-53709 MPP, Android SSL2: Conflicting warnings for androidTest/kotlin source set folder

    Backend. Native. Debug

    • KT-53561 Invalid LLVM module: "inlinable function call in a function with debug info must have a !dbg location"

    Compiler

    New Features

    • KT-52817 Add @JvmSerializableLambda annotation to keep old behavior of non-invokedynamic lambdas
    • KT-54460 Implementation of non-local break and continue
    • KT-53916 Support Xcode 14 and new Objective-C frameworks in Kotlin/Native compiler
    • KT-32208 Generate method annotations into bytecode for suspend lambdas (on invokeSuspend)
    • KT-53438 Introduce a way to get SourceDebugExtension attribute value via JVMTI for profiler and coverage

    Performance Improvements

    • KT-53347 Get rid of excess allocations in parser
    • KT-53689 JVM: Optimize equality on class literals
    • KT-53119 Improve String Concatenation Lowering

    Fixes

    • KT-53465 Unnecessary checkcast to array of reified type is not optimized since Kotlin 1.6.20
    • KT-49658 NI: False negative TYPE_MISMATCH on nullable type with when
    • KT-48162 NON_VARARG_SPREAD isn't reported on *toTypedArray() call
    • KT-43493 NI: False negative: no compilation error "Operator '==' cannot be applied to 'Long' and 'Int'" is reported in builder inference lambdas
    • KT-54393 Change in behavior from 1.7.10 to 1.7.20 for java field override.
    • KT-55357 IllegalStateException when reading a class that delegates to a Java class with a definitely-not-null type with a flexible upper bound
    • KT-55068 Kotlin Gradle DSL: No mapping for symbol: VALUE_PARAMETER SCRIPT_IMPLICIT_RECEIVER on JVM IR backend
    • KT-51284 SAM conversion doesn't work if method has context receivers
    • KT-48532 Remove old JVM backend
    • KT-55065 Kotlin Gradle DSL: Reflection cannot find class data for lambda, produced by JVM IR backend

    ... (truncated)

    Commits
    • da1a843 Add ChangeLog for 1.8.0-RC2
    • d325cf8 Call additional publishToMavenLocal in maven build scripts and enable info
    • 0403d70 Don't leave Gradle daemons after build scripts
    • 52b225d Fix task module-name is not propagated to compiler arguments
    • d40ebc3 Specify versions-maven-plugin version explicitly
    • 2e829ed Fix version parsing crash on Gradle rich version string
    • f603c0e Scripting, IR: fix capturing of implicit receiver
    • 06cbf8f Scripting, tests: enable custom script tests with IR
    • d61cef0 Fix deserialization exception for DNN types from Java
    • ea33e72 JVM IR: script is a valid container for local delegated properties
    • Additional commits viewable in compare view

    Updates kotlin-stdlib-jdk7 from 1.7.22 to 1.8.0

    Release notes

    Sourced from kotlin-stdlib-jdk7's releases.

    Kotlin 1.8.0

    Changelog

    Analysis API

    • KT-50255 Analysis API: Implement standalone mode for the Analysis API

    Analysis API. FIR

    • KT-54292 Symbol Light classes: implement PsiVariable.computeConstantValue for light field
    • KT-54293 Analysis API: fix constructor symbol creation when its accessed via type alias

    Android

    • KT-53342 TCS: New AndroidSourceSet layout for multiplatform
    • KT-53013 Increase AGP compile version in KGP to 4.1.3
    • KT-54013 Report error when using deprecated Kotlin Android Extensions compiler plugin
    • KT-53709 MPP, Android SSL2: Conflicting warnings for androidTest/kotlin source set folder

    Backend. Native. Debug

    • KT-53561 Invalid LLVM module: "inlinable function call in a function with debug info must have a !dbg location"

    Compiler

    New Features

    • KT-52817 Add @JvmSerializableLambda annotation to keep old behavior of non-invokedynamic lambdas
    • KT-54460 Implementation of non-local break and continue
    • KT-53916 Support Xcode 14 and new Objective-C frameworks in Kotlin/Native compiler
    • KT-32208 Generate method annotations into bytecode for suspend lambdas (on invokeSuspend)
    • KT-53438 Introduce a way to get SourceDebugExtension attribute value via JVMTI for profiler and coverage

    Performance Improvements

    • KT-53347 Get rid of excess allocations in parser
    • KT-53689 JVM: Optimize equality on class literals
    • KT-53119 Improve String Concatenation Lowering

    Fixes

    • KT-53465 Unnecessary checkcast to array of reified type is not optimized since Kotlin 1.6.20
    • KT-49658 NI: False negative TYPE_MISMATCH on nullable type with when
    • KT-48162 NON_VARARG_SPREAD isn't reported on *toTypedArray() call
    • KT-43493 NI: False negative: no compilation error "Operator '==' cannot be applied to 'Long' and 'Int'" is reported in builder inference lambdas
    • KT-54393 Change in behavior from 1.7.10 to 1.7.20 for java field override.
    • KT-55357 IllegalStateException when reading a class that delegates to a Java class with a definitely-not-null type with a flexible upper bound
    • KT-55068 Kotlin Gradle DSL: No mapping for symbol: VALUE_PARAMETER SCRIPT_IMPLICIT_RECEIVER on JVM IR backend
    • KT-51284 SAM conversion doesn't work if method has context receivers
    • KT-48532 Remove old JVM backend

    ... (truncated)

    Changelog

    Sourced from kotlin-stdlib-jdk7's changelog.

    1.8.0

    Analysis API

    • KT-50255 Analysis API: Implement standalone mode for the Analysis API

    Analysis API. FIR

    • KT-54292 Symbol Light classes: implement PsiVariable.computeConstantValue for light field
    • KT-54293 Analysis API: fix constructor symbol creation when its accessed via type alias

    Android

    • KT-53342 TCS: New AndroidSourceSet layout for multiplatform
    • KT-53013 Increase AGP compile version in KGP to 4.1.3
    • KT-54013 Report error when using deprecated Kotlin Android Extensions compiler plugin
    • KT-53709 MPP, Android SSL2: Conflicting warnings for androidTest/kotlin source set folder

    Backend. Native. Debug

    • KT-53561 Invalid LLVM module: "inlinable function call in a function with debug info must have a !dbg location"

    Compiler

    New Features

    • KT-52817 Add @JvmSerializableLambda annotation to keep old behavior of non-invokedynamic lambdas
    • KT-54460 Implementation of non-local break and continue
    • KT-53916 Support Xcode 14 and new Objective-C frameworks in Kotlin/Native compiler
    • KT-32208 Generate method annotations into bytecode for suspend lambdas (on invokeSuspend)
    • KT-53438 Introduce a way to get SourceDebugExtension attribute value via JVMTI for profiler and coverage

    Performance Improvements

    • KT-53347 Get rid of excess allocations in parser
    • KT-53689 JVM: Optimize equality on class literals
    • KT-53119 Improve String Concatenation Lowering

    Fixes

    • KT-53465 Unnecessary checkcast to array of reified type is not optimized since Kotlin 1.6.20
    • KT-49658 NI: False negative TYPE_MISMATCH on nullable type with when
    • KT-48162 NON_VARARG_SPREAD isn't reported on *toTypedArray() call
    • KT-43493 NI: False negative: no compilation error "Operator '==' cannot be applied to 'Long' and 'Int'" is reported in builder inference lambdas
    • KT-54393 Change in behavior from 1.7.10 to 1.7.20 for java field override.
    • KT-55357 IllegalStateException when reading a class that delegates to a Java class with a definitely-not-null type with a flexible upper bound
    • KT-55068 Kotlin Gradle DSL: No mapping for symbol: VALUE_PARAMETER SCRIPT_IMPLICIT_RECEIVER on JVM IR backend
    • KT-51284 SAM conversion doesn't work if method has context receivers
    • KT-48532 Remove old JVM backend
    • KT-55065 Kotlin Gradle DSL: Reflection cannot find class data for lambda, produced by JVM IR backend

    ... (truncated)

    Commits
    • da1a843 Add ChangeLog for 1.8.0-RC2
    • d325cf8 Call additional publishToMavenLocal in maven build scripts and enable info
    • 0403d70 Don't leave Gradle daemons after build scripts
    • 52b225d Fix task module-name is not propagated to compiler arguments
    • d40ebc3 Specify versions-maven-plugin version explicitly
    • 2e829ed Fix version parsing crash on Gradle rich version string
    • f603c0e Scripting, IR: fix capturing of implicit receiver
    • 06cbf8f Scripting, tests: enable custom script tests with IR
    • d61cef0 Fix deserialization exception for DNN types from Java
    • ea33e72 JVM IR: script is a valid container for local delegated properties
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 0
  • chore(deps): bump kotlin_version from 1.7.22 to 1.8.0 in /example/android

    chore(deps): bump kotlin_version from 1.7.22 to 1.8.0 in /example/android

    Bumps kotlin_version from 1.7.22 to 1.8.0. Updates kotlin-gradle-plugin from 1.7.22 to 1.8.0

    Release notes

    Sourced from kotlin-gradle-plugin's releases.

    Kotlin 1.8.0

    Changelog

    Analysis API

    • KT-50255 Analysis API: Implement standalone mode for the Analysis API

    Analysis API. FIR

    • KT-54292 Symbol Light classes: implement PsiVariable.computeConstantValue for light field
    • KT-54293 Analysis API: fix constructor symbol creation when its accessed via type alias

    Android

    • KT-53342 TCS: New AndroidSourceSet layout for multiplatform
    • KT-53013 Increase AGP compile version in KGP to 4.1.3
    • KT-54013 Report error when using deprecated Kotlin Android Extensions compiler plugin
    • KT-53709 MPP, Android SSL2: Conflicting warnings for androidTest/kotlin source set folder

    Backend. Native. Debug

    • KT-53561 Invalid LLVM module: "inlinable function call in a function with debug info must have a !dbg location"

    Compiler

    New Features

    • KT-52817 Add @JvmSerializableLambda annotation to keep old behavior of non-invokedynamic lambdas
    • KT-54460 Implementation of non-local break and continue
    • KT-53916 Support Xcode 14 and new Objective-C frameworks in Kotlin/Native compiler
    • KT-32208 Generate method annotations into bytecode for suspend lambdas (on invokeSuspend)
    • KT-53438 Introduce a way to get SourceDebugExtension attribute value via JVMTI for profiler and coverage

    Performance Improvements

    • KT-53347 Get rid of excess allocations in parser
    • KT-53689 JVM: Optimize equality on class literals
    • KT-53119 Improve String Concatenation Lowering

    Fixes

    • KT-53465 Unnecessary checkcast to array of reified type is not optimized since Kotlin 1.6.20
    • KT-49658 NI: False negative TYPE_MISMATCH on nullable type with when
    • KT-48162 NON_VARARG_SPREAD isn't reported on *toTypedArray() call
    • KT-43493 NI: False negative: no compilation error "Operator '==' cannot be applied to 'Long' and 'Int'" is reported in builder inference lambdas
    • KT-54393 Change in behavior from 1.7.10 to 1.7.20 for java field override.
    • KT-55357 IllegalStateException when reading a class that delegates to a Java class with a definitely-not-null type with a flexible upper bound
    • KT-55068 Kotlin Gradle DSL: No mapping for symbol: VALUE_PARAMETER SCRIPT_IMPLICIT_RECEIVER on JVM IR backend
    • KT-51284 SAM conversion doesn't work if method has context receivers
    • KT-48532 Remove old JVM backend

    ... (truncated)

    Changelog

    Sourced from kotlin-gradle-plugin's changelog.

    1.8.0

    Analysis API

    • KT-50255 Analysis API: Implement standalone mode for the Analysis API

    Analysis API. FIR

    • KT-54292 Symbol Light classes: implement PsiVariable.computeConstantValue for light field
    • KT-54293 Analysis API: fix constructor symbol creation when its accessed via type alias

    Android

    • KT-53342 TCS: New AndroidSourceSet layout for multiplatform
    • KT-53013 Increase AGP compile version in KGP to 4.1.3
    • KT-54013 Report error when using deprecated Kotlin Android Extensions compiler plugin
    • KT-53709 MPP, Android SSL2: Conflicting warnings for androidTest/kotlin source set folder

    Backend. Native. Debug

    • KT-53561 Invalid LLVM module: "inlinable function call in a function with debug info must have a !dbg location"

    Compiler

    New Features

    • KT-52817 Add @JvmSerializableLambda annotation to keep old behavior of non-invokedynamic lambdas
    • KT-54460 Implementation of non-local break and continue
    • KT-53916 Support Xcode 14 and new Objective-C frameworks in Kotlin/Native compiler
    • KT-32208 Generate method annotations into bytecode for suspend lambdas (on invokeSuspend)
    • KT-53438 Introduce a way to get SourceDebugExtension attribute value via JVMTI for profiler and coverage

    Performance Improvements

    • KT-53347 Get rid of excess allocations in parser
    • KT-53689 JVM: Optimize equality on class literals
    • KT-53119 Improve String Concatenation Lowering

    Fixes

    • KT-53465 Unnecessary checkcast to array of reified type is not optimized since Kotlin 1.6.20
    • KT-49658 NI: False negative TYPE_MISMATCH on nullable type with when
    • KT-48162 NON_VARARG_SPREAD isn't reported on *toTypedArray() call
    • KT-43493 NI: False negative: no compilation error "Operator '==' cannot be applied to 'Long' and 'Int'" is reported in builder inference lambdas
    • KT-54393 Change in behavior from 1.7.10 to 1.7.20 for java field override.
    • KT-55357 IllegalStateException when reading a class that delegates to a Java class with a definitely-not-null type with a flexible upper bound
    • KT-55068 Kotlin Gradle DSL: No mapping for symbol: VALUE_PARAMETER SCRIPT_IMPLICIT_RECEIVER on JVM IR backend
    • KT-51284 SAM conversion doesn't work if method has context receivers
    • KT-48532 Remove old JVM backend
    • KT-55065 Kotlin Gradle DSL: Reflection cannot find class data for lambda, produced by JVM IR backend

    ... (truncated)

    Commits
    • da1a843 Add ChangeLog for 1.8.0-RC2
    • d325cf8 Call additional publishToMavenLocal in maven build scripts and enable info
    • 0403d70 Don't leave Gradle daemons after build scripts
    • 52b225d Fix task module-name is not propagated to compiler arguments
    • d40ebc3 Specify versions-maven-plugin version explicitly
    • 2e829ed Fix version parsing crash on Gradle rich version string
    • f603c0e Scripting, IR: fix capturing of implicit receiver
    • 06cbf8f Scripting, tests: enable custom script tests with IR
    • d61cef0 Fix deserialization exception for DNN types from Java
    • ea33e72 JVM IR: script is a valid container for local delegated properties
    • Additional commits viewable in compare view

    Updates kotlin-stdlib-jdk7 from 1.7.22 to 1.8.0

    Release notes

    Sourced from kotlin-stdlib-jdk7's releases.

    Kotlin 1.8.0

    Changelog

    Analysis API

    • KT-50255 Analysis API: Implement standalone mode for the Analysis API

    Analysis API. FIR

    • KT-54292 Symbol Light classes: implement PsiVariable.computeConstantValue for light field
    • KT-54293 Analysis API: fix constructor symbol creation when its accessed via type alias

    Android

    • KT-53342 TCS: New AndroidSourceSet layout for multiplatform
    • KT-53013 Increase AGP compile version in KGP to 4.1.3
    • KT-54013 Report error when using deprecated Kotlin Android Extensions compiler plugin
    • KT-53709 MPP, Android SSL2: Conflicting warnings for androidTest/kotlin source set folder

    Backend. Native. Debug

    • KT-53561 Invalid LLVM module: "inlinable function call in a function with debug info must have a !dbg location"

    Compiler

    New Features

    • KT-52817 Add @JvmSerializableLambda annotation to keep old behavior of non-invokedynamic lambdas
    • KT-54460 Implementation of non-local break and continue
    • KT-53916 Support Xcode 14 and new Objective-C frameworks in Kotlin/Native compiler
    • KT-32208 Generate method annotations into bytecode for suspend lambdas (on invokeSuspend)
    • KT-53438 Introduce a way to get SourceDebugExtension attribute value via JVMTI for profiler and coverage

    Performance Improvements

    • KT-53347 Get rid of excess allocations in parser
    • KT-53689 JVM: Optimize equality on class literals
    • KT-53119 Improve String Concatenation Lowering

    Fixes

    • KT-53465 Unnecessary checkcast to array of reified type is not optimized since Kotlin 1.6.20
    • KT-49658 NI: False negative TYPE_MISMATCH on nullable type with when
    • KT-48162 NON_VARARG_SPREAD isn't reported on *toTypedArray() call
    • KT-43493 NI: False negative: no compilation error "Operator '==' cannot be applied to 'Long' and 'Int'" is reported in builder inference lambdas
    • KT-54393 Change in behavior from 1.7.10 to 1.7.20 for java field override.
    • KT-55357 IllegalStateException when reading a class that delegates to a Java class with a definitely-not-null type with a flexible upper bound
    • KT-55068 Kotlin Gradle DSL: No mapping for symbol: VALUE_PARAMETER SCRIPT_IMPLICIT_RECEIVER on JVM IR backend
    • KT-51284 SAM conversion doesn't work if method has context receivers
    • KT-48532 Remove old JVM backend

    ... (truncated)

    Changelog

    Sourced from kotlin-stdlib-jdk7's changelog.

    1.8.0

    Analysis API

    • KT-50255 Analysis API: Implement standalone mode for the Analysis API

    Analysis API. FIR

    • KT-54292 Symbol Light classes: implement PsiVariable.computeConstantValue for light field
    • KT-54293 Analysis API: fix constructor symbol creation when its accessed via type alias

    Android

    • KT-53342 TCS: New AndroidSourceSet layout for multiplatform
    • KT-53013 Increase AGP compile version in KGP to 4.1.3
    • KT-54013 Report error when using deprecated Kotlin Android Extensions compiler plugin
    • KT-53709 MPP, Android SSL2: Conflicting warnings for androidTest/kotlin source set folder

    Backend. Native. Debug

    • KT-53561 Invalid LLVM module: "inlinable function call in a function with debug info must have a !dbg location"

    Compiler

    New Features

    • KT-52817 Add @JvmSerializableLambda annotation to keep old behavior of non-invokedynamic lambdas
    • KT-54460 Implementation of non-local break and continue
    • KT-53916 Support Xcode 14 and new Objective-C frameworks in Kotlin/Native compiler
    • KT-32208 Generate method annotations into bytecode for suspend lambdas (on invokeSuspend)
    • KT-53438 Introduce a way to get SourceDebugExtension attribute value via JVMTI for profiler and coverage

    Performance Improvements

    • KT-53347 Get rid of excess allocations in parser
    • KT-53689 JVM: Optimize equality on class literals
    • KT-53119 Improve String Concatenation Lowering

    Fixes

    • KT-53465 Unnecessary checkcast to array of reified type is not optimized since Kotlin 1.6.20
    • KT-49658 NI: False negative TYPE_MISMATCH on nullable type with when
    • KT-48162 NON_VARARG_SPREAD isn't reported on *toTypedArray() call
    • KT-43493 NI: False negative: no compilation error "Operator '==' cannot be applied to 'Long' and 'Int'" is reported in builder inference lambdas
    • KT-54393 Change in behavior from 1.7.10 to 1.7.20 for java field override.
    • KT-55357 IllegalStateException when reading a class that delegates to a Java class with a definitely-not-null type with a flexible upper bound
    • KT-55068 Kotlin Gradle DSL: No mapping for symbol: VALUE_PARAMETER SCRIPT_IMPLICIT_RECEIVER on JVM IR backend
    • KT-51284 SAM conversion doesn't work if method has context receivers
    • KT-48532 Remove old JVM backend
    • KT-55065 Kotlin Gradle DSL: Reflection cannot find class data for lambda, produced by JVM IR backend

    ... (truncated)

    Commits
    • da1a843 Add ChangeLog for 1.8.0-RC2
    • d325cf8 Call additional publishToMavenLocal in maven build scripts and enable info
    • 0403d70 Don't leave Gradle daemons after build scripts
    • 52b225d Fix task module-name is not propagated to compiler arguments
    • d40ebc3 Specify versions-maven-plugin version explicitly
    • 2e829ed Fix version parsing crash on Gradle rich version string
    • f603c0e Scripting, IR: fix capturing of implicit receiver
    • 06cbf8f Scripting, tests: enable custom script tests with IR
    • d61cef0 Fix deserialization exception for DNN types from Java
    • ea33e72 JVM IR: script is a valid container for local delegated properties
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 0
  • LateInitializationError on web with latest Flutter master

    LateInitializationError on web with latest Flutter master

    Using

    flutter channel master 
    flutter upgrade
    

    and having

    dependencies:
      mobile_scanner: 2.1.0
    

    I started getting the following error in mobile_scanner_web_plugin.dart 27:27 recently:

    Launching lib/main.dart on Chrome in debug mode...
    Waiting for connection from debug service on Chrome...
    This app is linked to the debug service: ws://127.0.0.1:49543/Eahy6sa_Wpc=/ws
    Debug service listening on ws://127.0.0.1:49543/Eahy6sa_Wpc=/ws
    
    💪 Running with sound null safety 💪
    Debug service listening on ws://127.0.0.1:49543/Eahy6sa_Wpc=/ws
    Error: LateInitializationError: Field '_dimensionsProvider' has not been initialized.
    dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 288:49      throw_
    lib/_engine/engine/window.dart 196:27                                             get [_dimensionsProvider]
    lib/_engine/engine/window.dart 231:43                                             computePhysicalSize
    lib/_engine/engine/window.dart 209:7                                              get physicalSize
    packages/flutter/src/rendering/binding.dart 309:33                                createViewConfiguration
    packages/flutter/src/rendering/binding.dart 217:44                                initRenderView
    packages/flutter/src/rendering/binding.dart 44:5                                  initInstances
    packages/flutter/src/widgets/binding.dart 247:11                                  initInstances
    packages/flutter/src/foundation/binding.dart 150:5                                new
    packages/flutter/src/widgets/binding.dart 1143:37                                 new
    packages/flutter/src/widgets/binding.dart 1143:37                                 new
    packages/flutter/src/widgets/binding.dart 1143:37                                 new
    packages/flutter/src/widgets/binding.dart 1143:37                                 new
    packages/flutter/src/widgets/binding.dart 1143:37                                 new
    packages/flutter/src/widgets/binding.dart 1143:37                                 new
    packages/flutter/src/widgets/binding.dart 1143:37                                 new
    packages/flutter/src/widgets/binding.dart 1263:3                                  new
    packages/flutter/src/widgets/binding.dart 1260:7                                  ensureInitialized
    packages/mobile_scanner/mobile_scanner_web_plugin.dart 27:27                      registerWith
    web_plugin_registrant.dart 22:26                                                  registerPlugins
    web_entrypoint.dart 27:24                                                         <fn>
    dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 367:37  _checkAndCall
    dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 372:39  dcall
    lib/ui/initialization.dart 73:24                                                  <fn>
    dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54                runBody
    dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5                _async
    lib/ui/initialization.dart 71:16                                                  <fn>
    dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 367:37  _checkAndCall
    dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 431:10  callMethod
    dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 435:5   dsend
    lib/_engine/engine/app_bootstrap.dart 62:22                                       <fn>
    dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54                runBody
    dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5                _async
    lib/_engine/engine/app_bootstrap.dart 60:25                                       <fn>
    dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 367:37  _checkAndCall
    dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 372:39  dcall
    lib/_engine/engine/app_bootstrap.dart 58:14                                       <fn>
    dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 367:37  _checkAndCall
    dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 372:39  dcall
    . 54:26                                                                           <fn>
    Application finished.
    

    It only happens for web, it's working with a connected iPhone run.

    opened by paplorinc 2
  • Android build failed - Could not determine the dependencies of task ':mobile_scanner:compileReleaseJavaWithJavac'.

    Android build failed - Could not determine the dependencies of task ':mobile_scanner:compileReleaseJavaWithJavac'.

    I'm trying to build an APK but I'm getting this error after 5s of running the command $ flutter build apk --release

    flutter doctor

    [✓] Flutter (Channel stable, 3.3.9, on macOS 12.6.1 21G217 darwin-x64, locale
        en-MA)
    [✓] Android toolchain - develop for Android devices (Android SDK version 33.0.1)
    [✓] Xcode - develop for iOS and macOS (Xcode 14.1)
    [✓] Chrome - develop for the web
    [✓] Android Studio (version 2021.3)
    [✓] VS Code (version 1.74.2)
    [✓] Connected device (3 available)
    [✓] HTTP Host Availability
    

    Also

    This happening with the latest flutter version and also the qr_code_scanner package (that this one is replacing)

    The build output

    💪 Building with sound null safety 💪
    
    Warning: Premature end of file.
    org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Premature end of file.
            at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
            at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178)
            at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
            at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
            at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1471)
            at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:1013)
            at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
            at java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112)
            at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:534)
            at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
            at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
            at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
            at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
            at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
            at java.xml/org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:357)
            at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:228)
            at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:199)
            at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:123)
            at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:106)
            at com.android.repository.impl.meta.SchemaModuleUtil.unmarshal(SchemaModuleUtil.java:195)
            at com.android.build.gradle.internal.SdkParsingUtilsKt.parsePackage(SdkParsingUtils.kt:73)
            at com.android.build.gradle.internal.PlatformComponents$Companion.build$gradle_core(SdkDirectLoadingStrategy.kt:322)
            at com.android.build.gradle.internal.SdkDirectLoadingStrategy.loadSdkComponents(SdkDirectLoadingStrategy.kt:127)
            at com.android.build.gradle.internal.SdkDirectLoadingStrategy.init(SdkDirectLoadingStrategy.kt:92)
            at com.android.build.gradle.internal.SdkDirectLoadingStrategy.access$init(SdkDirectLoadingStrategy.kt:46)
            at com.android.build.gradle.internal.SdkDirectLoadingStrategy$components$2.invoke(SdkDirectLoadingStrategy.kt:71)
            at com.android.build.gradle.internal.SdkDirectLoadingStrategy$components$2.invoke(SdkDirectLoadingStrategy.kt:70)
            at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
            at com.android.build.gradle.internal.SdkDirectLoadingStrategy.getComponents(SdkDirectLoadingStrategy.kt:70)
            at com.android.build.gradle.internal.SdkDirectLoadingStrategy.loadedSuccessfully(SdkDirectLoadingStrategy.kt:178)
            at com.android.build.gradle.internal.SdkLoadingStrategy.getTargetBootClasspath(SdkLoadingStrategy.kt:36)
            at com.android.build.gradle.internal.SdkComponentsBuildService$VersionedSdkLoader$targetBootClasspathProvider$1.call(SdkComponents.kt:184)
            at com.android.build.gradle.internal.SdkComponentsBuildService$VersionedSdkLoader$targetBootClasspathProvider$1.call(SdkComponents.kt:183)
            at org.gradle.api.internal.provider.DefaultProvider.calculateOwnValue(DefaultProvider.java:72)
            at org.gradle.api.internal.provider.AbstractMinimalProvider.calculateValue(AbstractMinimalProvider.java:103)
            at org.gradle.api.internal.provider.FlatMapProvider.calculateOwnValue(FlatMapProvider.java:50)
            at org.gradle.api.internal.provider.AbstractMinimalProvider.calculateValue(AbstractMinimalProvider.java:103)
            at org.gradle.api.internal.provider.FlatMapProvider.backingProvider(FlatMapProvider.java:62)
            at org.gradle.api.internal.provider.FlatMapProvider.getProducer(FlatMapProvider.java:71)
            at org.gradle.api.internal.provider.Collectors$ElementsFromCollectionProvider.getProducer(Collectors.java:231)
            at org.gradle.api.internal.provider.AbstractCollectionProperty$CollectingSupplier.getProducer(AbstractCollectionProperty.java:389)
            at org.gradle.api.internal.provider.AbstractProperty.getProducer(AbstractProperty.java:178)
            at org.gradle.api.internal.provider.Collectors$ElementsFromCollectionProvider.getProducer(Collectors.java:231)
            at org.gradle.api.internal.provider.AbstractCollectionProperty$PlusCollector.getProducer(AbstractCollectionProperty.java:465)
            at org.gradle.api.internal.provider.AbstractCollectionProperty$CollectingSupplier.getProducer(AbstractCollectionProperty.java:389)
            at org.gradle.api.internal.provider.AbstractProperty.getProducer(AbstractProperty.java:178)
            at org.gradle.api.internal.file.collections.ProviderBackedFileCollection.visitDependencies(ProviderBackedFileCollection.java:50)
            at org.gradle.api.internal.tasks.CachingTaskDependencyResolveContext$TaskGraphImpl.getNodeValues(CachingTaskDependencyResolveContext.java:114)
            at org.gradle.internal.graph.CachingDirectedGraphWalker$GraphWithEmptyEdges.getNodeValues(CachingDirectedGraphWalker.java:213)
            at org.gradle.internal.graph.CachingDirectedGraphWalker.doSearch(CachingDirectedGraphWalker.java:121)
            at org.gradle.internal.graph.CachingDirectedGraphWalker.findValues(CachingDirectedGraphWalker.java:73)
            at org.gradle.api.internal.tasks.CachingTaskDependencyResolveContext.getDependencies(CachingTaskDependencyResolveContext.java:69)
            at org.gradle.execution.plan.TaskDependencyResolver.resolveDependenciesFor(TaskDependencyResolver.java:49)
            at org.gradle.execution.plan.LocalTaskNode.getDependencies(LocalTaskNode.java:168)
            at org.gradle.execution.plan.LocalTaskNode.resolveDependencies(LocalTaskNode.java:133)
            at org.gradle.execution.plan.DefaultExecutionPlan.doAddNodes(DefaultExecutionPlan.java:202)
            at org.gradle.execution.plan.DefaultExecutionPlan.addEntryTasks(DefaultExecutionPlan.java:166)
            at org.gradle.execution.plan.DefaultExecutionPlan.addEntryTasks(DefaultExecutionPlan.java:148)
            at org.gradle.execution.TaskNameResolvingBuildConfigurationAction.configure(TaskNameResolvingBuildConfigurationAction.java:47)
            at org.gradle.execution.DefaultBuildConfigurationActionExecuter.configure(DefaultBuildConfigurationActionExecuter.java:52)
            at org.gradle.execution.DefaultBuildConfigurationActionExecuter.access$000(DefaultBuildConfigurationActionExecuter.java:26)
            at org.gradle.execution.DefaultBuildConfigurationActionExecuter$1.proceed(DefaultBuildConfigurationActionExecuter.java:65)
            at org.gradle.execution.DefaultTasksBuildExecutionAction.configure(DefaultTasksBuildExecutionAction.java:48)
            at org.gradle.execution.DefaultBuildConfigurationActionExecuter.configure(DefaultBuildConfigurationActionExecuter.java:52)
            at org.gradle.execution.DefaultBuildConfigurationActionExecuter.lambda$select$0(DefaultBuildConfigurationActionExecuter.java:39)
            at org.gradle.internal.Factories$1.create(Factories.java:31)
            at org.gradle.internal.work.DefaultWorkerLeaseService.withoutLocks(DefaultWorkerLeaseService.java:332)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry.lambda$withMutableStateOfAllProjects$0(DefaultProjectStateRegistry.java:154)
            at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:270)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry.withMutableStateOfAllProjects(DefaultProjectStateRegistry.java:154)
            at org.gradle.api.internal.project.DefaultProjectStateRegistry.withMutableStateOfAllProjects(DefaultProjectStateRegistry.java:143)
            at org.gradle.execution.DefaultBuildConfigurationActionExecuter.select(DefaultBuildConfigurationActionExecuter.java:38)
            at org.gradle.initialization.DefaultTaskExecutionPreparer.prepareForTaskExecution(DefaultTaskExecutionPreparer.java:42)
            at org.gradle.initialization.VintageBuildModelController.lambda$scheduleRequestedTasks$1(VintageBuildModelController.java:81)
            at org.gradle.internal.model.StateTransitionController.lambda$inState$1(StateTransitionController.java:98)
            at org.gradle.internal.model.StateTransitionController.lambda$inState$2(StateTransitionController.java:113)
            at org.gradle.internal.work.DefaultSynchronizer.withLock(DefaultSynchronizer.java:44)
            at org.gradle.internal.model.StateTransitionController.inState(StateTransitionController.java:109)
            at org.gradle.internal.model.StateTransitionController.inState(StateTransitionController.java:97)
            at org.gradle.initialization.VintageBuildModelController.scheduleRequestedTasks(VintageBuildModelController.java:81)
            at org.gradle.internal.build.DefaultBuildLifecycleController$DefaultWorkGraphBuilder.addRequestedTasks(DefaultBuildLifecycleController.java:244)
            at org.gradle.internal.build.DefaultBuildLifecycleController.lambda$populateWorkGraph$4(DefaultBuildLifecycleController.java:150)
            at org.gradle.internal.build.DefaultBuildWorkPreparer.populateWorkGraph(DefaultBuildWorkPreparer.java:41)
            at org.gradle.internal.build.BuildOperationFiringBuildWorkPreparer$PopulateWorkGraph.populateTaskGraph(BuildOperationFiringBuildWorkPreparer.java:132)
            at org.gradle.internal.build.BuildOperationFiringBuildWorkPreparer$PopulateWorkGraph.run(BuildOperationFiringBuildWorkPreparer.java:88)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
            at org.gradle.internal.build.BuildOperationFiringBuildWorkPreparer.populateWorkGraph(BuildOperationFiringBuildWorkPreparer.java:65)
            at org.gradle.internal.build.DefaultBuildLifecycleController.lambda$populateWorkGraph$5(DefaultBuildLifecycleController.java:150)
            at org.gradle.internal.model.StateTransitionController.lambda$inState$1(StateTransitionController.java:98)
            at org.gradle.internal.model.StateTransitionController.lambda$inState$2(StateTransitionController.java:113)
            at org.gradle.internal.work.DefaultSynchronizer.withLock(DefaultSynchronizer.java:44)
            at org.gradle.internal.model.StateTransitionController.inState(StateTransitionController.java:109)
            at org.gradle.internal.model.StateTransitionController.inState(StateTransitionController.java:97)
            at org.gradle.internal.build.DefaultBuildLifecycleController.populateWorkGraph(DefaultBuildLifecycleController.java:150)
            at org.gradle.internal.build.DefaultBuildWorkGraphController$DefaultBuildWorkGraph.populateWorkGraph(DefaultBuildWorkGraphController.java:120)
            at org.gradle.composite.internal.DefaultBuildController.populateWorkGraph(DefaultBuildController.java:82)
            at org.gradle.composite.internal.DefaultIncludedBuildTaskGraph$DefaultBuildTreeWorkGraphBuilder.withWorkGraph(DefaultIncludedBuildTaskGraph.java:116)
            at org.gradle.internal.buildtree.DefaultBuildTreeWorkPreparer.lambda$scheduleRequestedTasks$0(DefaultBuildTreeWorkPreparer.java:34)
            at org.gradle.composite.internal.DefaultIncludedBuildTaskGraph$DefaultBuildTreeWorkGraph$1.run(DefaultIncludedBuildTaskGraph.java:144)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
            at org.gradle.composite.internal.DefaultIncludedBuildTaskGraph$DefaultBuildTreeWorkGraph.scheduleWork(DefaultIncludedBuildTaskGraph.java:141)
            at org.gradle.internal.buildtree.DefaultBuildTreeWorkPreparer.scheduleRequestedTasks(DefaultBuildTreeWorkPreparer.java:34)
            at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.lambda$doScheduleAndRunTasks$2(DefaultBuildTreeLifecycleController.java:89)
            at org.gradle.composite.internal.DefaultIncludedBuildTaskGraph.withNewWorkGraph(DefaultIncludedBuildTaskGraph.java:75)
            at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.doScheduleAndRunTasks(DefaultBuildTreeLifecycleController.java:88)
            at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.lambda$runBuild$4(DefaultBuildTreeLifecycleController.java:106)
            at org.gradle.internal.model.StateTransitionController.lambda$transition$6(StateTransitionController.java:166)
            at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:238)
            at org.gradle.internal.model.StateTransitionController.lambda$transition$7(StateTransitionController.java:166)
            at org.gradle.internal.work.DefaultSynchronizer.withLock(DefaultSynchronizer.java:44)
            at org.gradle.internal.model.StateTransitionController.transition(StateTransitionController.java:166)
            at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.runBuild(DefaultBuildTreeLifecycleController.java:103)
            at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.scheduleAndRunTasks(DefaultBuildTreeLifecycleController.java:69)
            at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:31)
            at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
            at org.gradle.internal.buildtree.ProblemReportingBuildActionRunner.run(ProblemReportingBuildActionRunner.java:49)
            at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:69)
            at org.gradle.tooling.internal.provider.FileSystemWatchingBuildActionRunner.run(FileSystemWatchingBuildActionRunner.java:119)
            at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:41)
            at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.lambda$execute$0(RootBuildLifecycleBuildActionExecutor.java:40)
            at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:128)
            at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.execute(RootBuildLifecycleBuildActionExecutor.java:40)
            at org.gradle.internal.buildtree.DefaultBuildTreeContext.execute(DefaultBuildTreeContext.java:40)
            at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.lambda$execute$0(BuildTreeLifecycleBuildActionExecutor.java:65)
            at org.gradle.internal.buildtree.BuildTreeState.run(BuildTreeState.java:53)
            at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.execute(BuildTreeLifecycleBuildActionExecutor.java:65)
            at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$3.call(RunAsBuildOperationBuildActionExecutor.java:61)
            at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$3.call(RunAsBuildOperationBuildActionExecutor.java:57)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
            at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor.execute(RunAsBuildOperationBuildActionExecutor.java:57)
            at org.gradle.launcher.exec.RunAsWorkerThreadBuildActionExecutor.lambda$execute$0(RunAsWorkerThreadBuildActionExecutor.java:36)
            at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:270)
            at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:119)
            at org.gradle.launcher.exec.RunAsWorkerThreadBuildActionExecutor.execute(RunAsWorkerThreadBuildActionExecutor.java:36)
            at org.gradle.tooling.internal.provider.ContinuousBuildActionExecutor.execute(ContinuousBuildActionExecutor.java:103)
            at org.gradle.tooling.internal.provider.SubscribableBuildActionExecutor.execute(SubscribableBuildActionExecutor.java:64)
            at org.gradle.internal.session.DefaultBuildSessionContext.execute(DefaultBuildSessionContext.java:46)
            at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter$ActionImpl.apply(BuildSessionLifecycleBuildActionExecuter.java:100)
            at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter$ActionImpl.apply(BuildSessionLifecycleBuildActionExecuter.java:88)
            at org.gradle.internal.session.BuildSessionState.run(BuildSessionState.java:69)
            at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter.execute(BuildSessionLifecycleBuildActionExecuter.java:62)
            at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter.execute(BuildSessionLifecycleBuildActionExecuter.java:41)
            at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:63)
            at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:31)
            at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:58)
            at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:42)
            at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:47)
            at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:31)
            at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:65)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
            at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:39)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
            at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:29)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
            at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:35)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
            at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:78)
            at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:75)
            at org.gradle.util.internal.Swapper.swap(Swapper.java:38)
            at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:75)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
            at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
            at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
            at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:84)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
            at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52)
            at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
            at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
            at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
            at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
            at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
            at java.base/java.lang.Thread.run(Thread.java:829)
    
    FAILURE: Build failed with an exception.
    
    * What went wrong:
    Could not determine the dependencies of task ':mobile_scanner:compileReleaseJavaWithJavac'.
    > javax.xml.bind.UnmarshalException
       - with linked exception:
      [org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Premature end of file.]
    
    * Try:
    > Run with --stacktrace option to get the stack trace.
    > Run with --info or --debug option to get more log output.
    > Run with --scan to get full insights.
    
    * Get more help at https://help.gradle.org
    
    BUILD FAILED in 5s
    
    
    opened by yossefEl 1
Releases(v3.0.0-beta.4)
  • v3.0.0-beta.4(Dec 13, 2022)

    Fixes:

    • Fixes a permission bug on Android where denying the permission would cause an infinite loop of permission requests.
    • Updates the example app to handle permission errors with the new builder parameter. Now it no longer throws uncaught exceptions when the permission is denied.
    • Updated several dependencies

    Features:

    • Added a new errorBuilder to the MobileScanner widget that can be used to customize the error state of the preview. (Thanks @navaronbracke !)
    Source code(tar.gz)
    Source code(zip)
  • v3.0.0-beta.3(Dec 12, 2022)

    Special thanks to p-mazhnik, navaronbracke and WenheLI for the code improvements and new features!

    Deprecated:

    • The onStart method has been renamed to onScannerStarted.
    • The onPermissionSet argument of the MobileScannerController is now deprecated.

    Breaking changes:

    • MobileScannerException now uses an errorCode instead of a message.
    • MobileScannerException now contains additional details from the original error.
    • Refactored MobileScannerController.start() to throw MobileScannerExceptions with consistent error codes, rather than string messages. To handle permission errors, consider catching the result of MobileScannerController.start().
    • The autoResume attribute has been removed from the MobileScanner widget. The controller already automatically resumes, so it had no effect.
    • Removed MobileScannerCallback and MobileScannerArgumentsCallback typedef.
    • [Web] Replaced jsqr library with zxing-js for full barcode support.

    Improvements:

    • Toggling the device torch now does nothing if the device has no torch, rather than throwing an error.
    • Removed called stop while already stopped messages.

    Features:

    • You can now provide a scanWindow to the MobileScanner() widget.
    • You can now draw an overlay over the scanned barcode. See the barcode scanner window in the example app for more information.
    • Added a new placeholderBuilder function to the MobileScanner widget to customize the preview placeholder.
    • Added autoStart parameter to MobileScannerController(). If set to false, controller won't start automatically.
    • Added hasTorch function on MobileScannerController(). After starting the controller, you can check if the device has a torch.
    • [iOS] Support torchEnabled parameter from MobileScannerController() on iOS
    • [Web] Added ability to use custom barcode scanning js libraries by extending WebBarcodeReaderBase class and changing barCodeReader property in MobileScannerWebPlugin

    Fixes:

    • Fixes the missing gradle setup for the Android project, which prevented gradle sync from working.
    • Fixes MobileScannerController.stop() throwing when already stopped.
    • Fixes MobileScannerController.toggleTorch() throwing if the device has no torch. Now it does nothing if the torch is not available.
    • Fixes a memory leak where the MobileScanner would keep listening to the barcode events.
    • Fixes the MobileScanner preview depending on all attributes of MediaQueryData. Now it only depends on its layout constraints.
    • Fixed a potential crash when the scanner is restarted due to the app being resumed.
    • [iOS] Fix crash when changing torch state
    Source code(tar.gz)
    Source code(zip)
  • v3.0.0-beta.2(Nov 18, 2022)

    Breaking changes:

    • The arguments parameter of onDetect is removed. The data is now returned by the onStart callback in the MobileScanner widget.
    • onDetect now returns the object BarcodeCapture, which contains a List of barcodes and, if enabled, an image.
    • allowDuplicates is removed and replaced by MobileScannerSpeed enum.
    • onPermissionSet in MobileScanner widget is deprecated and will be removed. Use the onPermissionSet onPermissionSet callback in MobileScannerController instead.
    • [iOS] The minimum deployment target is now 11.0 or higher.

    Features:

    • The returnImage is working for both iOS and Android. You can enable it in the MobileScannerController. The image will be returned in the BarcodeCapture object provided by onDetect.
    • You can now control the DetectionSpeed, as well as the timeout of the DetectionSpeed. For more info see the DetectionSpeed documentation. This replaces the allowDuplicates function.

    Other improvements:

    • Both the [iOS] and [Android] codebases have been refactored completely.
    • [iOS] Updated POD dependencies
    Source code(tar.gz)
    Source code(zip)
  • v3.0.0-beta.1(Sep 28, 2022)

    Breaking changes:

    • [Android] SDK updated to SDK 33.

    Features:

    • [Web] Add binaryData for raw value.
    • [iOS] Captures the last scanned barcode with Barcode.image.
    • [iOS] Add support for multiple formats on iOS with BarcodeScannerOptions.
    • Add displayValue which returns barcode value in a user-friendly format.
    • Add autoResume option to MobileScannerController which automatically resumes the camera when the application is resumed

    Other changes:

    • [Android] Revert camera2 dependency to stable release
    • [iOS] Update barcode scanning library to latest version
    • Several minor code improvements
    Source code(tar.gz)
    Source code(zip)
  • v2.1.0(Nov 18, 2022)

    Upgraded GoogleMLKit/BarcodeScanning pod on iOS from 2.6.0 to 3.2.0. Migrated to stable version of androidx.camera for Android.

    Please checkout version 3.0.0-beta.2 for the latest features.

    Source code(tar.gz)
    Source code(zip)
  • v2.0.0-play-services(May 31, 2022)

    This version uses the MLKit play-services model on Android in order to save space. With the example app, this version reduces the release version from 14.9MB to 7MB. More information: https://developers.google.com/ml-kit/vision/barcode-scanning/android

    Source code(tar.gz)
    Source code(zip)
  • v2.0.0(May 31, 2022)

  • v1.1.1-play-services(May 23, 2022)

    This version uses the MLKit play-services model on Android in order to save space. With the example app, this version reduces the release version from 14.9MB to 7MB. More information: https://developers.google.com/ml-kit/vision/barcode-scanning/android

    Source code(tar.gz)
    Source code(zip)
  • v1.1.1(May 23, 2022)

  • v1.1.0(May 13, 2022)

    Bugfixes:

    • Fix for 'stream already listened to' exception.
    • Fix building on Android with latest Flutter version.
    • Add several WEB improvements.
    • Upgraded several dependencies.
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0(Mar 11, 2022)

    BREAKING CHANGES: This version adds a new allowDuplicates option which now defaults to FALSE. this means that it will only call onDetect once after a scan. If you still want duplicates, you can set allowDuplicates to true. This also means that you don't have to check for duplicates yourself anymore.

    New features:

    • We now have web support! Keep in mind that only QR codes are supported right now.

    Bugfixes:

    • Fixed hot reload not working.
    • Fixed Navigator.of(context).pop() not working in the example app due to duplicate MaterialApp declaration.
    • Fixed iOS MLKit version not resolving the latest version.
    • Updated all dependencies
    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Mar 4, 2022)

    You can provide a path to controller.analyzeImage(path) in order to scan a local photo from the gallery! Check out the example app to see how you can use the image_picker plugin to retrieve a photo from the gallery. Please keep in mind that this feature is only supported on Android and iOS.

    Another feature that has been added is a format selector! Just keep in mind that iOS for now only supports 1 selected barcode.

    Source code(tar.gz)
    Source code(zip)
  • v0.1.3(Mar 2, 2022)

  • v0.1.2(Feb 23, 2022)

    • MobileScannerArguments is now exported. #7

    Bugfixes:

    • Fixed application crashing when stop() or start() is called multiple times. #5
    • Fixes controller not being disposed correctly. #23
    • Catch error when no camera is found. #19
    Source code(tar.gz)
    Source code(zip)
  • v0.1.1(Feb 21, 2022)

  • v0.1.0(Feb 21, 2022)

    We now have MacOS support using Apple's Vision framework! Keep in mind that for now, only the raw value of the barcode object is supported.

    Bugfixes:

    • Fixed a crash when dispose is called in a overridden method. #5
    Source code(tar.gz)
    Source code(zip)
  • v0.0.3(Feb 17, 2022)

  • v0.0.2(Feb 16, 2022)

  • v0.0.1(Feb 16, 2022)

    Initial release! Things working on Android:

    • Scanning barcodes using the latest version of MLKit and CameraX!
    • Switching camera's
    • Toggling of the torch (flash)

    Things working on iOS:

    • Scanning barcodes using the latest version of MLKit and AVFoundation!
    Source code(tar.gz)
    Source code(zip)
Owner
Julian Steenbakker
Fulltime Flutter, Android, iOS, macOS and web developer.
Julian Steenbakker
A flutter carousel widget, support infinite scroll, and custom child widget.

carousel_slider A carousel slider widget. Features Infinite scroll Custom child widgets Auto play Supported platforms Flutter Android Flutter iOS Flut

serenader 1.4k Dec 30, 2022
A Flutter widget that paints an image and moves it at a slower speed than the main scrolling content.

A Flutter widget that paints an image and moves it at a slower speed than the main scrolling content. Installation Add dependency to your pubspec.yaml

Anatoly Pulyaevskiy 272 Dec 23, 2022
📸 Easy to use yet very customizable zoomable image widget for Flutter, Photo View provides a gesture sensitive zoomable widget. Photo View is largely used to show interacive images and other stuff such as SVG.

Flutter Photo View A simple zoomable image/content widget for Flutter. PhotoView enables images to become able to zoom and pan with user gestures such

Fire Slime Games 1.7k Jan 3, 2023
SVG parsing, rendering, and widget library for Flutter

flutter_svg Draw SVG (and some Android VectorDrawable (XML)) files on a Flutter Widget. Getting Started This is a Dart-native rendering library. Issue

Dan Field 1.5k Jan 6, 2023
A Flutter plugin for Android and iOS supports cropping images

Image Cropper A Flutter plugin for Android and iOS supports cropping images. This plugin is based on two different native libraries so it comes with d

HungHD 891 Dec 28, 2022
Download, cache and show images in a flutter app

Cached network image A flutter library to show images from the internet and keep them in the cache directory. How to use The CachedNetworkImage can be

Baseflow 2.1k Jan 3, 2023
Flutter plugin that allows you to display multi image picker on iOS and Android. 👌🔝🎉

IMPORTANT: This repository has been archived and no longer mantained. As I don't have time anymore to work on the package it became very outdated. For

Radoslav Vitanov 898 Apr 29, 2021
Use lottie in flutter for both iOS and Android

flutter_lottie Use Lottie in Flutter. Supports both iOS and Android using lottie-ios and lottie-android Current Status Supports most features that bot

Cameron Smith 160 Nov 25, 2022
A Flutter package for manipulating bitmaps

Flutter Bitmap A minimalist Flutter package to perform fast bitmaps operations. The focus here is to provide a cool bitmap manipulation interface. The

Renan 152 Dec 23, 2022
A flutter plugin which provides Crop Widget for cropping images.

A flutter plugin which provides Crop Widget for cropping images. crop_your_image provides only minimum UI for deciding cropping area inside images. Other UI parts, such as "Crop" button or "Change Aspect Ratio" button, need to be prepared by each app developers.

Chooyan 96 Dec 31, 2022
Image caching system for flutter

image_cacheing image_cacheing is an image caching package. It is currently tested for Android applications. ImageCacheing widget takes url as a param.

evolving_kid 3 May 31, 2021
A simple and easy flutter demo to crop image

flutter_image_crop A simple demo to crop image on flutter easily. A Chinese version of this document can be found here Flutter_image_crop Plugin will

路小飞 3 Jul 8, 2021
A flutter package which makes it easy to track a series of images.

A flutter package which makes it easy to track a series of images.

Jaehee Kim 2 Oct 7, 2022
A flutter tool to generate beautiful code snippets in the form of an image.

A flutter tool to generate beautiful code snippets in the form of an image.

Mahesh Jamdade 4 Jan 18, 2022
A OpenGLES context canvas in flutter.

gl_canvas A OpenGLES context canvas in flutter. Usage // New a GLCanvas require a builder GLCanvas( builder: _builder, ) The builder should return

null 8 Oct 17, 2022
Simple and effective cross platform image saver for flutter, supported web and desktop

Simple and effective cross platform image saver for flutter, supported web and desktop

7c00 3 Oct 5, 2022
The iMateral Pro Icon pack available as Flutter Icons

imaterial_pro_flutter This flutter package allows you to use the IMaterial Pro Icons. ?? Installation In the dependencies: section of your pubspec.yam

Abada Samuel Oghenero. 4 Oct 5, 2022
a package for flutter canvas paint dash line path easily.

dash_painter a package for flutter canvas paint dash line path easily. 1. DashPainter 如何使用 DashPainter 只负责对 路径 Path 的虚线化绘制,不承担组件职能。 一般用在拥有 Canvas 对象的回

FlutterCandies 22 Oct 9, 2022
Flutter package for Image Carousel It is an image carousel widget.

Snapshot Carousel Flutter package for Image Carousel It is an image carousel widget. Supported platforms Flutter Android Flutter iOS Flutter web Flutt

Mrigank Anand 12 Jun 3, 2021