camera_camera icon indicating copy to clipboard operation
camera_camera copied to clipboard

Crashes if page rebuilds

Open billysmt opened this issue 4 years ago • 7 comments

Using this as an embedded widget in a screen where user points around takes a picture and at the bottom is a submit button.

If anything causes the widget to get rebuilt the following error gets spit out and the app crashes.

E/com.app(28274): [SurfaceTexture-0-28274-3] setDefaultBufferSize: SurfaceTexture is abandoned! E/BufferQueueProducer(28274): query: BufferQueue has been abandoned E/Legacy-CameraDevice-JNI(28274): LegacyCameraDevice_nativeDetectSurfaceDimens: Error while querying surface width No such device (-19). D/AndroidRuntime(28274): Shutting down VM E/AndroidRuntime(28274): FATAL EXCEPTION: main E/AndroidRuntime(28274): Process: com.engage, PID: 28274 E/AndroidRuntime(28274): java.lang.IllegalArgumentException: Surface was abandoned E/AndroidRuntime(28274): at android.hardware.camera2.utils.SurfaceUtils.getSurfaceSize(SurfaceUtils.java:86) E/AndroidRuntime(28274): at android.hardware.camera2.params.OutputConfiguration.(OutputConfiguration.java:261) E/AndroidRuntime(28274): at android.hardware.camera2.params.OutputConfiguration.(OutputConfiguration.java:146) E/AndroidRuntime(28274): at io.flutter.plugins.camera.Camera.createCaptureSession(Camera.java:339) E/AndroidRuntime(28274): at io.flutter.plugins.camera.Camera.createCaptureSession(Camera.java:281) E/AndroidRuntime(28274): at io.flutter.plugins.camera.Camera.startPreview(Camera.java:1094) E/AndroidRuntime(28274): at io.flutter.plugins.camera.Camera$1.onOpened(Camera.java:224) E/AndroidRuntime(28274): at android.hardware.camera2.impl.CameraDeviceImpl$1.run(CameraDeviceImpl.java:151) E/AndroidRuntime(28274): at android.os.Handler.handleCallback(Handler.java:938) E/AndroidRuntime(28274): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime(28274): at android.os.Looper.loop(Looper.java:223) E/AndroidRuntime(28274): at android.app.ActivityThread.main(ActivityThread.java:7660) E/AndroidRuntime(28274): at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime(28274): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) E/AndroidRuntime(28274): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) E/AndroidRuntime(28274): Caused by: android.hardware.camera2.legacy.LegacyExceptionUtils$BufferQueueAbandonedException E/AndroidRuntime(28274): at android.hardware.camera2.legacy.LegacyExceptionUtils.throwOnError(LegacyExceptionUtils.java:73) E/AndroidRuntime(28274): at android.hardware.camera2.legacy.LegacyCameraDevice.getSurfaceSize(LegacyCameraDevice.java:640) E/AndroidRuntime(28274): at android.hardware.camera2.utils.SurfaceUtils.getSurfaceSize(SurfaceUtils.java:84) E/AndroidRuntime(28274): ... 14 more

billysmt avatar May 06 '21 01:05 billysmt

Additional error thrown when attempting to perform some async processing while Widget is on screen

E/flutter ( 3166): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: A CameraController was used after being disposed. E/flutter ( 3166): Once you have called dispose() on a CameraController, it can no longer be used. E/flutter ( 3166): #0 ChangeNotifier._debugAssertNotDisposed. (package:flutter/src/foundation/change_notifier.dart:117:9) E/flutter ( 3166): #1 ChangeNotifier._debugAssertNotDisposed (package:flutter/src/foundation/change_notifier.dart:123:6) E/flutter ( 3166): #2 ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart:234:12) E/flutter ( 3166): #3 ValueNotifier.value= (package:flutter/src/foundation/change_notifier.dart:309:5) E/flutter ( 3166): #4 CameraController.initialize. (package:camera/src/camera_controller.dart:267:9) E/flutter ( 3166): #5 _rootRunUnary (dart:async/zone.dart:1362:47) E/flutter ( 3166): #6 _CustomZone.runUnary (dart:async/zone.dart:1265:19) E/flutter ( 3166): #7 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1170:7) E/flutter ( 3166): #8 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:341:11) E/flutter ( 3166): #9 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7) E/flutter ( 3166): #10 _SyncBroadcastStreamController._sendData (dart:async/broadcast_stream_controller.dart:378:25) E/flutter ( 3166): #11 _BroadcastStreamController.add (dart:async/broadcast_stream_controller.dart:244:5) E/flutter ( 3166): #12 Where.whereType. (package:stream_transform/src/where.dart:21:30) E/flutter ( 3166): #13 TransformByHandlers.transformByHandlers.. (package:stream_transform/src/from_handlers.dart:29:50) E/flutter ( 3166): #14 _rootRunUnary (dart:async/zone.dart:1362:47) E/flutter ( 3166): #15 _CustomZone.runUnary (dart:async/zone.dart:1265:19) E/flutter ( 3166): #16 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1170:7) E/flutter ( 3166): #17 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:341:11) E/flutter ( 3166): #18 _DelayedData.perform (dart:async/stream_impl.dart:591:14) E/flutter ( 3166): #19 _StreamImplEvents.handleNext (dart:async/stream_impl.dart:706:11) E/flutter ( 3166): #20 _PendingEvents.schedule. (dart:async/stream_impl.dart:663:7) E/flutter ( 3166): #21 _rootRun (dart:async/zone.dart:1346:47) E/flutter ( 3166): #22 _CustomZone.run (dart:async/zone.dart:1258:19) E/flutter ( 3166): #23 _CustomZone.runGuarded (dart:async/zone.dart:1162:7) E/flutter ( 3166): #24 _CustomZone.bindCallbackGuarded. (dart:async/zone.dart:1202:23) E/flutter ( 3166): #25 _rootRun (dart:async/zone.dart:1354:13) E/flutter ( 3166): #26 _CustomZone.run (dart:async/zone.dart:1258:19) E/flutter ( 3166): #27 _CustomZone.runGuarded (dart:async/zone.dart:1162:7) E/flutter ( 3166): #28 _CustomZone.bindCallbackGuarded. (dart:async/zone.dart:1202:23) E/flutter ( 3166): #29 _microtaskLoop (dart:async/schedule_microtask.dart:40:21) E/flutter ( 3166): #30 _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)

billysmt avatar May 06 '21 02:05 billysmt

You can send me example this code?

gabuldev avatar May 19 '21 17:05 gabuldev

You can send me example this code?

I got this problem too.

class CameraInputPage extends StatelessWidget {
  final CameraInputLogic logic = Get.put(CameraInputLogic());

  @override
  Widget build(BuildContext context) {
    SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
        statusBarColor: whiteColor, statusBarIconBrightness: Brightness.dark));
    return Scaffold(
      backgroundColor: backgroundColor,
      appBar: AppBar(
        leading: BackButton(
          color: primaryColor,
        ),
        title: Text(
          camera.tr + " " + input.tr + " " + saleAgentId.tr,
          style: normalTextStyle(textColor: primaryColor),
        ),
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.vertical(
            bottom: Radius.circular(Get.pixelRatio * 7.5),
          ),
        ),
        backgroundColor: whiteColor,
      ),
      body: CameraCamera(
        onFile: (file) {
          logic.gotPhotos(file);
        },
      ),
    );
  }
}

virakyuthpk avatar Jun 17 '21 09:06 virakyuthpk

Is it fixed ?

Tanelo avatar Jul 20 '21 21:07 Tanelo

I've also got this problem. @tanelo There is not yet a solution available, I guess.

kinafu avatar Jul 23 '21 13:07 kinafu

I think that its a problem with the "dispose". Maybe disposing a already disposed object.

GustavoFigueira avatar Nov 16 '22 12:11 GustavoFigueira

I got some problem too. I'm suspect the problem have relation with named routing, because when I test with example of code from Pubdev, works without errors.

munhozfontana avatar Apr 24 '23 12:04 munhozfontana