Git Product home page Git Product logo

apparence-io / camerawesome Goto Github PK

View Code? Open in Web Editor NEW
874.0 21.0 187.0 124.16 MB

๐Ÿ“ธ Embedding a camera experience within your own app shouldn't be that hard. A flutter plugin to integrate awesome Android / iOS camera experience.

Home Page: https://ApparenceKit.dev

License: MIT License

Java 1.54% Ruby 0.48% Swift 0.05% Objective-C 25.58% Dart 53.57% C 0.30% Kotlin 18.15% Shell 0.34% MATLAB 0.01%
camera flutter-plugin flutter cross-platform mobile-development

camerawesome's Introduction

ApparenceKit Flutter template to bootstrap your next app

This plugin is also available as a template in ApparenceKit.


CamerAwesome

en zh

๐Ÿ“ธ Embedding a camera experience within your own app shouldn't be that hard.
A flutter plugin to integrate awesome Android / iOS camera experience.


This package provides you with a fully customizable camera experience that you can use within your app.
Use our awesome built-in interface or customize it as you want.

Migration guide

If you are migrating from version 1.x.x to 2.x.x, please read the migration guide.

Native features

Here's all native features that cameraAwesome provides to the flutter side.

Features Android iOS
๐Ÿ”– Ask permissions โœ… โœ…
๐ŸŽฅ Record video โœ… โœ…
๐Ÿ“น Multi camera (๐Ÿšง BETA) โœ… โœ…
๐Ÿ”ˆ Enable/disable audio โœ… โœ…
๐ŸŽž Take photos โœ… โœ…
๐ŸŒ† Photo live filters โœ… โœ…
๐ŸŒค Exposure level โœ… โœ…
๐Ÿ“ก Broadcast live image stream โœ… โœ…
๐Ÿงช Image analysis (barcode scan & more.) โœ… โœ…
๐Ÿ‘ Zoom โœ… โœ…
๐Ÿ“ธ Device flash support โœ… โœ…
โŒ›๏ธ Auto focus โœ… โœ…
๐Ÿ“ฒ Live switching camera โœ… โœ…
๐Ÿ˜ตโ€๐Ÿ’ซ Camera rotation stream โœ… โœ…
๐Ÿค Background auto stop โœ… โœ…
๐Ÿ”€ Sensor type switching โ›”๏ธ โœ…
๐Ÿชž Enable/disable front camera mirroring โœ… โœ…

๐Ÿ“–ย  Installation and usage

Add the package in your pubspec.yaml

dependencies:
  camerawesome: ^2.0.0-dev.1
  ...

Platform specific setup

  • iOS

Add these on ios/Runner/Info.plist:

<key>NSCameraUsageDescription</key>
<string>Your own description</string>

<key>NSMicrophoneUsageDescription</key>
<string>To enable microphone access when recording video</string>

<key>NSLocationWhenInUseUsageDescription</key>
<string>To enable GPS location access for Exif data</string>
  • Android

Change the minimum SDK version to 21 (or higher) in android/app/build.gradle:

minSdkVersion 21

In order to be able to take pictures or record videos, you may need additional permissions depending on the Android version and where you want to save them. Read more about it in the official documentation.

WRITE_EXTERNAL_STORAGE is not included in the plugin starting with version 1.4.0.

If you want to record videos with audio, add this permission to your AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.yourpackage">
  <uses-permission android:name="android.permission.RECORD_AUDIO" />

  <!-- Other declarations -->
</manifest>

You may also want to save location of your pictures in exif metadata. In this case, add below permissions:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.example.yourpackage">
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

  <!-- Other declarations -->
</manifest>
โš ๏ธ Overriding Android dependencies

Some of the dependencies used by CamerAwesome can be overriden if you have a conflict. Change these variables to define which version you want to use:

buildscript {
  ext.kotlin_version = '1.7.10'
  ext {
    // You can override these variables
    compileSdkVersion = 33
    minSdkVersion = 24 // 21 minimum
    playServicesLocationVersion = "20.0.0"
    exifInterfaceVersion = "1.3.4"
  }
  // ...
}

Only change these variables if you are sure of what you are doing.

For example, setting the Play Services Location version might help you when you have conflicts with other plugins. The below line shows an example of these conflicts:

java.lang.IncompatibleClassChangeError: Found interface com.google.android.gms.location.ActivityRecognitionClient, but class was expected

Import the package in your Flutter app

import 'package:camerawesome/camerawesome_plugin.dart';

๐Ÿ‘Œ Awesome built-in interface

Just use our builder.
That's all you need to create a complete camera experience within your app.

CameraAwesomeBuilder.awesome(
  saveConfig: SaveConfig.photoAndVideo(),
  onMediaTap: (mediaCapture) {
    OpenFile.open(mediaCapture.filePath);
  },
),

CamerAwesome default UI

This builder can be customized with various settings:

  • A theme.
  • Builders for each part of the screen.
  • Initial camera setup.
  • Preview positioning.
  • Additional preview decoration.
  • And much more!

Here is an example:

Customized UI

Check the full documentation to learn more.


๐ŸŽจ Creating a custom interface

If the awesome() factory is not enough, you can use custom() instead.

It provides a builder property that lets you create your own camera experience.

The camera preview will be visible behind what you will provide to the builder.

CameraAwesomeBuilder.custom(
  saveConfig: SaveConfig.photo(),
  builder: (state, previewSize, previewRect) {
    // create your interface here
  },
)

See more in documentation

Working with the custom builder

Here is the definition of our builder method.

typedef CameraLayoutBuilder = Widget Function(CameraState cameraState, PreviewSize previewSize, Rect previewRect);

The only thing you have access to manage the camera is the cameraState.
Depending on which state is our camera experience you will have access to some different method.
`previewSize` and `previewRect` might be used to position your UI around or on top of the camera preview.

How do CamerAwesome states work ?

Using the state you can do anything you need without having to think about the camera flow

  • On app start we are in PreparingCameraState
  • Then depending on the initialCaptureMode you set you will be PhotoCameraState or VideoCameraState
  • Starting a video will push a VideoRecordingCameraState
  • Stopping the video will push back the VideoCameraState

    Also if you want to use some specific function you can use the when method so you can write like this.
state.when(
  onPhotoMode: (photoState) => photoState.start(),
  onVideoMode: (videoState) => videoState.start(),
  onVideoRecordingMode: (videoState) => videoState.pause(),
);

See more in documentation



๐Ÿ Listen to picture or video event

Using the onMediaCaptureEvent you can listen to any media capture event and do whatever you want with it.

onMediaCaptureEvent: (event) {
    switch ((event.status, event.isPicture, event.isVideo)) {
        case (MediaCaptureStatus.capturing, true, false):
            debugPrint('Capturing picture...');
        case (MediaCaptureStatus.success, true, false):
            event.captureRequest.when(
                single: (single) {
                debugPrint('Picture saved: ${single.file?.path}');
                },
                multiple: (multiple) {
                multiple.fileBySensor.forEach((key, value) {
                    debugPrint('multiple image taken: $key ${value?.path}');
                });
                },
            );
        case (MediaCaptureStatus.failure, true, false):
            debugPrint('Failed to capture picture: ${event.exception}');
        case (MediaCaptureStatus.capturing, false, true):
            debugPrint('Capturing video...');
        case (MediaCaptureStatus.success, false, true):
            event.captureRequest.when(
                single: (single) {
                    debugPrint('Video saved: ${single.file?.path}');
                },
                multiple: (multiple) {
                    multiple.fileBySensor.forEach((key, value) {
                        debugPrint('multiple video taken: $key ${value?.path}');
                    });
                },
            );
        case (MediaCaptureStatus.failure, false, true):
            debugPrint('Failed to capture video: ${event.exception}');
        default:
            debugPrint('Unknown event: $event');
    }
},

๐Ÿ”ฌ Analysis mode

Use this to achieve:

  • QR-Code scanning.
  • Facial recognition.
  • AI object detection.
  • Realtime video chats.
  • And much more ๐Ÿคฉ

Face AI

You can check examples using MLKit inside the example directory. The above example is from ai_analysis_faces.dart. It detects faces and draw their contours.

It's also possible to use MLKit to read barcodes:

Barcode scanning

Check ai_analysis_barcode.dart and preview_overlay_example.dart for examples or the documentation.

How to use it

CameraAwesomeBuilder.awesome(
  saveConfig: SaveConfig.photo(),
  onImageForAnalysis: analyzeImage,
  imageAnalysisConfig: AnalysisConfig(
        // Android specific options
        androidOptions: const AndroidAnalysisOptions.nv21(
            // Target width (CameraX will chose the closest resolution to this width)
            width: 250,
        ),
        // Wether to start automatically the analysis (true by default)
        autoStart: true,
        // Max frames per second, null for no limit (default)
        maxFramesPerSecond: 20,
    ),
)

MLkit recommends using nv21 format for Android.
bgra8888 is the iOS format For machine learning you don't need full-resolution images (720 or lower should be enough and makes computation easier)

Learn more about the image analysis configuration in the documentation .

Check also detailed explanations on how to use MLKit to read barcodes and detect faces.

โš ๏ธ On Android, some devices don't support video recording and image analysis at the same time.

  • If they don't, image analysis will be ignored.
  • You can check if a device has this capability by using CameraCharacteristics .isVideoRecordingAndImageAnalysisSupported(Sensors.back).

๐Ÿฝ Updating Sensor configuration

Through state you can access to a SensorConfig class.


Function Comment
setZoom change zoom
setFlashMode change flash between NONE,ON,AUTO,ALWAYS
setBrightness change brightness level manually (better to let this auto)
setMirrorFrontCamera set mirroring for front camera

All of these configurations are listenable through a stream so your UI can automatically get updated according to the actual configuration.


๐ŸŒ† Photo live filters

Apply live filters to your pictures using the built-in interface:

Built-in live filters

You can also choose to use a specific filter from the start:

CameraAwesomeBuilder.awesome(
  // other params
  filter: AwesomeFilter.AddictiveRed,
  availableFilters: ...
)

Or set the filter programmatically:

CameraAwesomeBuilder.custom(
  builder: (cameraState, previewSize, previewRect) {
    return cameraState.when(
      onPreparingCamera: (state) =>
      const Center(child: CircularProgressIndicator()),
      onPhotoMode: (state) =>
          TakePhotoUI(state, onFilterTap: () {
            state.setFilter(AwesomeFilter.Sierra);
          }),
      onVideoMode: (state) => RecordVideoUI(state, recording: false),
      onVideoRecordingMode: (state) =>
          RecordVideoUI(state, recording: true),
    );
  },
)

See all available filters in the documentation.

[!TIP] By default the awesome ui setup has a filter list but you can pass an empty list to remove it

๐Ÿ“ท ๐Ÿ“ท Concurrent cameras

Concurrent cameras

๐Ÿšง Feature in beta ๐Ÿšง Any feedback is welcome!

In order to start using CamerAwesome with multiple cameras simulatenously, you need to define a SensorConfig that uses several sensors. You can use the SensorConfig.multiple() constructor for this:

CameraAwesomeBuilder.awesome(
    sensorConfig: SensorConfig.multiple(
        sensors: [
            Sensor.position(SensorPosition.back),
            Sensor.position(SensorPosition.front),
        ],
        flashMode: FlashMode.auto,
        aspectRatio: CameraAspectRatios.ratio_16_9,
    ),
    // Other params
)

This feature is not supported by all devices and even when it is, there are limitations that you must be aware of.

Check the details in the dedicated documentation.


camerawesome's People

Contributors

acoutts avatar apalala-dev avatar bartekpacia avatar chyiiiiiiiiiiii avatar dimapparence avatar g-apparence avatar iadept avatar istornz avatar j-apparence avatar jo-apparence avatar juliuszmandrosz avatar knifelemon avatar liquidiert avatar mdpe-ir avatar mr- avatar ps9310 avatar romainfranceschini avatar snimm avatar v-apparence avatar vlazdra avatar ynnob avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

camerawesome's Issues

Android 9: Crash during switch photo to video mode: MissingPluginException(No implementation found for method setCaptureMode on channel camerawesome)

Steps to Reproduce

I am using the current official example. When switching photos to video recording or back, app throw error.

Expected results

Actual results

MissingPluginException(No implementation found for method setCaptureMode on channel camerawesome)

in camerapreview.dart (line: 332)

Exception:

E/flutter ( 5590): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: MissingPluginException(No implementation found for method setCaptureMode on channel camerawesome)
E/flutter ( 5590): #0 MethodChannel._invokeMethod
package:flutter/โ€ฆ/services/platform_channel.dart:157
E/flutter ( 5590):
E/flutter ( 5590): #1 MethodChannel.invokeMethod
package:flutter/โ€ฆ/services/platform_channel.dart:332
E/flutter ( 5590): #2 CamerawesomePlugin.setCaptureMode
package:camerawesome/camerawesome_plugin.dart:242
E/flutter ( 5590): #3 CameraAwesomeState._initCaptureMode.
package:camerawesome/camerapreview.dart:332
E/flutter ( 5590): #4 ChangeNotifier.notifyListeners
package:flutter/โ€ฆ/foundation/change_notifier.dart:226
E/flutter ( 5590): #5 ValueNotifier.value=
package:flutter/โ€ฆ/foundation/change_notifier.dart:292
E/flutter ( 5590): #6 _MyAppState._buildInterface.
package:camerawesome_example/main.dart:185
E/flutter ( 5590): #7 BottomBarWidget.build.
package:camerawesome_example/widgets/bottom_bar.dart:84
E/flutter ( 5590): #8 RenderToggleable._handleTap
package:flutter/โ€ฆ/material/toggleable.dart:416
E/flutter ( 5590): #9 GestureRecognizer.invokeCallback
package:flutter/โ€ฆ/gestures/recognizer.dart:183
E/flutter ( 5590): #10 TapGestureRecognizer.handleTapUp
package:flutter/โ€ฆ/gestures/tap.dart:598
E/flutter ( 5590): #11 BaseTapGestureRecognizer._checkUp
package:flutter/โ€ฆ/gestures/tap.dart:287
E/flutter ( 5590): #12 BaseTapGestureRecognizer.acceptGesture
package:flutter/โ€ฆ/gestures/tap.dart:259
E/flutter ( 5590): #13 GestureArenaManager.sweep
package:flutter/โ€ฆ/gestures/arena.dart:157
E/flutter ( 5590): #14 GestureBinding.handleEvent
package:flutter/โ€ฆ/gestures/binding.dart:362
E/flutter ( 5590): #15 GestureBinding.dispatchEvent
package:flutter/โ€ฆ/gestures/binding.dart:338
E/flutter ( 5590): #16 RendererBinding.dispatchEvent
package:flutter/โ€ฆ/rendering/binding.dart:267
E/flutter ( 5590): #17 GestureBinding._handlePointerEvent
package:flutter/โ€ฆ/gestures/binding.dart:295
E/flutter ( 5590): #18 GestureBinding._flushPointerEventQueue
package:flutter/โ€ฆ/gestures/binding.dart:240
E/flutter ( 5590): #19 GestureBinding._handlePointerDataPacket
package:flutter/โ€ฆ/gestures/binding.dart:213
E/flutter ( 5590): #20 _rootRunUnary (dart:async/zone.dart:1206:13)
E/flutter ( 5590): #21 _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter ( 5590): #22 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
E/flutter ( 5590): #23 _invoke1 (dart:ui/hooks.dart:265:10)
E/flutter ( 5590): #24 _dispatchPointerDataPacket (dart:ui/hooks.dart:174:5)

About your device

Brand Model OS
Redmi Note 5 Android 9 / API 28

Thank you for your time and help.
Zdenek.

Front camera crashes

Steps to Reproduce

Switching to front camera crashed the app

if (_sensor.value == Sensors.FRONT) { _sensor.value = Sensors.BACK; } else { _sensor.value = Sensors.FRONT; }

Actual results

uid: 10416
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x660
Cause: null pointer dereference
x0 0000000000000660 x1 0000007e7e053cc0 x2 0000000000000000 x3 0000007ee7be7dff
x4 0000007e7e053ca8 x5 000000000000004a x6 4055404906ff5140 x7 7f7f7f7f7f7f7f7f
x8 0000000000000001 x9 71e2bf4945037b8f x10 0000000000430000 x11 000000000000001e
x12 0000007ee7c63224 x13 0000007ee7c6326c x14 0000007ee7c632cc x15 0000000000000000
x16 0000007f6a7d9530 x17 0000007f6d41b760 x18 0000007e77570000 x19 0000000000000660
x20 0000000000000000 x21 0000007f6ca3b0a0 x22 0000007f6ca38028 x23 0000007ee6df629a
x24 0000000000000004 x25 0000007e7e057020 x26 0000007edbc62cb0 x27 0000000000000001
x28 0000000000000000 x29 0000007e7e053d60
sp 0000007e7e053d40 lr 0000007f6a50df84 pc 0000007f6d41b760
backtrace:
#00 pc 00000000000d7760 /apex/com.android.runtime/lib64/bionic/libc.so (pthread_mutex_lock) (BuildId: 084c8a81b8c78e19cd9a1ff6208e77cf)
#1 pc 000000000038cf80 /system/lib64/libhwui.so (android::SurfaceTexture::updateTexImage()+60) (BuildId: 0e7f75c3766e031530e154cd7d0a25e7)
#2 pc 0000000000172d90 /system/lib64/libandroid_runtime.so (android::SurfaceTexture_updateTexImage(_JNIEnv*, _jobject*)+84) (BuildId: e3e429bb025cd55af3bf8324d4a5a8c7)
#3 pc 0000000000aa2a9c /system/framework/arm64/boot-framework.oat (art_jni_trampoline+124) (BuildId: 1be0836f4fd69b30e55a3dd02927bd44ccc064b8)
#4 pc 0000000000137334 /apex/com.android.runtime/lib64/libart.so (art_quick_invoke_stub+548) (BuildId: b8abc9218340860606bcffe3818ec9c5)
#5 pc 0000000000145fec /apex/com.android.runtime/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+244) (BuildId: b8abc9218340860606bcffe3818ec9c5)
#6 pc 00000000002e37d0 /apex/com.android.runtime/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+384) (BuildId: b8abc9218340860606bcffe3818ec9c5)
#7 pc 00000000002dea30 /apex/com.android.runtime/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+892) (BuildId: b8abc9218340860606bcffe3818ec9c5)
#8 pc 00000000005a3294 /apex/com.android.runtime/lib64/libart.so (MterpInvokeDirect+424) (BuildId: b8abc9218340860606bcffe3818ec9c5)
#9 pc 0000000000131914 /apex/com.android.runtime/lib64/libart.so (mterp_op_invoke_direct+20) (BuildId: b8abc9218340860606bcffe3818ec9c5)
#10 pc 00000000003b3624 /system/framework/framework.jar (android.graphics.SurfaceTexture.updateTexImage)
#11 pc 00000000005a122c /apex/com.android.runtime/lib64/libart.so (MterpInvokeVirtual+1352) (BuildId: b8abc9218340860606bcffe3818ec9c5)
#12 pc 0000000000131814 /apex/com.android.runtime/lib64/libart.so (mterp_op_invoke_virtual+20) (BuildId: b8abc9218340860606bcffe3818ec9c5)
#13 pc 00000000003c984a [anon:dalvik-classes.dex extracted in memory from /data/app/com.camera.bluehour-RxBaXNy7y30bjN9ZQX_VqA==/base.apk] (io.flutter.embedding.engine.renderer.SurfaceTextureWrapper.updateTexImage+14)
#14 pc 00000000002b4ae4 /apex/com.android.runtime/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadERKNS_20CodeItemDataAccessorERNS_11ShadowFrameENS_6JValueEbb.llvm.17460956533834400288+240) (BuildId: b8abc9218340860606bcffe3818ec9c5)
#15 pc 00000000005924d4 /apex/com.android.runtime/lib64/libart.so (artQuickToInterpreterBridge+1032) (BuildId: b8abc9218340860606bcffe3818ec9c5)
#16 pc 0000000000140468 /apex/com.android.runtime/lib64/libart.so (art_quick_to_interpreter_bridge+88) (BuildId: b8abc9218340860606bcffe3818ec9c5)
#17 pc 0000000000137334 /apex/com.android.runtime/lib64/libart.so (art_quick_invoke_stub+548) (BuildId: b8abc9218340860606bcffe3818ec9c5)
#18 pc 0000000000145fec /apex/com.android.runtime/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+244) (BuildId: b8abc9218340860606bcffe3818ec9c5)
#19 pc 00000000004b0ed8 /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::InvokeWithArgArray(art::ScopedObjectAccessAlreadyRunnable const&, art::ArtMethod*, art::(anonymous namespace)::ArgArray*, art::JValue*, char const*)+104) (BuildId: b8abc9218340860606bcffe3818ec9c5)
#20 pc 00000000004b2324 /apex/com.android.runtime/lib64/libart.so (art::InvokeVirtualOrInterfaceWithVarArgs(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, std::__va_list)+424) (BuildId: b8abc9218340860606bcffe3818ec9c5)
#21 pc 00000000003981b8 /apex/com.android.runtime/lib64/libart.so (art::JNI::CallVoidMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list)+628) (BuildId: b8abc9218340860606bcffe3818ec9c5)
#22 pc 000000000036cc50 /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::CheckJNI::CallMethodV(char const*, _JNIEnv*, _jobject*, _jclass*, _jmethodID*, std::__va_list, art::Primitive::Type, art::InvokeType)+2368) (BuildId: b8abc9218340860606bcffe3818ec9c5)
#23 pc 000000000035af30 /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::CheckJNI::CallVoidMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list)+72) (BuildId: b8abc9218340860606bcffe3818ec9c5)

About your device

Brand Model OS
Redmi k20 Pro MIUI 12.0.4, Android 10

Disable shutter sound effect in iOS

Disable the shutter sound

As simple as it sounds, I would like to have the possibility to disable the shutter sound (I discovered this problem on iPad) as I'm taking many pictures at the time. I hope it's something feasible to work in on since I don't know if iOS API gives you this possibility.

Thank you in advance

nhandled Exception: MissingPluginException(No implementation found for method recordVideo on channel camerawesome

When I try to record video on Android system , This err message occurred

E/flutter ( 9545): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: MissingPluginException(No implementation found for method refresh on channel camerawesome)
E/flutter ( 9545): #0 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:157:7)
E/flutter ( 9545):
E/flutter ( 9545): #1 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:332:12)
E/flutter ( 9545): #2 CamerawesomePlugin.refresh (package:camerawesome/camerawesome_plugin.dart:180:21)
E/flutter ( 9545): #3 VideoController.recordVideo (package:camerawesome/video_controller.dart:7:24)
E/flutter ( 9545): #4 _MyAppState._recordVideo (package:camerawesome_example/main.dart:258:30)
E/flutter ( 9545):
E/flutter ( 9545): #5 BottomBarWidget.build. (package:camerawesome_example/widgets/bottom_bar.dart:59:50)
E/flutter ( 9545): #6 _CameraButtonState._onTapUp (package:camerawesome_example/widgets/take_photo_button.dart:81:24)
E/flutter ( 9545): #7 TapGestureRecognizer.handleTapUp. (package:flutter/src/gestures/tap.dart:596:57)
E/flutter ( 9545): #8 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:183:24)
E/flutter ( 9545): #9 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:596:11)
E/flutter ( 9545): #10 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:287:5)
E/flutter ( 9545): #11 BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:222:7)
E/flutter ( 9545): #12 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:476:9)
E/flutter ( 9545): #13 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:77:12)
E/flutter ( 9545): #14 PointerRouter._dispatchEventToRoutes. (package:flutter/src/gestures/pointer_router.dart:122:9)
E/flutter ( 9545): #15 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:377:8)
E/flutter ( 9545): #16 PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:120:18)
E/flutter ( 9545): #17 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:106:7)
E/flutter ( 9545): #18 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:358:19)
E/flutter ( 9545): #19 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:338:22)
E/flutter ( 9545): #20 RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:267:11)
E/flutter ( 9545): #21 GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:295:7)
E/flutter ( 9545): #22 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:240:7)
E/flutter ( 9545): #23 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:213:7)
E/flutter ( 9545): #24 _rootRunUnary (dart:async/zone.dart:1206:13)
E/flutter ( 9545): #25 _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter ( 9545): #26 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
E/flutter ( 9545): #27 _invoke1 (dart:ui/hooks.dart:265:10)
E/flutter ( 9545): #28 _dispatchPointerDataPacket (dart:ui/hooks.dart:174:5)

App crash if set flash java.lang.IllegalStateException: Reply already submitted

First

AWSOME PLUGIN, CONGRATULATION!!!

Steps to Reproduce

I ran camera_awsome example found here: https://github.com/Apparence-io/camera_awesome/tree/master/example.

  1. I granted permissions.
  2. Take photo without flash, Work perfectly!!!
  3. But, if I take photo with flash. _pictureController.takePicture throw Java error java.lang.IllegalStateException: Reply already submitted and app crash/close

Expected results

Take photo with flash or torch

Actual results

App crash, android studio say Java error java.lang.IllegalStateException: Reply already submitted

E/CameraCaptureSession( 9314): Session 0: Exception while stopping repeating: E/CameraCaptureSession( 9314): android.hardware.camera2.CameraAccessException: CAMERA_ERROR (3): The camera device has encountered a serious error E/CameraCaptureSession( 9314): at android.hardware.camera2.impl.CameraDeviceImpl.checkIfCameraClosedOrInError(CameraDeviceImpl.java:2553) E/CameraCaptureSession( 9314): at android.hardware.camera2.impl.CameraDeviceImpl.stopRepeating(CameraDeviceImpl.java:1141) E/CameraCaptureSession( 9314): at android.hardware.camera2.impl.CameraCaptureSessionImpl.close(CameraCaptureSessionImpl.java:526) E/CameraCaptureSession( 9314): at com.apparence.camerawesome.CameraPreview.dispose(CameraPreview.java:164) E/CameraCaptureSession( 9314): at com.apparence.camerawesome.CameraStateManager.onError(CameraStateManager.java:154) E/CameraCaptureSession( 9314): at android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks.notifyError(CameraDeviceImpl.java:2042) E/CameraCaptureSession( 9314): at android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks.lambda$Sm85frAzwGZVMAK-NE_gwckYXVQ(Unknown Source:0) E/CameraCaptureSession( 9314): at android.hardware.camera2.impl.-$$Lambda$CameraDeviceImpl$CameraDeviceCallbacks$Sm85frAzwGZVMAK-NE_gwckYXVQ.accept(Unknown Source:8) E/CameraCaptureSession( 9314): at com.android.internal.util.function.pooled.PooledLambdaImpl.doInvoke(PooledLambdaImpl.java:271) E/CameraCaptureSession( 9314): at com.android.internal.util.function.pooled.PooledLambdaImpl.invoke(PooledLambdaImpl.java:195) E/CameraCaptureSession( 9314): at com.android.internal.util.function.pooled.OmniFunction.run(OmniFunction.java:86) E/CameraCaptureSession( 9314): at android.os.Handler.handleCallback(Handler.java:883) E/CameraCaptureSession( 9314): at android.os.Handler.dispatchMessage(Handler.java:100) E/CameraCaptureSession( 9314): at android.os.Looper.loop(Looper.java:237) E/CameraCaptureSession( 9314): at android.app.ActivityThread.main(ActivityThread.java:7860) E/CameraCaptureSession( 9314): at java.lang.reflect.Method.invoke(Native Method) E/CameraCaptureSession( 9314): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) E/CameraCaptureSession( 9314): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075) W/Binder ( 9314): Caught a RuntimeException from the binder stub implementation. W/Binder ( 9314): java.lang.NullPointerException: Attempt to invoke virtual method 'android.hardware.camera2.CaptureRequest android.hardware.camera2.impl.CameraDeviceImpl$CaptureCallbackHolder.getRequest(int)' on a null object reference W/Binder ( 9314): at android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks.onCaptureErrorLocked(CameraDeviceImpl.java:2372) W/Binder ( 9314): at android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks.onDeviceError(CameraDeviceImpl.java:2014) W/Binder ( 9314): at android.hardware.camera2.ICameraDeviceCallbacks$Stub.onTransact(ICameraDeviceCallbacks.java:139) W/Binder ( 9314): at android.os.Binder.execTransactInternal(Binder.java:1021) W/Binder ( 9314): at android.os.Binder.execTransact(Binder.java:994) I/CameraManagerGlobal( 9314): Camera 0 facing CAMERA_FACING_BACK state now CAMERA_STATE_CLOSED for client com.apparence.camerawesome_example API Level 2 I/CameraManagerGlobal( 9314): Camera 0 facing CAMERA_FACING_BACK state now CAMERA_STATE_OPEN for client com.apparence.camerawesome_example API Level 2 E/com.apparence.camerawesome.CameraStateManager( 9314): close camera session: failed D/AndroidRuntime( 9314): Shutting down VM E/AndroidRuntime( 9314): FATAL EXCEPTION: main E/AndroidRuntime( 9314): Process: com.apparence.camerawesome_example, PID: 9314 E/AndroidRuntime( 9314): java.lang.IllegalStateException: Reply already submitted E/AndroidRuntime( 9314): at io.flutter.embedding.engine.dart.DartMessenger$Reply.reply(DartMessenger.java:139) E/AndroidRuntime( 9314): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.success(MethodChannel.java:238) E/AndroidRuntime( 9314): at com.apparence.camerawesome.CamerawesomePlugin$1.onOpened(CamerawesomePlugin.java:341) E/AndroidRuntime( 9314): at com.apparence.camerawesome.CameraStateManager.onOpened(CameraStateManager.java:135) E/AndroidRuntime( 9314): at android.hardware.camera2.impl.CameraDeviceImpl$1.run(CameraDeviceImpl.java:150) E/AndroidRuntime( 9314): at android.os.Handler.handleCallback(Handler.java:883) E/AndroidRuntime( 9314): at android.os.Handler.dispatchMessage(Handler.java:100) E/AndroidRuntime( 9314): at android.os.Looper.loop(Looper.java:237) E/AndroidRuntime( 9314): at android.app.ActivityThread.main(ActivityThread.java:7860) E/AndroidRuntime( 9314): at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime( 9314): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) E/AndroidRuntime( 9314): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)

About your device

Brand Model OS
Samsung A10 Android 10

Photo Quality

Proposal

It will be nice to have a propery for CameraAwesome that provides a way to set the final image taken quality, like "qualitiy: 70"

Vidรฉo support

Proposal

Describe your new feature
Video support: are there any work in a pr for this? By the way thanks for this great package. I wish it was an official package by Flutter but I guess they don't have time for camera. I am glad you guys help us here.

advanced camera features

Hello!

Not an issue or really a feature request but more about determining what's possible.

I haven't seen any camera apps outside of the native camera interface that can take advantage of things like different camera lenses (such as on the iPhone 12). Do you guys know if it's possible to access these features? In a perfect world, I'd love to just get access to the full-featured native camera interface but that doesn't seem possible (at least on iOS).

I did come across this example: https://developer.apple.com/documentation/avfoundation/cameras_and_media_capture/avcam_building_a_camera_app

Would love to hear your thoughts!

[App Crash] com.apparence.camerawesome.CameraStateManager.stopCamera() on a null object reference

that seems weird but if you added the package and didn't use it anywhere, it makes the app crash at exit.

Steps to Reproduce

Just add

camerawesome: ^0.1.1+1

to a new flutter project.
and compile it and open it then exit the app by clicking the back button.

Expected results

Nothing, the app should exit without a crash.

Actual results

It seems that camerawesome hooks into app lifecycle and tries to clean up things .. even it is not used anywhere in the code.

About your device

D/AndroidRuntime(31610): Shutting down VM
E/AndroidRuntime(31610): FATAL EXCEPTION: main
E/AndroidRuntime(31610): Process: re.edgewa.wallet, PID: 31610
E/AndroidRuntime(31610): java.lang.RuntimeException: Unable to destroy activity {re.edgewa.wallet/re.edgewa.wallet.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.apparence.camerawesome.CameraStateManager.stopCamera()' on a null object reference
E/AndroidRuntime(31610): 	at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4942)
E/AndroidRuntime(31610): 	at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4971)
E/AndroidRuntime(31610): 	at android.app.servertransaction.DestroyActivityItem.execute(DestroyActivityItem.java:44)
E/AndroidRuntime(31610): 	at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
E/AndroidRuntime(31610): 	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
E/AndroidRuntime(31610): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2017)
E/AndroidRuntime(31610): 	at android.os.Handler.dispatchMessage(Handler.java:107)
E/AndroidRuntime(31610): 	at android.os.Looper.loop(Looper.java:214)
E/AndroidRuntime(31610): 	at android.app.ActivityThread.main(ActivityThread.java:7397)
E/AndroidRuntime(31610): 	at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(31610): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
E/AndroidRuntime(31610): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:935)
E/AndroidRuntime(31610): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.apparence.camerawesome.CameraStateManager.stopCamera()' on a null object reference
E/AndroidRuntime(31610): 	at com.apparence.camerawesome.CamerawesomePlugin.onDetachedFromActivity(CamerawesomePlugin.java:486)
E/AndroidRuntime(31610): 	at io.flutter.embedding.engine.FlutterEngineConnectionRegistry.detachFromActivity(FlutterEngineConnectionRegistry.java:389)
E/AndroidRuntime(31610): 	at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onDetach(FlutterActivityAndFragmentDelegate.java:539)
E/AndroidRuntime(31610): 	at io.flutter.embedding.android.FlutterActivity.release(FlutterActivity.java:589)
E/AndroidRuntime(31610): 	at io.flutter.embedding.android.FlutterActivity.onDestroy(FlutterActivity.java:610)
E/AndroidRuntime(31610): 	at android.app.Activity.performDestroy(Activity.java:8056)
E/AndroidRuntime(31610): 	at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1342)
E/AndroidRuntime(31610): 	at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4927)
E/AndroidRuntime(31610): 	... 11 more

Brand Model OS
--- --- 10

[iOS] Image Stream

Hello,

It seems that images stream is not working on iOS (and even rather than it is not implemented). Any chance that it would be implemented soon ?

Thanks.

iOS Imagestream: Manage list of planes

ImageStreamBuilder iOS

Hi,

I'm trying to implement a QR code reader with CameraAwesome. On Android, it works just fine. On iOS it doesn't work.

In details:

In imageStreamBuilder, I get the streamSubscription and I start scanner calling the function "onData". In this case I convert the data given by the stream in a File and then I use BarcodeDetector (Google ML kit).

I get the following error:

021-01-07 19:00:58.055465+0100 Runner[2147:9132611] *** Terminating app due to uncaught exception 'FIRInvalidImage', reason: 'Input image must not be nil.'
*** First throw call stack:
(0x18a51d86c 0x19f48cc50 0x18a4164a4 0x1012e9934 0x101503624 0x1015033a0 0x101502d84 0x101502994 0x103da94e8 0x103568178 0x1038429ec 0x10357170c 0x103573e38 0x18a499fa0 0x18a499ba0 0x18a498ffc 0x18a492ee4 0x18a49221c 0x1a1f96784 0x18ced0fe0 0x18ced6854 0x100d646e0 0x18a1526b0)
*** Terminating app due to uncaught exception 'FIRInvalidImage', reason: 'Input image must not be nil.'
terminating with uncaught exception of type NSException
libc++abi.dylib: terminating with uncaught exception of type NSException

Since it works smoothly in Android, I think there is a problem with iOS.
The problem can be reproduced with the following code:


CameraAwesome(
                    sensor: _sensor,
                    captureMode: _captureMode,
                    photoSize: _photoSize,
                    selectDefaultSize: (List<Size> availableSizes) =>
                        Size(1920, 1080),
                    imagesStreamBuilder: (Stream<Uint8List> imageStream) {
                      // ignore: cancel_subscriptions
                      setState(() {
                        this.cameraMainStream = imageStream;
                      });

                      StreamSubscription<Uint8List> streamSubscription =
                          imageStream.listen((Uint8List imageData) {});

                      setState(() {
                        this.cameraStream = streamSubscription;
                      });

                      streamSubscription.onData((data) async {
                        if (data == null) return;
                        if (skipFrames) { //used to low the overhead. Not necessary to reproduce the problem
                          return;
                        }

                        skipFrame(true);

                        final path = join(
                          (await getTemporaryDirectory()).path,
                          '${DateTime.now()}.png',
                        );
                        debugPrint('3');
                        File file = File(path);
                        file.writeAsBytesSync(data);
                        await file.writeAsBytes(data);
                        //File file = File.fromRawPath(data);
                        if (file == null) {
                          debugPrint('-------> NULL');
                        }
                        if (await file.exists()) {
                          debugPrint('exists');
                        }

                        //File file = File.fromRawPath(data);
                        try {
                          File fileCopy = File(path);
                          FirebaseVisionImage visionImage =
                              FirebaseVisionImage.fromFile(fileCopy);
                          if (visionImage == null) {
                            debugPrint('-------> NULL');
                          }

                          String result =
                              await QrProvider.detectQR(visionImage); //this calls BarcodeDetector.detectInImage(image);
                         
                        } catch (e) {
                          debugPrint(e);
                        }

                        skipFrame(false);
                      });
                    },
                    onCameraStarted: () {
                      skipFrame(false);
                    },
                  )

I don't think it is the way I'm handling the data but probably you know it better. Can you help me with this problem?
Thank you in advance!

Device lost connection

Steps to Reproduce

I have a โ€ždevice-lostโ€œ problem on my real device iPhone11pro at starting/initializing Awesome-Code. On Android-Simulator everything is working fine. In my opinion, before IOS14- and/or the latest flutter-update, I had no trouble. My camera- sourcecode, has not changed, yet. Flutter doctor -v says everything fine. If I use profilemode, sometimes I can take a picture, sometimes not. If I build in XCode, the returning dialog says: "Failure Reason: Message from debugger: Terminated due to memory issue".

Here is the source-code:

...
  final PictureController _pictureController = new PictureController();

  final ValueNotifier<CameraFlashes> _switchFlash = ValueNotifier(CameraFlashes.NONE);
  final ValueNotifier<double> _zoomNotifier = ValueNotifier(0);
  final ValueNotifier<Size> _photoSize = ValueNotifier(null);
  final ValueNotifier<Sensors> _sensor = ValueNotifier(Sensors.BACK);
  List<Size> _availableSizes;
  @override
  void initState() {
    super.initState();    
  }

  @override
  void dispose() {
    super.dispose();
    _switchFlash.dispose();
    _zoomNotifier.dispose();
    _sensor.dispose();
    _photoSize.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Stack(
          fit: StackFit.expand,
          children: <Widget>[
            _buildFullscreenCamera(),
            _buildInterface(),
          ],
        ),
    );
  }

  Widget _buildFullscreenCamera() {
    return CameraAwesome(
      captureMode: ValueNotifier(CaptureModes.PHOTO),
      onPermissionsResult: _onPermissionsResult,
      selectDefaultSize: (availableSizes) {
        this._availableSizes = availableSizes;
        return availableSizes[0];
      },
      orientation: DeviceOrientation.portraitUp,
      photoSize: _photoSize,
      sensor: _sensor,
      switchFlashMode: _switchFlash,
      zoom: _zoomNotifier,
    );
  }

  _onPermissionsResult(bool granted) {...}

  Widget _buildInterface() {...}

}

If I start the code at the beginning (first build method call) of my app, that works, but if I call it later, then I run into described issue. Furthermore I had a look into Apples Instruments OS X-App and could determine, that while initializing the camera the memory increases shortly for about 300+mb. I canโ€™t compare to IOS-Simulator, but Android-Simulator donโ€™t produce such memory peaks. Has someone an idea what I can do next, or is this a known issue?

Expected results

What it should be

Actual results

Trace in Instruments-App:
instruments

About your device

Brand Model OS
Apple iPhone 11pro 14.4

no method error when starting camera

Steps to Reproduce

I just installed version 0.2.0 and made one change to my code that was based off the 0.1.x example. That change was to add captureMode.

Whenever I start the camera, I now see the following error:

image

Unfortunately, I'm not seeing any stack trace ๐Ÿค”

That said, the camera IS working! I just get the aforementioned error.

Curious if this is something you ran into? I'm trying to pick through the other example to see if there are other changes, but hard to tell :)

Expected results

No error.

Actual results

See error above.

About your device

Brand Model OS
Apple iPhone 12 Pro 14.2.1

app crashing when starting video on iOS

Hello!

Steps to Reproduce

I copied your _recordVideo method pretty much verbatim.

  _recordVideo() async {
    if (_isRecordingVideo) {
      await _videoController.stopRecordingVideo();

      _isRecordingVideo = false;
      setState(() {});
    } else {
      final extDir = await getTemporaryDirectory();
      final testDir =
          await Directory('${extDir.path}/test').create(recursive: true);
      final filePath = '${testDir.path}/video_test.mp4';

      await _videoController.recordVideo(filePath);

      _isRecordingVideo = true;
      setState(() {});
    }
  }

Expected results

Video should work.

Actual results

App crashes and I see the following in the XCode console:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Unsupported value for standard codec'

About your device

Brand Model OS
Apple iPhone 12 Pro 14.2.1

App Crash after taking photo (Android)

Steps to Reproduce

Users tell me that the app crashes after taking a photo. Can't reproduce it.

About your device

e.g.
Samsung Galaxy Tab Active
Android 5.1 (SDK 22)

Error message in Google Play Console:

java.lang.IllegalStateException: 
  at android.hardware.camera2.impl.CameraCaptureSessionImpl.checkNotClosed (CameraCaptureSessionImpl.java:588)
  at android.hardware.camera2.impl.CameraCaptureSessionImpl.capture (CameraCaptureSessionImpl.java:160)
  at com.apparence.camerawesome.CameraPreview.unlockFocus (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.access$000 (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.access$100 (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.createCameraPreviewSession (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.onCancel (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.onConfigureFailed (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.onConfigured (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.onListen (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.onStateChanged (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.processCapture (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.refreshConfiguration (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.setAutoFocus (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.setFlashMode (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.setMainHandler (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.setPreviewSize (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.setZoom (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.setmCameraCharacteristics (CameraPreview.java)
  at com.apparence.camerawesome.CameraSession.access$000 (CameraSession.java)
  at com.apparence.camerawesome.CameraSession.access$002 (CameraSession.java)
  at com.apparence.camerawesome.CameraSession.addPictureSurface (CameraSession.java)
  at com.apparence.camerawesome.CameraSession.clearSurface (CameraSession.java)
  at com.apparence.camerawesome.CameraSession.createCameraCaptureSession (CameraSession.java)
  at com.apparence.camerawesome.CameraSession.setCaptureSession (CameraSession.java)
  at com.apparence.camerawesome.CameraSession.setOnCaptureSessionListenerList (CameraSession.java)
  at com.apparence.camerawesome.CameraSession.setState (CameraSession.java)
  at com.apparence.camerawesome.CameraSession.setZoomArea (CameraSession.java)
  at com.apparence.camerawesome.CameraPicture$2.onCaptureCompleted (CameraPicture.java)
  at java.lang.reflect.Method.invoke (Method.java)
  at java.lang.reflect.Method.invoke (Method.java:372)
  at android.hardware.camera2.dispatch.InvokeDispatcher.dispatch (InvokeDispatcher.java:39)
  at android.hardware.camera2.dispatch.HandlerDispatcher$1.run (HandlerDispatcher.java:65)
  at android.os.Handler.handleCallback (Handler.java:739)
  at android.os.Handler.dispatchMessage (Handler.java:95)
  at android.os.Looper.loop (Looper.java:145)
  at android.app.ActivityThread.main (ActivityThread.java:6914)
  at java.lang.reflect.Method.invoke (Method.java)
  at java.lang.reflect.Method.invoke (Method.java:372)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1404)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1199)

How to make the camera square?

Awesome package!

However I have an issue with making the camera preview window square.
I followed the example and actually copied the function buildSizedScreenCamera to build the sized camera.

If I put the height and the width as the width of the screen (to create a square), the camera preview will not be square and the camera feed will become distorted.

This is the code:

Container(
    height: MediaQuery.of(context).size.width,
    width: MediaQuery.of(context).size.width,
    child: CameraAwesome(
        fitted: true,
        ...
    ),
);

And for some reason, setting the height of the container to 300 (like in the example), the camera is not distorted.
But again, not square.

I think it's because in _CameraPreviewWidget when fitted is true, the FittedBox fit is set to fit: BoxFit.fitWidth, But I'm not really sure this is the cause of the problem.

Hope to get a solution,
Thank you!

Something stops Plugin from working.

Steps to Reproduce

First here is the link to the project:

With onPermissionResult set

  1. Install App
  2. Open App
  3. Choose "Eartag Reader"
  4. One of the follwing Scenario
  5. Uninstall App

Scenario 1: Give Permission

D/com.apparence.camerawesome.CamerawesomePlugin( 9855): _handleCheckPermissions: 
> W/ActivityThread(32733): SCHED: ch.band.manko.idpa20.eartag_reader_prototype/.MainActivity [84, r=71ms, a=13ms, w=2410ms]
> [log] Permission to access camera: false

Scenario 2: Deny Permission

D/com.apparence.camerawesome.CamerawesomePlugin( 9855): _handleCheckPermissions: 
W/ActivityThread( 6646): SCHED: ch.band.manko.idpa20.eartag_reader_prototype/.MainActivity [74, r=173ms, a=58ms, w=7023ms]
[log] Permission to access camera: false

Going a page back and opening "Eartag Reader"
Doesn't call onPermissionsResult anymore:

W/ActivityThread( 9855): SCHED: ch.band.manko.idpa20.eartag_reader_prototype/.MainActivity [56, r=26ms, a=20ms, w=45954ms]
D/com.apparence.camerawesome.CamerawesomePlugin( 9855): _handleCheckPermissions: 
W/ActivityThread( 9855): SCHED: ch.band.manko.idpa20.eartag_reader_prototype/.MainActivity [79, r=106ms, a=28ms, w=2890ms]

Without on PermissionResult set

Git Diff

  1. Install App
  2. Open App
  3. Choose "Eartag Reader"
  4. One of the follwing Scenario
  5. Uninstall App

Scenario 1: Give Permission

D/com.apparence.camerawesome.CamerawesomePlugin( 7719): _handleCheckPermissions: 
W/ActivityThread( 7719): SCHED: ch.band.manko.idpa20.eartag_reader_prototype/.MainActivity [85, r=170ms, a=29ms, w=57153ms]
E/flutter ( 7719): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: NoSuchMethodError: The method 'call' was called on null.
E/flutter ( 7719): Receiver: null
E/flutter ( 7719): Tried calling: call()
E/flutter ( 7719): #0      CameraAwesomeState.initPlatformState.<anonymous closure> (package:camerawesome/camerapreview.dart:160:37)
E/flutter ( 7719): #1      _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter ( 7719): #2      _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter ( 7719): #3      _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
E/flutter ( 7719): #4      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:357:11)
E/flutter ( 7719): #5      _BufferingStreamSubscription._add (dart:async/stream_impl.dart:285:7)
E/flutter ( 7719): #6      _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:69:11)
E/flutter ( 7719): #7      _EventSinkWrapper.add (dart:async/stream_transformers.dart:15:11)
E/flutter ( 7719): #8      CamerawesomePlugin.listenPermissionResult.<anonymous closure> (package:camerawesome/camerawesome_plugin.dart:111:16)
E/flutter ( 7719): #9      _HandlerEventSink.add (dart:async/stream_transformers.dart:225:17)
E/flutter ( 7719): #10     _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:121:24)
E/flutter ( 7719): #11     _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter ( 7719): #12     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter ( 7719): #13     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
E/flutter ( 7719): #14     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:357:11)
E/flutter ( 7719): #15     _DelayedData.perform (dart:async/stream_impl.dart:611:14)
E/flutter ( 7719): #16     _StreamImplEvents.handleNext (dart:async/stream_impl.dart:730:11)
E/flutter ( 7719): #17     _PendingEvents.schedule.<anonymous closure> (dart:async/stream_impl.dart:687:7)
E/flutter ( 7719): #18     _rootRun (dart:async/zone.dart:1182:47)
E/flutter ( 7719): #19     _CustomZone.run (dart:async/zone.dart:1093:19)
E/flutter ( 7719): #20     _CustomZone.runGuarded (dart:async/zone.dart:997:7)
E/flutter ( 7719): #21     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1037:23)
E/flutter ( 7719): #22     _rootRun (dart:async/zone.dart:1190:13)
E/flutter ( 7719): #23     _CustomZone.run (dart:async/zone.dart:1093:19)
E/flutter ( 7719): #24     _CustomZone.runGuarded (dart:async/zone.dart:997:7)
E/flutter ( 7719): #25     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1037:23)
E/flutter ( 7719): #26     _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
E/flutter ( 7719): #27     _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
E/flutter ( 7719): 
W/ActivityThread( 7719): SCHED: ch.band.manko.idpa20.eartag_reader_prototype/.MainActivity [61, r=32ms, a=20ms, w=60911ms]

Scenario 2: Deny Permission

E/flutter ( 8434): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: NoSuchMethodError: The method 'call' was called on null.
E/flutter ( 8434): Receiver: null
E/flutter ( 8434): Tried calling: call()
E/flutter ( 8434): #0      CameraAwesomeState.initPlatformState.<anonymous closure> (package:camerawesome/camerapreview.dart:160:37)
E/flutter ( 8434): #1      _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter ( 8434): #2      _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter ( 8434): #3      _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
E/flutter ( 8434): #4      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:357:11)
E/flutter ( 8434): #5      _BufferingStreamSubscription._add (dart:async/stream_impl.dart:285:7)
E/flutter ( 8434): #6      _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:69:11)
E/flutter ( 8434): #7      _EventSinkWrapper.add (dart:async/stream_transformers.dart:15:11)
E/flutter ( 8434): #8      CamerawesomePlugin.listenPermissionResult.<anonymous closure> (package:camerawesome/camerawesome_plugin.dart:111:16)
E/flutter ( 8434): #9      _HandlerEventSink.add (dart:async/stream_transformers.dart:225:17)
E/flutter ( 8434): #10     _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:121:24)
E/flutter ( 8434): #11     _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter ( 8434): #12     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter ( 8434): #13     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
E/flutter ( 8434): #14     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:357:11)
E/flutter ( 8434): #15     _DelayedData.perform (dart:async/stream_impl.dart:611:14)
E/flutter ( 8434): #16     _StreamImplEvents.handleNext (dart:async/stream_impl.dart:730:11)
E/flutter ( 8434): #17     _PendingEvents.schedule.<anonymous closure> (dart:async/stream_impl.dart:687:7)
E/flutter ( 8434): #18     _rootRun (dart:async/zone.dart:1182:47)
E/flutter ( 8434): #19     _CustomZone.run (dart:async/zone.dart:1093:19)
E/flutter ( 8434): #20     _CustomZone.runGuarded (dart:async/zone.dart:997:7)
E/flutter ( 8434): #21     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1037:23)
E/flutter ( 8434): #22     _rootRun (dart:async/zone.dart:1190:13)
E/flutter ( 8434): #23     _CustomZone.run (dart:async/zone.dart:1093:19)
E/flutter ( 8434): #24     _CustomZone.runGuarded (dart:async/zone.dart:997:7)
E/flutter ( 8434): #25     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1037:23)
E/flutter ( 8434): #26     _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
E/flutter ( 8434): #27     _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)

Expected results

The Plugin should show a preview.
The Flashlight should be toggable.

Actual results

Nothing.

About your device

Brand Model OS
Xiaomi Redmi Note 7 Android 10, MIUI 12.01

Camera crashes when exiting and re-entering page

When I run the camera the first time, it works fine (takes pictures and stuff and works good).
But after I exit the page by Navigator.push and re-visit it, the camera will crash,

My code that shows the CameraAwesome widget

...
Container(
                            child: CameraAwesome(
                              testMode: false,
                              selectDefaultSize: (List<Size> availableSizes) {
                                print(availableSizes);
                                return Size(640.0, 480.0);
                              },
                              onPermissionsResult: _onPermissionsResult,
                              onCameraStarted: () {},
                              onOrientationChanged: (CameraOrientations newOrientation) {},
                              sensor: _sensor,
                              switchFlashMode: _switchFlash,
                              captureMode: _captureMode,
                              orientation: DeviceOrientation.portraitUp,
                              fitted: false,
                              enableAudio: _enableAudio,
                              photoSize: _photoSize,
                            ),
...

bug
When loading up the page a second time, this will appear on vscode when ran in debug mode. ^^

I suspect it's something related to #61, because texture was mentioned in the code after init, maybe?? ;D

HEVC / H.265 Video Recording

Proposal

When video recording is implemented, please support H.265 or HEVC video recording. This would be a great improvement over the H.264 in Flutter's camera plugin.

The image is underexposed on Samsung S8

Steps to Reproduce

  1. Launch the example app in profile mode
  2. Change mode of flashlight to always on
  3. The flashlight is on all the time (same as in #12)
  4. Take picture, the flashlight fires

Expected results

Image should have correct exposure

Actual results

Image is dark/underexposed

Screenshot_20200826-173112

About your device

Brand Model OS
Samsung S8 Android 9

Logs

Launching lib/main.dart on SM G950F in profile mode...
โœ“ Built build/app/outputs/flutter-apk/app-profile.apk (10.0MB).
Installing build/app/outputs/flutter-apk/app.apk...
Connecting to VM Service at ws://127.0.0.1:53906/M7DOLnSG1Ss=/ws
D/EmergencyMode(10645): [EmergencyManager] android createPackageContext successful
D/InputTransport(10645): Input channel constructed: fd=89
D/ViewRootImpl@58a97b3[MainActivity](10645): setView = DecorView@7010117[MainActivity] TM=true MM=false
D/SurfaceView(10645): onWindowVisibilityChanged(0) true io.flutter.embedding.android.FlutterSurfaceView{dad5170 V.E...... ......I. 0,0-0,0} of ViewRootImpl@58a97b3[MainActivity]
D/ViewRootImpl@58a97b3[MainActivity](10645): dispatchAttachedToWindow
D/ViewRootImpl@58a97b3[MainActivity](10645): Relayout returned: old=[0,0][1080,2220] new=[0,0][1080,2220] result=0x7 surface={valid=true 487475417088} changed=true
I/OpenGLRenderer(10645): Initialized EGL, version 1.4
D/OpenGLRenderer(10645): Swap behavior 2
D/mali_winsys(10645): EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
D/OpenGLRenderer(10645): eglCreateWindowSurface = 0x7180d2ac00, 0x717fcc9010
D/SurfaceView(10645): show() Surface(name=SurfaceView - com.apparence.camerawesome_example/com.apparence.camerawesome_example.MainActivity@dad5170@0[10645])/@0x815de88 io.flutter.embedding.android.FlutterSurfaceView{dad5170 V.E...... ......ID 0,0-1080,2076}
D/SurfaceView(10645): surfaceCreated 1 #8 io.flutter.embedding.android.FlutterSurfaceView{dad5170 V.E...... ......ID 0,0-1080,2076}
D/mali_winsys(10645): EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
D/SurfaceView(10645): surfaceChanged (1080,2076) 1 #8 io.flutter.embedding.android.FlutterSurfaceView{dad5170 V.E...... ......ID 0,0-1080,2076}
D/com.apparence.camerawesome.CamerawesomePlugin(10645): _handleCheckPermissions:
D/ViewRootImpl@58a97b3[MainActivity](10645): Relayout returned: old=[0,0][1080,2220] new=[0,0][1080,2220] result=0x3 surface={valid=true 487475417088} changed=false
D/vndksupport(10645): Loading /vendor/lib64/hw/[email protected] from current namespace instead of sphal namespace.
D/ViewRootImpl@58a97b3[MainActivity](10645): MSG_RESIZED: frame=Rect(0, 0 - 1080, 2220) ci=Rect(0, 72 - 0, 144) vi=Rect(0, 72 - 0, 144) or=1
D/ViewRootImpl@58a97b3[MainActivity](10645): MSG_WINDOW_FOCUS_CHANGED 1 1
D/InputMethodManager(10645): prepareNavigationBarInfo() DecorView@7010117[MainActivity]
D/InputMethodManager(10645): getNavigationBarColor() -855310
D/InputMethodManager(10645): prepareNavigationBarInfo() DecorView@7010117[MainActivity]
D/InputMethodManager(10645): getNavigationBarColor() -855310
V/InputMethodManager(10645): Starting input: tba=com.apparence.camerawesome_example ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVisible : true , NavTrans : false
D/InputMethodManager(10645): startInputInner - Id : 0
I/InputMethodManager(10645): startInputInner - mService.startInputOrWindowGainedFocus
D/InputTransport(10645): Input channel constructed: fd=95
D/InputMethodManager(10645): prepareNavigationBarInfo() DecorView@7010117[MainActivity]
D/InputMethodManager(10645): getNavigationBarColor() -855310
V/InputMethodManager(10645): Starting input: tba=com.apparence.camerawesome_example ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVisible : true , NavTrans : false
D/InputMethodManager(10645): startInputInner - Id : 0
D/ViewRootImpl@58a97b3[MainActivity](10645): MSG_WINDOW_FOCUS_CHANGED 0 1
D/InputMethodManager(10645): prepareNavigationBarInfo() DecorView@7010117[MainActivity]
D/InputMethodManager(10645): getNavigationBarColor() -855310
D/InputTransport(10645): Input channel destroyed: fd=95
I/flutter (10645): granted
D/ViewRootImpl@58a97b3[MainActivity](10645): setWindowStopped(false) old=false
D/com.apparence.camerawesome.CamerawesomePlugin(10645): _handleCheckPermissions:
D/ViewRootImpl@58a97b3[MainActivity](10645): MSG_WINDOW_FOCUS_CHANGED 1 1
I/flutter (10645): granted
D/InputMethodManager(10645): prepareNavigationBarInfo() DecorView@7010117[MainActivity]
D/InputMethodManager(10645): getNavigationBarColor() -855310
D/InputMethodManager(10645): prepareNavigationBarInfo() DecorView@7010117[MainActivity]
D/InputMethodManager(10645): getNavigationBarColor() -855310
V/InputMethodManager(10645): Starting input: tba=com.apparence.camerawesome_example ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVisible : true , NavTrans : false
D/InputMethodManager(10645): startInputInner - Id : 0
I/InputMethodManager(10645): startInputInner - mService.startInputOrWindowGainedFocus
D/InputTransport(10645): Input channel constructed: fd=95
I/CameraManagerGlobal(10645): Connecting to camera service
D/VendorTagDescriptor(10645): addVendorDescriptor: vendor tag id 3854507339 added
D/SensorManager(10645): registerListener :: 6, LSM6DSL Acceleration Sensor, 200000, 0,
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 0
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 1
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 0
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 1
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 0
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 1
I/flutter (10645): ----------------------------------
I/flutter (10645): TAKE PHOTO CALLED
I/flutter (10645): ==> hastakePhoto : Instance of 'Future<bool>'
I/flutter (10645): ==> path : /data/user/0/com.apparence.camerawesome_example/cache/test/1598455776895.jpg
I/flutter (10645): ==> img.width : 4032
I/flutter (10645): ==> img.height : 3024
I/flutter (10645): ----------------------------------
I/        (10645): Increase max job count 60
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 0
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 1
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 0
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 1
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 0
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 1
D/ViewRootImpl@58a97b3[MainActivity](10645): MSG_WINDOW_FOCUS_CHANGED 0 1
D/InputMethodManager(10645): prepareNavigationBarInfo() DecorView@7010117[MainActivity]
D/InputMethodManager(10645): getNavigationBarColor() -855310
D/ViewRootImpl@58a97b3[MainActivity](10645): MSG_WINDOW_FOCUS_CHANGED 1 1
D/InputMethodManager(10645): prepareNavigationBarInfo() DecorView@7010117[MainActivity]
D/InputMethodManager(10645): getNavigationBarColor() -855310
D/ViewRootImpl@58a97b3[MainActivity](10645): setWindowStopped(false) old=false
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 0
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 1
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 0
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 1

Can not take second picture on Sony Xperia X

Steps to Reproduce

Take a picture, then try to take another picture.

Expected results

It should be possible to take multiple pictures.

Actual results

Taking the first picture works ok. When I try to take another picture the PictureController.takePicture() call never returns.
Interestingly, if I press the zoom-in button after that the picture is taken.

About your device

Brand Model OS
Sony Xperia X Android 8.0

add disable button and color

Hi,
I would like to thank you for your plugin, very useful and modern.
After taking a photo, I am saving it in a database, but I would like that while this operation is happening, that the button to take the photo be disabled or changed color. is it possible to implement something like "enable: true or enable: false" or "color: Colors.gray"?

PlatformException(FAILED_TO_CHECK_PERMISSIONS, , NULL_ACTIVITY, null)

Hello, my Manifest looks like this on Android but I get a Permission error any ideas?

<!-- io.flutter.app.FlutterApplication is an android.app.Application that
     calls FlutterMain.startInitialization(this); in its onCreate method.
     In most cases you can leave this as-is, but you if you want to provide
     additional functionality it is fine to subclass or reimplement
     FlutterApplication and put your custom class here. -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />

 
<application
    android:name="io.flutter.app.FlutterApplication"
    android:label="Vote"
    android:icon="@mipmap/ic_launcher">
    <activity
        android:name=".MainActivity"
        android:launchMode="singleTop"
        android:theme="@style/LaunchTheme"
        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
        android:hardwareAccelerated="true"
        android:windowSoftInputMode="adjustResize">
        <!-- This keeps the window background of the activity showing
             until Flutter renders its first frame. It can be removed if
             there is no splash screen (such as the default splash screen
             defined in @style/LaunchTheme). -->
        <meta-data
            android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
            android:value="true" />
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
</application>

Flashlight is always on on Huawei

Steps to Reproduce

  1. Launch the example app in profile mode
  2. Change mode of the flashlight to always on
  3. The flashlight is turned on all the time

Expected results

The flashlight should only fire when taking a picture

Actual results

Flashlight is on all the time

About your device

Brand Model OS
Huawei Y7p EMUI 10.1.0, Android 10

Logs

Launching lib/main.dart on ART L29 in profile mode...
โœ“ Built build/app/outputs/flutter-apk/app-profile.apk (10.0MB).
Connecting to VM Service at ws://127.0.0.1:53579/weBnUdIgprY=/ws
D/com.apparence.camerawesome.CamerawesomePlugin(20067): _handleCheckPermissions:
I/flutter (20067): granted
I/CameraManagerGlobal(20067): Connecting to camera service
D/SensorManager(20067): 0x6ff644b0e0 addFd fd=116
I/CameraManager(20067): open camera: 0, package name: com.apparence.camerawesome_example
W/Gralloc3(20067): allocator 3.x is not supported
I/Hwaps   (20067): APS: EventAnalyzed: initAPS: version is 10.1.0.18
D/Hwaps   (20067): Fpsrequest create,type:EXACTLY_IDENTIFY
I/hwaps   (20067): HwAps: JNI_OnLoad
D/Hwaps   (20067): Fpsrequest create,type:EXACTLY_IDENTIFY
D/Hwaps   (20067): Fpsrequest create,type:OPENGL_SETTING
D/Hwaps   (20067): FpsController create
D/Hwaps   (20067): APS: EventAnalyzed: reInitFpsPara :mBaseFps = 60; mMaxFps = 60
W/Settings(20067): Setting device_provisioned has moved from android.provider.Settings.Secure to android.provider.Settings.Global.
V/HiTouch_HiTouchSensor(20067): User setup is finished.
W/HwApsManager(20067): HwApsManagerService, registerCallback, start !
D/Hwaps   (20067): APS: EventAnalyzed: registerCallbackInApsManagerService, mPkgName:com.apparence.camerawesome_example; result = true
V/AudioManager(20067): querySoundEffectsEnabled...
V/AudioManager(20067): querySoundEffectsEnabled...
D/AwareBitmapCacher(20067): handleInit switch not opened pid=20067
I/flutter (20067): ----------------------------------
I/flutter (20067): TAKE PHOTO CALLED
I/flutter (20067): ==> hastakePhoto : Instance of 'Future<bool>'
I/flutter (20067): ==> path : /data/user/0/com.apparence.camerawesome_example/cache/test/1598455630967.jpg
I/flutter (20067): ==> img.width : 8000
I/flutter (20067): ==> img.height : 6000
I/flutter (20067): ----------------------------------

[CRASH] Error While Navigation to another route with hero and camera

Awsome Plugin ๐Ÿ˜„ , I just switched from the official camera plugin in my app to try this plugin, but ... there is an Issue:

Steps to Reproduce

I have a custom gallery UI and the first item in it is a small camera when the user clicks on it, switches to a full view with the camera (also custom UI)
Here is a screenshot of the UI:

image

When I click on the camera (the first item) it switches to another route with Hero animation but it throws a lot of errors and event when I get back it crashes the app here is a log:

View Log

[GETX] GOING TO ROUTE /camera
[GETX] "CameraController" has been initialized
D/com.apparence.camerawesome.CamerawesomePlugin( 3672): _handleCheckPermissions: 
E/libc    ( 3672): Access denied finding property "vendor.camera.aux.packagelist"
W/chat.owl.app( 3672): type=1400 audit(0.0:275089): avc: denied { read } for name="u:object_r:persist_camera_prop:s0" dev="tmpfs" ino=19220 scontext=u:r:untrusted_app:s0:c233,c256,c512,c768 tcontext=u:object_r:persist_camera_prop:s0 tclass=file permissive=0
D/com.apparence.camerawesome.CamerawesomePlugin( 3672): _handleCheckPermissions: 
E/flutter ( 3672): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: A ValueNotifier<Size> was used after being disposed.
E/flutter ( 3672): Once you have called dispose() on a ValueNotifier<Size>, it can no longer be used.
E/flutter ( 3672): #0      ChangeNotifier._debugAssertNotDisposed.<anonymous closure> (package:flutter/src/foundation/change_notifier.dart:117:9)
E/flutter ( 3672): #1      ChangeNotifier._debugAssertNotDisposed (package:flutter/src/foundation/change_notifier.dart:123:6)
E/flutter ( 3672): #2      ChangeNotifier.addListener (package:flutter/src/foundation/change_notifier.dart:153:12)
E/flutter ( 3672): #3      _CameraAwesomeState._initAndroidPhotoSize (package:camerawesome/camerapreview.dart:248:30)
E/flutter ( 3672): #4      _CameraAwesomeState.initPlatformState (package:camerawesome/camerapreview.dart:160:5)
E/flutter ( 3672): <asynchronous suspension>
E/flutter ( 3672): #5      _CameraAwesomeState.initState (package:camerawesome/camerapreview.dart:121:5)
E/flutter ( 3672): #6      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4765:58)
E/flutter ( 3672): #7      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4601:5)
E/flutter ( 3672): #8      Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
E/flutter ( 3672): #9      Element.updateChild (package:flutter/src/widgets/framework.dart:3327:18)
E/flutter ( 3672): #10     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
E/flutter ( 3672): #11     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4800:11)
E/flutter ( 3672): #12     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
E/flutter ( 3672): #13     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4606:5)
E/flutter ( 3672): #14     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4791:11)
E/flutter ( 3672): #15     ComponentElement.mount (package:flutter/src/widgets/framework.dart:4601:5)
E/flutter ( 3672): #16     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
E/flutter ( 3672): #17     Element.updateChild (package:flutter/src/widgets/framework.dart:3327:18)
E/flutter ( 3672): #18     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6118:14)
E/flutter ( 3672): #19     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
E/flutter ( 3672): #20     MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6236:32)
E/flutter ( 3672): #21     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
E/flutter ( 3672): #22     Element.updateChild (package:flutter/src/widgets/framework.dart:3327:18)
E/flutter ( 3672): #23     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
E/flutter ( 3672): #24     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
E/flutter ( 3672): #25     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4606:5)
E/flutter ( 3672): #26     ComponentElement.mount (package:flutter/src/widgets/framework.dart:4601:5)
E/flutter ( 3672): #27     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
E/flutter ( 3672): #28     Element.updateChild (package:flutter/src/widgets/framework.dart:3327:18)
E/flutter ( 3672): #29     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
E/flutter ( 3672): #30     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
E/flutter ( 3672): #31     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4606:5)
E/flutter ( 3672): #32     ComponentElement.mount (package:flutter/src/widgets/framework.dart:4601:5)
E/flutter ( 3672): #33     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
E/flutter ( 3672): #34     Element.updateChild (package:flutter/src/widgets/framework.dart:3327:18)
E/flutter ( 3672): #35     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
E/flutter ( 3672): #36     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
E/flutter ( 3672): #37     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4606:5)
E/flutter ( 3672): #38     ComponentElement.mount (package:flutter/src/widgets/framework.dart:4601:5)
E/flutter ( 3672): #39     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
E/flutter ( 3672): #40     Element.updateChild (package:flutter/src/widgets/framework.dart:3327:18)
E/flutter ( 3672): #41     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
E/flutter ( 3672): #42     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
E/flutter ( 3672): #43     ComponentElement._firstBuild (package:flutter/src/widgets/framewo
W/chat.owl.app( 3672): type=1400 audit(0.0:275092): avc: denied { read } for name="u:object_r:persist_camera_prop:s0" dev="tmpfs" ino=19220 scontext=u:r:untrusted_app:s0:c233,c256,c512,c768 tcontext=u:object_r:persist_camera_prop:s0 tclass=file permissive=0
E/libc    ( 3672): Access denied finding property "vendor.camera.aux.packagelist"
D/com.apparence.camerawesome.CamerawesomePlugin( 3672): _handleCheckPermissions: 
E/flutter ( 3672): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: A ValueNotifier<Size> was used after being disposed.
E/flutter ( 3672): Once you have called dispose() on a ValueNotifier<Size>, it can no longer be used.
E/flutter ( 3672): #0      ChangeNotifier._debugAssertNotDisposed.<anonymous closure> (package:flutter/src/foundation/change_notifier.dart:117:9)
E/flutter ( 3672): #1      ChangeNotifier._debugAssertNotDisposed (package:flutter/src/foundation/change_notifier.dart:123:6)
E/flutter ( 3672): #2      ChangeNotifier.addListener (package:flutter/src/foundation/change_notifier.dart:153:12)
E/flutter ( 3672): #3      _CameraAwesomeState._initAndroidPhotoSize (package:camerawesome/camerapreview.dart:248:30)
E/flutter ( 3672): #4      _CameraAwesomeState.initPlatformState (package:camerawesome/camerapreview.dart:160:5)
E/flutter ( 3672): <asynchronous suspension>
E/flutter ( 3672): #5      _CameraAwesomeState.initState (package:camerawesome/camerapreview.dart:121:5)
E/flutter ( 3672): #6      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4765:58)
E/flutter ( 3672): #7      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4601:5)
E/flutter ( 3672): #8      Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
E/flutter ( 3672): #9      Element.updateChild (package:flutter/src/widgets/framework.dart:3327:18)
E/flutter ( 3672): #10     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
E/flutter ( 3672): #11     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4800:11)
E/flutter ( 3672): #12     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
E/flutter ( 3672): #13     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4606:5)
E/flutter ( 3672): #14     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4791:11)
E/flutter ( 3672): #15     ComponentElement.mount (package:flutter/src/widgets/framework.dart:4601:5)
E/flutter ( 3672): #16     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
E/flutter ( 3672): #17     Element.updateChild (package:flutter/src/widgets/framework.dart:3327:18)
E/flutter ( 3672): #18     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6118:14)
E/flutter ( 3672): #19     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
E/flutter ( 3672): #20     MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6236:32)
E/flutter ( 3672): #21     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
E/flutter ( 3672): #22     Element.updateChild (package:flutter/src/widgets/framework.dart:3327:18)
E/flutter ( 3672): #23     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
E/flutter ( 3672): #24     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
E/flutter ( 3672): #25     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4606:5)
E/flutter ( 3672): #26     ComponentElement.mount (package:flutter/src/widgets/framework.dart:4601:5)
E/flutter ( 3672): #27     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
E/flutter ( 3672): #28     Element.updateChild (package:flutter/src/widgets/framework.dart:3327:18)
E/flutter ( 3672): #29     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
E/flutter ( 3672): #30     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
E/flutter ( 3672): #31     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4606:5)
E/flutter ( 3672): #32     ComponentElement.mount (package:flutter/src/widgets/framework.dart:4601:5)
E/flutter ( 3672): #33     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
E/flutter ( 3672): #34     Element.updateChild (package:flutter/src/widgets/framework.dart:3327:18)
E/flutter ( 3672): #35     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
E/flutter ( 3672): #36     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
E/flutter ( 3672): #37     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4606:5)
E/flutter ( 3672): #38     ComponentElement.mount (package:flutter/src/widgets/framework.dart:4601:5)
E/flutter ( 3672): #39     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14)
E/flutter ( 3672): #40     Element.updateChild (package:flutter/src/widgets/framework.dart:3327:18)
E/flutter ( 3672): #41     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
E/flutter ( 3672): #42     Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
E/flutter ( 3672): #43     ComponentElement._firstBuild (package:flutter/src/widgets/framewo
W/chat.owl.app( 3672): type=1400 audit(0.0:275093): avc: denied { read } for name="u:object_r:persist_camera_prop:s0" dev="tmpfs" ino=19220 scontext=u:r:untrusted_app:s0:c233,c256,c512,c768 tcontext=u:object_r:persist_camera_prop:s0 tclass=file permissive=0
E/libc    ( 3672): Access denied finding property "vendor.camera.aux.packagelist"
E/libc    ( 3672): Access denied finding property "persist.vendor.camera.privapp.list"
W/chat.owl.app( 3672): type=1400 audit(0.0:275094): avc: denied { read } for name="u:object_r:persist_camera_prop:s0" dev="tmpfs" ino=19220 scontext=u:r:untrusted_app:s0:c233,c256,c512,c768 tcontext=u:object_r:persist_camera_prop:s0 tclass=file permissive=0
E/libc    ( 3672): Access denied finding property "vendor.camera.aux.packagelist"
W/Binder:3672_6( 3672): type=1400 audit(0.0:275097): avc: denied { read } for name="u:object_r:persist_camera_prop:s0" dev="tmpfs" ino=19220 scontext=u:r:untrusted_app:s0:c233,c256,c512,c768 tcontext=u:object_r:persist_camera_prop:s0 tclass=file permissive=0

<snippit>
[GETX] CLOSE TO ROUTE /camera
D/com.apparence.camerawesome.CamerawesomePlugin( 3672): _handleCheckPermissions: 
E/com.apparence.camerawesome.CameraStateManager( 3672): close camera session: failed
E/libc    ( 3672): Access denied finding property "vendor.camera.aux.packagelist"
E/libc    ( 3672): Access denied finding property "vendor.camera.aux.packagelist"
D/com.apparence.camerawesome.CamerawesomePlugin( 3672): _handleCheckPermissions: 
[GETX] "CameraController" onClose() called
[GETX] "CameraController" deleted from memory
E/flutter ( 3672): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: A ValueNotifier<Size> was used after being disposed.
E/flutter ( 3672): Once you have called dispose() on a ValueNotifier<Size>, it can no longer be used.
E/flutter ( 3672): #0      ChangeNotifier._debugAssertNotDisposed.<anonymous closure> (package:flutter/src/foundation/change_notifier.dart:117:9)
E/flutter ( 3672): #1      ChangeNotifier._debugAssertNotDisposed (package:flutter/src/foundation/change_notifier.dart:123:6)
E/flutter ( 3672): #2      ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart:217:12)
E/flutter ( 3672): #3      ValueNotifier.value= (package:flutter/src/foundation/change_notifier.dart:292:5)
E/flutter ( 3672): #4      _CameraAwesomeState._initPhotoSize.<anonymous closure> (package:camerawesome/camerapreview.dart:264:32)
E/flutter ( 3672): #5      ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart:226:25)
E/flutter ( 3672): #6      ValueNotifier.value= (package:flutter/src/foundation/change_notifier.dart:292:5)
E/flutter ( 3672): #7      _CameraAwesomeState.initPlatformState (package:camerawesome/camerapreview.dart:164:24)
E/flutter ( 3672): #8      _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter ( 3672): #9      _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter ( 3672): #10     _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
E/flutter ( 3672): #11     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
E/flutter ( 3672): #12     Future._propagateToListeners (dart:async/future_impl.dart:725:32)
E/flutter ( 3672): #13     Future._completeWithValue (dart:async/future_impl.dart:529:5)
E/flutter ( 3672): #14     _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:40:15)
E/flutter ( 3672): #15     _completeOnAsyncReturn (dart:async-patch/async_patch.dart:311:13)
E/flutter ( 3672): #16     CamerawesomePlugin.getSizes (package:camerawesome/camerawesome_plugin.dart)
E/flutter ( 3672): #17     _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter ( 3672): #18     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter ( 3672): #19     _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
E/flutter ( 3672): #20     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
E/flutter ( 3672): #21     Future._propagateToListeners (dart:async/future_impl.dart:725:32)
E/flutter ( 3672): #22     Future._completeWithValue (dart:async/future_impl.dart:529:5)
E/flutter ( 3672): #23     _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:40:15)
E/flutter ( 3672): #24     _completeOnAsyncReturn (dart:async-patch/async_patch.dart:311:13)
E/flutter ( 3672): #25     MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart)
E/flutter ( 3672): #26     _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter ( 3672): #27     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter ( 3672): #28     _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
E/flutter ( 3672): #29     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
E/flutter ( 3672): #30     Future._propagateToListeners (dart:async/future_impl.dart:725:32)
E/flutter ( 3672): #31     Future._completeWithValue (dart:async/future_impl.dart:529:5)
E/flutter ( 3672): #32     Future._asyncCompleteWithValue.<anonymous closure> (dart:async/future_impl.dart:567:7)
E/flutter ( 3672): #33     _rootRun (dart:async/zone.dart:1190:13)
E/flutter ( 3672): #34     _CustomZone.run (dart:async/zone.dart:1093:19)
E/flutter ( 3672): #35     _CustomZone.runGuarded (dart:async/zone.dart:997:7)
E/flutter ( 3672): #36     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1037:23)
E/flutter ( 3672): #37     _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
E/flutter ( 3672): #38     _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
E/flutter ( 3672): 
E/libc    ( 3672): Access denied finding property "persist.vendor.camera.privapp.list"
E/libc    ( 3672): Access denied finding property "vendor.camera.aux.packagelist"
E/libc    ( 3672): Access denied finding property "vendor.camera.aux.packagelist"
D/AndroidRuntime( 3672): Shutting down VM
E/AndroidRuntime( 3672): FATAL EXCEPTION: main
E/AndroidRuntime( 3672): Process: chat.owl.app, PID: 3672
E/AndroidRuntime( 3672): java.lang.NullPointerException: Attempt to invoke virtual method 'int android.util.Size.getWidth()' on a null object reference
E/AndroidRuntime( 3672): 	at com.apparence.camerawesome.CameraPicture.refresh(CameraPicture.java:74)
E/AndroidRuntime( 3672): 	at com.apparence.camerawesome.CameraStateManager.onOpened(CameraStateManager.java:133)
E/AndroidRuntime( 3672): 	at android.hardware.camera2.impl.CameraDeviceImpl$1.run(CameraDeviceImpl.java:151)
E/AndroidRuntime( 3672): 	at android.os.Handler.handleCallback(Handler.java:883)
E/AndroidRuntime( 3672): 	at android.os.Handler.dispatchMessage(Handler.java:100)
E/AndroidRuntime( 3672): 	at android.os.Looper.loop(Looper.java:214)
E/AndroidRuntime( 3672): 	at android.app.ActivityThread.main(ActivityThread.java:7397)
E/AndroidRuntime( 3672): 	at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime( 3672): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
E/AndroidRuntime( 3672): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:935)
I/Process ( 3672): Sending signal. PID: 3672 SIG: 9
Lost connection to device.
Failed to send request: {"jsonrpc":"2.0","id":"126","method":"resume","params":{"isolateId":"isolates/764243394252463"}}

And here is how I use it:

in the gallery view:

...
Hero(
  tag: 'camera',
  child: GestureDetector(
    onTap: () async {
      final result = await Get.toNamed(Routes.camera);
      if (result != null) {
        // ...
      }
    },
    child: Stack(
      alignment: Alignment.center,
      children: [
        CameraAwesome(
          testMode: false,
          sensor: controller.sensor,
          selectDefaultSize: (List<Size> availableSizes) =>
              availableSizes.first ?? Size(1920, 1080),
          onCameraStarted: () {},
          photoSize: ValueNotifier(null),
          switchFlashMode: controller.flash,
          fitted: false,
          orientation: DeviceOrientation.portraitUp,
        ),
        const Icon(
          Icons.camera_alt,
          color: Colors.white,
          size: 42,
        ),
      ],
    ),
  ),
)
...

in the Camera View

...
CameraAwesome(
  testMode: false,
  sensor: controller.sensor,
  selectDefaultSize: (List<Size> availableSizes) =>
      availableSizes.first ?? Size(1920, 1080),
  onCameraStarted: () {},
  photoSize: controller.picSize,
  switchFlashMode: controller.flash,
  fitted: false,
  orientation: DeviceOrientation.portraitUp,
)
...

btw, the controller here is a normal class that holds the state and the ValueNotifiers and only got disposed/deleted when the controller is fully removed from the screen and in my case, the Galler Controller is not removed, it just got overlayed with another route (The Camera View).

Expected results

Switching between routes should work with any issues when there is a camera in it.

Actual results

App Crash!

About your device

Brand Model OS
Xiaomi Mi A3 Android 10

pinch to zoom

Hello! Awesome library. Kudos to your and your team.

Has anyone implemented pinch-to-zoom? I believe the primitives are there but curious if anyone has done it.

Cheers.

why not depend on the flutter-maintained camera plugin?

Hi, I've been looking for any ready-made widgets to take pictures in flutter and so far this looks the most promising, I just have a quick question: there's a camera plugin that the flutter team seems to be maintaining for a couple years now: https://pub.dev/packages/camera
Taking a quick look at this, it seems like you're not using that and instead I suppose you're writing the interfacing code yourself, right? I'm just curious as to what the reason was to decide so.

Exceptions when opening camera [Android 7 / Legacy mode]

Steps to Reproduce

Trying the plugin on Redmi 4A.
When opening the camera I'm getting this exception first
PlatformException (PlatformException(MUST_CALL_INIT, , , null))

Then, after pressing Continue this exception shows PlatformException (PlatformException(TEXTURE_NOT_FOUND, cannot find texture, , null))

After pressing Continue one more time, camera finally opens.

> import 'package:flutter/material.dart';
> import 'package:camerawesome/camerawesome_plugin.dart';
> 
> // A screen that allows users to take a picture using a given camera.
> class TakePictureScreen extends StatefulWidget {
>   @override
>   TakePictureScreenState createState() => TakePictureScreenState();
> }
> 
> class TakePictureScreenState extends State<TakePictureScreen> {
>   ValueNotifier<CameraFlashes> _switchFlash = ValueNotifier(CameraFlashes.NONE);
>   ValueNotifier<Sensors> _sensor = ValueNotifier(Sensors.BACK);
>   ValueNotifier<Size> _photoSize = ValueNotifier(null);
>   ValueNotifier<double> _zoom = ValueNotifier(null);
>   double _previousScale;
>   List<Size> availableSizes;
> 
>   // Controller
>   PictureController _pictureController = new PictureController();
> 
>   // [...]
> 
>   @override
>   void initState() {
>     super.initState();
>   }
> 
>   @override
>   void dispose() {
>     super.dispose();
>   }
> 
>   @override
>   Widget build(BuildContext context) {
>     return CameraAwesome(
>       onPermissionsResult: _onPermissionsResult,
>       selectDefaultSize: (availableSizes) {
>         this.availableSizes = availableSizes;
>         return availableSizes[0];
>       },
>       photoSize: _photoSize,
>       sensor: _sensor,
>       switchFlashMode: _switchFlash,
>       zoom: _zoom,
>       //onOrientationChanged: _onOrientationChange,
>       // imagesStreamBuilder: (imageStream) {
>       //   /// listen for images preview stream
>       //   /// you can use it to process AI recognition or anything else...
>       //   print("-- init CamerAwesome images stream");
>       //   setState(() {
>       //     previewStream = imageStream;
>       //   });
>       // },
>       onCameraStarted: () {
>         // camera started here -- do your after start stuff
>       },
>     );
>   }
> 
>   _onPermissionsResult(bool granted) {
>     if (!granted) {
>       AlertDialog alert = AlertDialog(
>         title: Text('Error'),
>         content: Text(
>             'It seems you doesn\'t authorized some permissions. Please check on your settings and try again.'),
>         actions: [
>           FlatButton(
>             child: Text('OK'),
>             onPressed: () => Navigator.of(context).pop(),
>           ),
>         ],
>       );
> 
>       // show the dialog
>       showDialog(
>         context: context,
>         builder: (BuildContext context) {
>           return alert;
>         },
>       );
>     } else {
>       setState(() {});
>       print("granted");
>     }
>   }
> }

About your device

Brand Model OS
Android Redmi 4A 7.1.2

[iOS] Camera freeze after using a while

Steps to Reproduce

If I rotate the phone or tap on the camera len for a while, the preview will be freeze. If I restart the app, it works. I think the camera can't adapt new exposure or focus frequently.

Expected results

The preview doesn't drop or auto restart new when there is a problem.

About your device

Brand Model OS
Apple iPhone 7 14.2

Cannot take second photo on Samsung S8

Steps to Reproduce

  1. Follow steps in #13 (i.e. take picture with flashlight)
  2. Dismiss the image preview
  3. Disable flashlight
  4. Try to take another picture
  5. Nothing happens

Expected results

Should be able to take picture

Actual results

Nothing happens when tapping on shutter button

About your device

Brand Model OS
Samsung S8 Android 9

Logs

These are logs from #13 plus after that when trying to take a second picture

Launching lib/main.dart on SM G950F in profile mode...
โœ“ Built build/app/outputs/flutter-apk/app-profile.apk (10.0MB).
Installing build/app/outputs/flutter-apk/app.apk...
Connecting to VM Service at ws://127.0.0.1:53906/M7DOLnSG1Ss=/ws
D/EmergencyMode(10645): [EmergencyManager] android createPackageContext successful
D/InputTransport(10645): Input channel constructed: fd=89
D/ViewRootImpl@58a97b3[MainActivity](10645): setView = DecorView@7010117[MainActivity] TM=true MM=false
D/SurfaceView(10645): onWindowVisibilityChanged(0) true io.flutter.embedding.android.FlutterSurfaceView{dad5170 V.E...... ......I. 0,0-0,0} of ViewRootImpl@58a97b3[MainActivity]
D/ViewRootImpl@58a97b3[MainActivity](10645): dispatchAttachedToWindow
D/ViewRootImpl@58a97b3[MainActivity](10645): Relayout returned: old=[0,0][1080,2220] new=[0,0][1080,2220] result=0x7 surface={valid=true 487475417088} changed=true
I/OpenGLRenderer(10645): Initialized EGL, version 1.4
D/OpenGLRenderer(10645): Swap behavior 2
D/mali_winsys(10645): EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
D/OpenGLRenderer(10645): eglCreateWindowSurface = 0x7180d2ac00, 0x717fcc9010
D/SurfaceView(10645): show() Surface(name=SurfaceView - com.apparence.camerawesome_example/com.apparence.camerawesome_example.MainActivity@dad5170@0[10645])/@0x815de88 io.flutter.embedding.android.FlutterSurfaceView{dad5170 V.E...... ......ID 0,0-1080,2076}
D/SurfaceView(10645): surfaceCreated 1 #8 io.flutter.embedding.android.FlutterSurfaceView{dad5170 V.E...... ......ID 0,0-1080,2076}
D/mali_winsys(10645): EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
D/SurfaceView(10645): surfaceChanged (1080,2076) 1 #8 io.flutter.embedding.android.FlutterSurfaceView{dad5170 V.E...... ......ID 0,0-1080,2076}
D/com.apparence.camerawesome.CamerawesomePlugin(10645): _handleCheckPermissions:
D/ViewRootImpl@58a97b3[MainActivity](10645): Relayout returned: old=[0,0][1080,2220] new=[0,0][1080,2220] result=0x3 surface={valid=true 487475417088} changed=false
D/vndksupport(10645): Loading /vendor/lib64/hw/[email protected] from current namespace instead of sphal namespace.
D/ViewRootImpl@58a97b3[MainActivity](10645): MSG_RESIZED: frame=Rect(0, 0 - 1080, 2220) ci=Rect(0, 72 - 0, 144) vi=Rect(0, 72 - 0, 144) or=1
D/ViewRootImpl@58a97b3[MainActivity](10645): MSG_WINDOW_FOCUS_CHANGED 1 1
D/InputMethodManager(10645): prepareNavigationBarInfo() DecorView@7010117[MainActivity]
D/InputMethodManager(10645): getNavigationBarColor() -855310
D/InputMethodManager(10645): prepareNavigationBarInfo() DecorView@7010117[MainActivity]
D/InputMethodManager(10645): getNavigationBarColor() -855310
V/InputMethodManager(10645): Starting input: tba=com.apparence.camerawesome_example ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVisible : true , NavTrans : false
D/InputMethodManager(10645): startInputInner - Id : 0
I/InputMethodManager(10645): startInputInner - mService.startInputOrWindowGainedFocus
D/InputTransport(10645): Input channel constructed: fd=95
D/InputMethodManager(10645): prepareNavigationBarInfo() DecorView@7010117[MainActivity]
D/InputMethodManager(10645): getNavigationBarColor() -855310
V/InputMethodManager(10645): Starting input: tba=com.apparence.camerawesome_example ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVisible : true , NavTrans : false
D/InputMethodManager(10645): startInputInner - Id : 0
D/ViewRootImpl@58a97b3[MainActivity](10645): MSG_WINDOW_FOCUS_CHANGED 0 1
D/InputMethodManager(10645): prepareNavigationBarInfo() DecorView@7010117[MainActivity]
D/InputMethodManager(10645): getNavigationBarColor() -855310
D/InputTransport(10645): Input channel destroyed: fd=95
I/flutter (10645): granted
D/ViewRootImpl@58a97b3[MainActivity](10645): setWindowStopped(false) old=false
D/com.apparence.camerawesome.CamerawesomePlugin(10645): _handleCheckPermissions:
D/ViewRootImpl@58a97b3[MainActivity](10645): MSG_WINDOW_FOCUS_CHANGED 1 1
I/flutter (10645): granted
D/InputMethodManager(10645): prepareNavigationBarInfo() DecorView@7010117[MainActivity]
D/InputMethodManager(10645): getNavigationBarColor() -855310
D/InputMethodManager(10645): prepareNavigationBarInfo() DecorView@7010117[MainActivity]
D/InputMethodManager(10645): getNavigationBarColor() -855310
V/InputMethodManager(10645): Starting input: tba=com.apparence.camerawesome_example ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVisible : true , NavTrans : false
D/InputMethodManager(10645): startInputInner - Id : 0
I/InputMethodManager(10645): startInputInner - mService.startInputOrWindowGainedFocus
D/InputTransport(10645): Input channel constructed: fd=95
I/CameraManagerGlobal(10645): Connecting to camera service
D/VendorTagDescriptor(10645): addVendorDescriptor: vendor tag id 3854507339 added
D/SensorManager(10645): registerListener :: 6, LSM6DSL Acceleration Sensor, 200000, 0,
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 0
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 1
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 0
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 1
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 0
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 1
I/flutter (10645): ----------------------------------
I/flutter (10645): TAKE PHOTO CALLED
I/flutter (10645): ==> hastakePhoto : Instance of 'Future<bool>'
I/flutter (10645): ==> path : /data/user/0/com.apparence.camerawesome_example/cache/test/1598455776895.jpg
I/flutter (10645): ==> img.width : 4032
I/flutter (10645): ==> img.height : 3024
I/flutter (10645): ----------------------------------
I/        (10645): Increase max job count 60
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 0
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 1
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 0
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 1
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 0
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 1
D/ViewRootImpl@58a97b3[MainActivity](10645): MSG_WINDOW_FOCUS_CHANGED 0 1
D/InputMethodManager(10645): prepareNavigationBarInfo() DecorView@7010117[MainActivity]
D/InputMethodManager(10645): getNavigationBarColor() -855310
D/ViewRootImpl@58a97b3[MainActivity](10645): MSG_WINDOW_FOCUS_CHANGED 1 1
D/InputMethodManager(10645): prepareNavigationBarInfo() DecorView@7010117[MainActivity]
D/InputMethodManager(10645): getNavigationBarColor() -855310
D/ViewRootImpl@58a97b3[MainActivity](10645): setWindowStopped(false) old=false
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 0
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 1
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 0
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 1
D/SmartClipDataCropperImpl(10645): doExtractSmartClipData : Extraction start! reqId = 64  Cropped area = Rect(540, 1110 - 541, 1111)  Package = com.apparence.camerawesome_example
D/SmartClipDataCropperImpl(10645): addAppMetaTag : package name is com.apparence.camerawesome_example
D/SmartClipDataCropperImpl(10645): sendExtractionResultToSmartClipService : -- Extracted SmartClip data information --
D/SmartClipDataCropperImpl(10645): sendExtractionResultToSmartClipService : Request Id : 64
D/SmartClipDataCropperImpl(10645): sendExtractionResultToSmartClipService : Extraction mode : 1
D/SemSmartClipDataRepository(10645): ----- Start of SmartClip repository informations -----
D/SemSmartClipDataRepository(10645): ** Content type : image
D/SemSmartClipDataRepository(10645): ** Meta area rect : Rect(0, 0 - 0, 0)
D/SemSmartClipDataRepository(10645): ** Captured image file path : null
D/SemSmartClipDataRepository(10645): ----- End of SmartClip repository informations -----
D/SmartClipDataCropperImpl(10645): sendExtractionResultToSmartClipService : Elapsed = 10
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 0
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 1
D/SmartClipRemoteRequestDispatcher(10645): dispatchScrollableAreaInfo : windowRect = Rect(0, 0 - 1080, 2220)
D/SmartClipRemoteRequestDispatcher(10645): dispatchScrollableAreaInfo : Scrollable view count = 1
D/SmartClipRemoteRequestDispatcher(10645): dispatchScrollableAreaInfo : Unscrollable view count = 0
D/SmartClipRemoteRequestDispatcher(10645): dispatchScrollableAreaInfo : Pkg=com.apparence.camerawesome_example Activity=null
D/ViewRootImpl@58a97b3[MainActivity](10645): MSG_WINDOW_FOCUS_CHANGED 0 1
D/InputMethodManager(10645): prepareNavigationBarInfo() DecorView@7010117[MainActivity]
D/InputMethodManager(10645): getNavigationBarColor() -855310
D/ViewRootImpl@58a97b3[MainActivity](10645): MSG_WINDOW_FOCUS_CHANGED 1 1
D/InputMethodManager(10645): prepareNavigationBarInfo() DecorView@7010117[MainActivity]
D/InputMethodManager(10645): getNavigationBarColor() -855310
D/ViewRootImpl@58a97b3[MainActivity](10645): MSG_WINDOW_FOCUS_CHANGED 0 1
D/InputMethodManager(10645): prepareNavigationBarInfo() DecorView@7010117[MainActivity]
D/InputMethodManager(10645): getNavigationBarColor() -855310
D/ViewRootImpl@58a97b3[MainActivity](10645): MSG_WINDOW_FOCUS_CHANGED 1 1
D/InputMethodManager(10645): prepareNavigationBarInfo() DecorView@7010117[MainActivity]
D/InputMethodManager(10645): getNavigationBarColor() -855310
D/ViewRootImpl@58a97b3[MainActivity](10645): MSG_WINDOW_FOCUS_CHANGED 0 1
D/InputMethodManager(10645): prepareNavigationBarInfo() DecorView@7010117[MainActivity]
D/InputMethodManager(10645): getNavigationBarColor() -855310
D/SurfaceView(10645): onWindowVisibilityChanged(8) false io.flutter.embedding.android.FlutterSurfaceView{dad5170 V.E...... ........ 0,0-1080,2076} of ViewRootImpl@58a97b3[MainActivity]
D/SurfaceView(10645): show() Surface(name=SurfaceView - com.apparence.camerawesome_example/com.apparence.camerawesome_example.MainActivity@dad5170@0[10645])/@0x815de88 io.flutter.embedding.android.FlutterSurfaceView{dad5170 V.E...... ........ 0,0-1080,2076}
D/SurfaceView(10645): surfaceDestroyed callback.size 1 #2 io.flutter.embedding.android.FlutterSurfaceView{dad5170 V.E...... ........ 0,0-1080,2076}
D/SurfaceView(10645): destroy() Surface(name=SurfaceView - com.apparence.camerawesome_example/com.apparence.camerawesome_example.MainActivity@dad5170@0[10645])/@0x815de88 io.flutter.embedding.android.FlutterSurfaceView{dad5170 V.E...... ........ 0,0-1080,2076}
W/libEGL  (10645): EGLNativeWindowType 0x717fcc9010 disconnect failed
D/OpenGLRenderer(10645): eglDestroySurface = 0x7180d2ac00, 0x717fcc9000
D/ViewRootImpl@58a97b3[MainActivity](10645): Relayout returned: old=[0,0][1080,2220] new=[0,0][1080,2220] result=0x5 surface={valid=false 0} changed=true
D/InputTransport(10645): Input channel destroyed: fd=95
D/ViewRootImpl@58a97b3[MainActivity](10645): setWindowStopped(true) old=false
D/SurfaceView(10645): windowStopped(true) false io.flutter.embedding.android.FlutterSurfaceView{dad5170 V.E...... ........ 0,0-1080,2076} of ViewRootImpl@58a97b3[MainActivity]
D/ViewRootImpl@58a97b3[MainActivity](10645): Surface release. android.view.WindowManagerGlobal.setStoppedState:669 android.app.Activity.performStop:7650 android.app.ActivityThread.callActivityOnStop:4379 android.app.ActivityThread.performStopActivityInner:4357 android.app.ActivityThread.handleStopActivity:4432 android.app.servertransaction.StopActivityItem.execute:41 android.app.servertransaction.TransactionExecutor.executeLifecycleState:145 android.app.servertransaction.TransactionExecutor.execute:70
E/com.apparence.camerawesome.CameraStateManager(10645): close camera session: failed
E/CameraCaptureSession(10645): Session 0: Exception while stopping repeating:
E/CameraCaptureSession(10645): android.hardware.camera2.CameraAccessException: CAMERA_ERROR (3): The camera device has encountered a serious error
E/CameraCaptureSession(10645): 	at android.hardware.camera2.impl.CameraDeviceImpl.checkIfCameraClosedOrInError(CameraDeviceImpl.java:2435)
E/CameraCaptureSession(10645): 	at android.hardware.camera2.impl.CameraDeviceImpl.stopRepeating(CameraDeviceImpl.java:1126)
E/CameraCaptureSession(10645): 	at android.hardware.camera2.impl.CameraCaptureSessionImpl.close(CameraCaptureSessionImpl.java:526)
E/CameraCaptureSession(10645): 	at com.apparence.camerawesome.CameraPreview.dispose(CameraPreview.java:130)
E/CameraCaptureSession(10645): 	at com.apparence.camerawesome.CameraStateManager.stopCamera(CameraStateManager.java:112)
E/CameraCaptureSession(10645): 	at com.apparence.camerawesome.CameraStateManager.onError(CameraStateManager.java:154)
E/CameraCaptureSession(10645): 	at android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks.notifyError(CameraDeviceImpl.java:1929)
E/CameraCaptureSession(10645): 	at android.hardware.camera2.impl.CameraDeviceImpl$CameraDeviceCallbacks.lambda$Sm85frAzwGZVMAK-NE_gwckYXVQ(Unknown Source:0)
E/CameraCaptureSession(10645): 	at android.hardware.camera2.impl.-$$Lambda$CameraDeviceImpl$CameraDeviceCallbacks$Sm85frAzwGZVMAK-NE_gwckYXVQ.accept(Unknown Source:8)
E/CameraCaptureSession(10645): 	at com.android.internal.util.function.pooled.PooledLambdaImpl.doInvoke(PooledLambdaImpl.java:258)
E/CameraCaptureSession(10645): 	at com.android.internal.util.function.pooled.PooledLambdaImpl.invoke(PooledLambdaImpl.java:182)
E/CameraCaptureSession(10645): 	at com.android.internal.util.function.pooled.OmniFunction.run(OmniFunction.java:77)
E/CameraCaptureSession(10645): 	at android.os.Handler.handleCallback(Handler.java:873)
E/CameraCaptureSession(10645): 	at android.os.Handler.dispatchMessage(Handler.java:99)
E/CameraCaptureSession(10645): 	at android.os.Looper.loop(Looper.java:214)
E/CameraCaptureSession(10645): 	at android.app.ActivityThread.main(ActivityThread.java:7050)
E/CameraCaptureSession(10645): 	at java.lang.reflect.Method.invoke(Native Method)
E/CameraCaptureSession(10645): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
E/CameraCaptureSession(10645): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
F/OIC_SRM_DOXM(11831): UpdatePersistentStorage failed!
D/SurfaceView(10645): onWindowVisibilityChanged(4) false io.flutter.embedding.android.FlutterSurfaceView{dad5170 V.E...... ........ 0,0-1080,2076} of ViewRootImpl@58a97b3[MainActivity]
D/ViewRootImpl@58a97b3[MainActivity](10645): Relayout returned: old=[0,0][1080,2220] new=[0,0][1080,2220] result=0x1 surface={valid=false 0} changed=false
D/ViewRootImpl@58a97b3[MainActivity](10645): setWindowStopped(false) old=true
D/SurfaceView(10645): windowStopped(false) false io.flutter.embedding.android.FlutterSurfaceView{dad5170 V.E...... ........ 0,0-1080,2076} of ViewRootImpl@58a97b3[MainActivity]
D/ViewRootImpl@58a97b3[MainActivity](10645): setWindowStopped(false) old=false
D/SurfaceView(10645): onWindowVisibilityChanged(0) true io.flutter.embedding.android.FlutterSurfaceView{dad5170 V.E...... ........ 0,0-1080,2076} of ViewRootImpl@58a97b3[MainActivity]
D/ViewRootImpl@58a97b3[MainActivity](10645): Relayout returned: old=[0,0][1080,2220] new=[0,0][1080,2220] result=0x7 surface={valid=true 487475933184} changed=true
I/OpenGLRenderer(10645): Initialized EGL, version 1.4
D/OpenGLRenderer(10645): Swap behavior 2
D/SurfaceView(10645): show() Surface(name=SurfaceView - com.apparence.camerawesome_example/com.apparence.camerawesome_example.MainActivity@dad5170@1[10645])/@0x45b4500 io.flutter.embedding.android.FlutterSurfaceView{dad5170 V.E...... ........ 0,0-1080,2076}
D/SurfaceView(10645): surfaceCreated 1 #8 io.flutter.embedding.android.FlutterSurfaceView{dad5170 V.E...... ........ 0,0-1080,2076}
D/mali_winsys(10645): EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
D/OpenGLRenderer(10645): eglCreateWindowSurface = 0x71970fc080, 0x717fd47010
D/mali_winsys(10645): EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
D/SurfaceView(10645): surfaceChanged (1080,2076) 1 #8 io.flutter.embedding.android.FlutterSurfaceView{dad5170 V.E...... ........ 0,0-1080,2076}
D/ViewRootImpl@58a97b3[MainActivity](10645): MSG_WINDOW_FOCUS_CHANGED 1 1
D/InputMethodManager(10645): prepareNavigationBarInfo() DecorView@7010117[MainActivity]
D/InputMethodManager(10645): getNavigationBarColor() -855310
D/InputMethodManager(10645): prepareNavigationBarInfo() DecorView@7010117[MainActivity]
D/InputMethodManager(10645): getNavigationBarColor() -855310
V/InputMethodManager(10645): Starting input: tba=com.apparence.camerawesome_example ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVisible : true , NavTrans : false
D/InputMethodManager(10645): startInputInner - Id : 0
I/InputMethodManager(10645): startInputInner - mService.startInputOrWindowGainedFocus
D/InputTransport(10645): Input channel constructed: fd=97
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 0
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 1
E/MethodChannel#camerawesome(10645): Failed to handle method call
E/MethodChannel#camerawesome(10645): java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.ImageReader.setOnImageAvailableListener(android.media.ImageReader$OnImageAvailableListener, android.os.Handler)' on a null object reference
E/MethodChannel#camerawesome(10645): 	at com.apparence.camerawesome.CameraPicture.takePicture(CameraPicture.java:97)
E/MethodChannel#camerawesome(10645): 	at com.apparence.camerawesome.CamerawesomePlugin._handleTakePhoto(CamerawesomePlugin.java:341)
E/MethodChannel#camerawesome(10645): 	at com.apparence.camerawesome.CamerawesomePlugin.onMethodCall(CamerawesomePlugin.java:136)
E/MethodChannel#camerawesome(10645): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:230)
E/MethodChannel#camerawesome(10645): 	at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/MethodChannel#camerawesome(10645): 	at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
E/MethodChannel#camerawesome(10645): 	at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#camerawesome(10645): 	at android.os.MessageQueue.next(MessageQueue.java:326)
E/MethodChannel#camerawesome(10645): 	at android.os.Looper.loop(Looper.java:181)
E/MethodChannel#camerawesome(10645): 	at android.app.ActivityThread.main(ActivityThread.java:7050)
E/MethodChannel#camerawesome(10645): 	at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#camerawesome(10645): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
E/MethodChannel#camerawesome(10645): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
E/flutter (10645): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: PlatformException(error, Attempt to invoke virtual method 'void android.media.ImageReader.setOnImageAvailableListener(android.media.ImageReader$OnImageAvailableListener, android.os.Handler)' on a null object reference, null)
E/flutter (10645): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:572)
E/flutter (10645): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:161)
E/flutter (10645): <asynchronous suspension>
E/flutter (10645): #2      PictureController.takePicture (package:camerawesome/picture_controller.dart:6)
E/flutter (10645): <asynchronous suspension>
E/flutter (10645): #3      _MyAppState._buildBottomBar.<anonymous closure> (package:camerawesome_example/main.dart:326)
E/flutter (10645): <asynchronous suspension>
E/flutter (10645):
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 0
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 1
E/MethodChannel#camerawesome(10645): Failed to handle method call
E/MethodChannel#camerawesome(10645): java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.ImageReader.setOnImageAvailableListener(android.media.ImageReader$OnImageAvailableListener, android.os.Handler)' on a null object reference
E/MethodChannel#camerawesome(10645): 	at com.apparence.camerawesome.CameraPicture.takePicture(CameraPicture.java:97)
E/MethodChannel#camerawesome(10645): 	at com.apparence.camerawesome.CamerawesomePlugin._handleTakePhoto(CamerawesomePlugin.java:341)
E/MethodChannel#camerawesome(10645): 	at com.apparence.camerawesome.CamerawesomePlugin.onMethodCall(CamerawesomePlugin.java:136)
E/MethodChannel#camerawesome(10645): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:230)
E/MethodChannel#camerawesome(10645): 	at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/MethodChannel#camerawesome(10645): 	at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
E/MethodChannel#camerawesome(10645): 	at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#camerawesome(10645): 	at android.os.MessageQueue.next(MessageQueue.java:326)
E/MethodChannel#camerawesome(10645): 	at android.os.Looper.loop(Looper.java:181)
E/MethodChannel#camerawesome(10645): 	at android.app.ActivityThread.main(ActivityThread.java:7050)
E/MethodChannel#camerawesome(10645): 	at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#camerawesome(10645): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
E/MethodChannel#camerawesome(10645): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
E/flutter (10645): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: PlatformException(error, Attempt to invoke virtual method 'void android.media.ImageReader.setOnImageAvailableListener(android.media.ImageReader$OnImageAvailableListener, android.os.Handler)' on a null object reference, null)
E/flutter (10645): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:572)
E/flutter (10645): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:161)
E/flutter (10645): <asynchronous suspension>
E/flutter (10645): #2      PictureController.takePicture (package:camerawesome/picture_controller.dart:6)
E/flutter (10645): <asynchronous suspension>
E/flutter (10645): #3      _MyAppState._buildBottomBar.<anonymous closure> (package:camerawesome_example/main.dart:326)
E/flutter (10645): <asynchronous suspension>
E/flutter (10645):
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 0
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 1
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 0
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 1
E/MethodChannel#camerawesome(10645): Failed to handle method call
E/MethodChannel#camerawesome(10645): java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.ImageReader.setOnImageAvailableListener(android.media.ImageReader$OnImageAvailableListener, android.os.Handler)' on a null object reference
E/MethodChannel#camerawesome(10645): 	at com.apparence.camerawesome.CameraPicture.takePicture(CameraPicture.java:97)
E/MethodChannel#camerawesome(10645): 	at com.apparence.camerawesome.CamerawesomePlugin._handleTakePhoto(CamerawesomePlugin.java:341)
E/MethodChannel#camerawesome(10645): 	at com.apparence.camerawesome.CamerawesomePlugin.onMethodCall(CamerawesomePlugin.java:136)
E/MethodChannel#camerawesome(10645): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:230)
E/MethodChannel#camerawesome(10645): 	at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/MethodChannel#camerawesome(10645): 	at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
E/MethodChannel#camerawesome(10645): 	at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#camerawesome(10645): 	at android.os.MessageQueue.next(MessageQueue.java:326)
E/MethodChannel#camerawesome(10645): 	at android.os.Looper.loop(Looper.java:181)
E/MethodChannel#camerawesome(10645): 	at android.app.ActivityThread.main(ActivityThread.java:7050)
E/MethodChannel#camerawesome(10645): 	at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#camerawesome(10645): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
E/MethodChannel#camerawesome(10645): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
E/flutter (10645): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: PlatformException(error, Attempt to invoke virtual method 'void android.media.ImageReader.setOnImageAvailableListener(android.media.ImageReader$OnImageAvailableListener, android.os.Handler)' on a null object reference, null)
E/flutter (10645): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:572)
E/flutter (10645): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:161)
E/flutter (10645): <asynchronous suspension>
E/flutter (10645): #2      PictureController.takePicture (package:camerawesome/picture_controller.dart:6)
E/flutter (10645): <asynchronous suspension>
E/flutter (10645): #3      _MyAppState._buildBottomBar.<anonymous closure> (package:camerawesome_example/main.dart:326)
E/flutter (10645): <asynchronous suspension>
E/flutter (10645):
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 0
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 1
E/MethodChannel#camerawesome(10645): Failed to handle method call
E/MethodChannel#camerawesome(10645): java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.ImageReader.setOnImageAvailableListener(android.media.ImageReader$OnImageAvailableListener, android.os.Handler)' on a null object reference
E/MethodChannel#camerawesome(10645): 	at com.apparence.camerawesome.CameraPicture.takePicture(CameraPicture.java:97)
E/MethodChannel#camerawesome(10645): 	at com.apparence.camerawesome.CamerawesomePlugin._handleTakePhoto(CamerawesomePlugin.java:341)
E/MethodChannel#camerawesome(10645): 	at com.apparence.camerawesome.CamerawesomePlugin.onMethodCall(CamerawesomePlugin.java:136)
E/MethodChannel#camerawesome(10645): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:230)
E/MethodChannel#camerawesome(10645): 	at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/MethodChannel#camerawesome(10645): 	at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
E/MethodChannel#camerawesome(10645): 	at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#camerawesome(10645): 	at android.os.MessageQueue.next(MessageQueue.java:326)
E/MethodChannel#camerawesome(10645): 	at android.os.Looper.loop(Looper.java:181)
E/MethodChannel#camerawesome(10645): 	at android.app.ActivityThread.main(ActivityThread.java:7050)
E/MethodChannel#camerawesome(10645): 	at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#camerawesome(10645): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
E/MethodChannel#camerawesome(10645): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
E/flutter (10645): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: PlatformException(error, Attempt to invoke virtual method 'void android.media.ImageReader.setOnImageAvailableListener(android.media.ImageReader$OnImageAvailableListener, android.os.Handler)' on a null object reference, null)
E/flutter (10645): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:572)
E/flutter (10645): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:161)
E/flutter (10645): <asynchronous suspension>
E/flutter (10645): #2      PictureController.takePicture (package:camerawesome/picture_controller.dart:6)
E/flutter (10645): <asynchronous suspension>
E/flutter (10645): #3      _MyAppState._buildBottomBar.<anonymous closure> (package:camerawesome_example/main.dart:326)
E/flutter (10645): <asynchronous suspension>
E/flutter (10645):
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 0
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 1
E/MethodChannel#camerawesome(10645): Failed to handle method call
E/MethodChannel#camerawesome(10645): java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.ImageReader.setOnImageAvailableListener(android.media.ImageReader$OnImageAvailableListener, android.os.Handler)' on a null object reference
E/MethodChannel#camerawesome(10645): 	at com.apparence.camerawesome.CameraPicture.takePicture(CameraPicture.java:97)
E/MethodChannel#camerawesome(10645): 	at com.apparence.camerawesome.CamerawesomePlugin._handleTakePhoto(CamerawesomePlugin.java:341)
E/MethodChannel#camerawesome(10645): 	at com.apparence.camerawesome.CamerawesomePlugin.onMethodCall(CamerawesomePlugin.java:136)
E/MethodChannel#camerawesome(10645): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:230)
E/MethodChannel#camerawesome(10645): 	at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/MethodChannel#camerawesome(10645): 	at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
E/MethodChannel#camerawesome(10645): 	at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#camerawesome(10645): 	at android.os.MessageQueue.next(MessageQueue.java:326)
E/MethodChannel#camerawesome(10645): 	at android.os.Looper.loop(Looper.java:181)
E/MethodChannel#camerawesome(10645): 	at android.app.ActivityThread.main(ActivityThread.java:7050)
E/MethodChannel#camerawesome(10645): 	at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#camerawesome(10645): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
E/MethodChannel#camerawesome(10645): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
E/flutter (10645): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: PlatformException(error, Attempt to invoke virtual method 'void android.media.ImageReader.setOnImageAvailableListener(android.media.ImageReader$OnImageAvailableListener, android.os.Handler)' on a null object reference, null)
E/flutter (10645): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:572)
E/flutter (10645): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:161)
E/flutter (10645): <asynchronous suspension>
E/flutter (10645): #2      PictureController.takePicture (package:camerawesome/picture_controller.dart:6)
E/flutter (10645): <asynchronous suspension>
E/flutter (10645): #3      _MyAppState._buildBottomBar.<anonymous closure> (package:camerawesome_example/main.dart:326)
E/flutter (10645): <asynchronous suspension>
E/flutter (10645):
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 0
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 1
E/MethodChannel#camerawesome(10645): Failed to handle method call
E/MethodChannel#camerawesome(10645): java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.ImageReader.setOnImageAvailableListener(android.media.ImageReader$OnImageAvailableListener, android.os.Handler)' on a null object reference
E/MethodChannel#camerawesome(10645): 	at com.apparence.camerawesome.CameraPicture.takePicture(CameraPicture.java:97)
E/MethodChannel#camerawesome(10645): 	at com.apparence.camerawesome.CamerawesomePlugin._handleTakePhoto(CamerawesomePlugin.java:341)
E/MethodChannel#camerawesome(10645): 	at com.apparence.camerawesome.CamerawesomePlugin.onMethodCall(CamerawesomePlugin.java:136)
E/MethodChannel#camerawesome(10645): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:230)
E/MethodChannel#camerawesome(10645): 	at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/MethodChannel#camerawesome(10645): 	at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
E/MethodChannel#camerawesome(10645): 	at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#camerawesome(10645): 	at android.os.MessageQueue.next(MessageQueue.java:326)
E/MethodChannel#camerawesome(10645): 	at android.os.Looper.loop(Looper.java:181)
E/MethodChannel#camerawesome(10645): 	at android.app.ActivityThread.main(ActivityThread.java:7050)
E/MethodChannel#camerawesome(10645): 	at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#camerawesome(10645): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
E/MethodChannel#camerawesome(10645): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
E/flutter (10645): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: PlatformException(error, Attempt to invoke virtual method 'void android.media.ImageReader.setOnImageAvailableListener(android.media.ImageReader$OnImageAvailableListener, android.os.Handler)' on a null object reference, null)
E/flutter (10645): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:572)
E/flutter (10645): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:161)
E/flutter (10645): <asynchronous suspension>
E/flutter (10645): #2      PictureController.takePicture (package:camerawesome/picture_controller.dart:6)
E/flutter (10645): <asynchronous suspension>
E/flutter (10645): #3      _MyAppState._buildBottomBar.<anonymous closure> (package:camerawesome_example/main.dart:326)
E/flutter (10645): <asynchronous suspension>
E/flutter (10645):
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 0
D/ViewRootImpl@58a97b3[MainActivity](10645): ViewPostIme pointer 1
E/MethodChannel#camerawesome(10645): Failed to handle method call
E/MethodChannel#camerawesome(10645): java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.ImageReader.setOnImageAvailableListener(android.media.ImageReader$OnImageAvailableListener, android.os.Handler)' on a null object reference
E/MethodChannel#camerawesome(10645): 	at com.apparence.camerawesome.CameraPicture.takePicture(CameraPicture.java:97)
E/MethodChannel#camerawesome(10645): 	at com.apparence.camerawesome.CamerawesomePlugin._handleTakePhoto(CamerawesomePlugin.java:341)
E/MethodChannel#camerawesome(10645): 	at com.apparence.camerawesome.CamerawesomePlugin.onMethodCall(CamerawesomePlugin.java:136)
E/MethodChannel#camerawesome(10645): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:230)
E/MethodChannel#camerawesome(10645): 	at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/MethodChannel#camerawesome(10645): 	at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
E/MethodChannel#camerawesome(10645): 	at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#camerawesome(10645): 	at android.os.MessageQueue.next(MessageQueue.java:326)
E/MethodChannel#camerawesome(10645): 	at android.os.Looper.loop(Looper.java:181)
E/MethodChannel#camerawesome(10645): 	at android.app.ActivityThread.main(ActivityThread.java:7050)
E/MethodChannel#camerawesome(10645): 	at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#camerawesome(10645): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
E/MethodChannel#camerawesome(10645): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
E/flutter (10645): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: PlatformException(error, Attempt to invoke virtual method 'void android.media.ImageReader.setOnImageAvailableListener(android.media.ImageReader$OnImageAvailableListener, android.os.Handler)' on a null object reference, null)
E/flutter (10645): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:572)
E/flutter (10645): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:161)
E/flutter (10645): <asynchronous suspension>
E/flutter (10645): #2      PictureController.takePicture (package:camerawesome/picture_controller.dart:6)
E/flutter (10645): <asynchronous suspension>
E/flutter (10645): #3      _MyAppState._buildBottomBar.<anonymous closure> (package:camerawesome_example/main.dart:326)
E/flutter (10645): <asynchronous suspension>
E/flutter (10645):

Orientation notifier being called after the activity is disposed

Steps to Reproduce

My camera activity has an orientations notifier like from the example:

ValueNotifier<CameraOrientations> _orientationNotifier = ValueNotifier(CameraOrientations.PORTRAIT_UP);

In the dispose() method for the camera screen I dispose all notifiers like so:

  @override
  void dispose() {
    _iconsAnimationController.dispose();
    _orientationNotifier.dispose();
    _sensorNotifier.dispose();
    _zoomNotifier.dispose();
    _flashNotifier.dispose();
    _photoSizeNotifier.dispose();
    super.dispose();
  }
  1. Create a regular flutter screen.
  2. Push the camera screen on top of it.
  3. Pop the camera screen.
  4. When you are returned to the first screen rotate the device and an exception will be logged because something is calling the orientation notifier:
E/flutter (21490): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: A ValueNotifier<CameraOrientations> was used after being disposed.
E/flutter (21490): Once you have called dispose() on a ValueNotifier<CameraOrientations>, it can no longer be used.
E/flutter (21490): #0      ChangeNotifier._debugAssertNotDisposed.<anonymous closure> (package:flutter/src/foundation/change_notifier.dart:117:9)
E/flutter (21490): #1      ChangeNotifier._debugAssertNotDisposed (package:flutter/src/foundation/change_notifier.dart:123:6)
E/flutter (21490): #2      ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart:217:12)
E/flutter (21490): #3      ValueNotifier.value= (package:flutter/src/foundation/change_notifier.dart:292:5)
E/flutter (21490): #4      _TakePictureScreen4State._buildCameraLayer.<anonymous closure> (package:rapid_on_the_go/screens/camera/take_picture_screen4.dart:82:36)
E/flutter (21490): #5      _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter (21490): #6      _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter (21490): #7      _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
E/flutter (21490): #8      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:357:11)
E/flutter (21490): #9      _BufferingStreamSubscription._add (dart:async/stream_impl.dart:285:7)
E/flutter (21490): #10     _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:69:11)
E/flutter (21490): #11     _EventSinkWrapper.add (dart:async/stream_transformers.dart:15:11)
E/flutter (21490): #12     CamerawesomePlugin.getNativeOrientation.<anonymous closure> (package:camerawesome/camerawesome_plugin.dart:101:14)
E/flutter (21490): #13     _HandlerEventSink.add (dart:async/stream_transformers.dart:225:17)
E/flutter (21490): #14     _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:121:24)
E/flutter (21490): #15     _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter (21490): #16     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter (21490): #17     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
E/flutter (21490): #18     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:357:11)
E/flutter (21490): #19     _DelayedData.perform (dart:async/stream_impl.dart:611:14)
E/flutter (21490): #20     _StreamImplEvents.handleNext (dart:async/stream_impl.dart:730:11)
E/flutter (21490): #21     _PendingEvents.schedule.<anonymous closure> (dart:async/stream_impl.dart:687:7)
E/flutter (21490): #22     _rootRun (dart:async/zone.dart:1182:47)
E/flutter (21490): #23     _CustomZone.run (dart:async/zone.dart:1093:19)
E/flutter (21490): #24     _CustomZone.runGuarded (dart:async/zone.dart:997:7)
E/flutter (21490): #25     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1037:23)
E/flutter (21490): #26     _rootRun (dart:async/zone.dart:1190:13)
E/flutter (21490): #27     _CustomZone.run (dart:async/zone.dart:1093:19)
E/flutter (21490): #28     _CustomZone.runGuarded (dart:async/zone.dart:997:7)
E/flutter (21490): #29     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1037:23)
E/flutter (21490): #30     _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
E/flutter (21490): #31     _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)

Expected results

Notifier is not called after the camera screen is closed.

Actual results

Notifier is called after the camera screen is closed.

About your device

Brand Model OS
Sony Xperia X Android 8.0

Small landscape distorted view

Steps to Reproduce

Use plugin

Expected results

fullscreen camera preview

Actual results

thin preview in landscape in a portrait screen which is crushed and weird.

About your device

Samsung s7.

Converting Preview to other Image formats, and a quirk in the example

I want to convert from the List<Uint8List> given in the the camera preview stream to the Image class in the brendan-duncan/image library. I don't have even an inkling of how to begin accomplishing this!

All I know is that:

  • The brendan-duncan Image class has a constructor that takes width/height parameters, as well as a Uint8List.
  • In your example (which, thank you!), you use the last element from the List<Uint8List> to pass to the Image.memory constructor in the widget tree.
  • The stream you expose for the preview seems to actually provide a Uint8List, not a List<Uint8List>, despite your example successfully treating it as the latter? This is the "quirk" I was referring to in the title.

Error while switching the camera

Steps to Reproduce

Click on Switch Camera option in the camera_awesome example project.

Expected results

Front Camera should be shown

Actual results

Screen Freezes with the following error

W/awesome_example(23049): type=1400 audit(0.0:496973): avc: denied { read } for name="u:object_r:camera_prop:s0" dev="tmpfs" ino=16448 scontext=u:r:untrusted_app:s0:c45,c258,c512,c768 tcontext=u:object_r:camera_prop:s0 tclass=file permissive=0
E/libc    (23049): Access denied finding property "camera.aux.packagelist"
W/Binder:23049_9(23049): type=1400 audit(0.0:496976): avc: denied { read } for name="u:object_r:camera_prop:s0" dev="tmpfs" ino=16448 scontext=u:r:untrusted_app:s0:c45,c258,c512,c768 tcontext=u:object_r:camera_prop:s0 tclass=file permissive=0
E/libc    (23049): Access denied finding property "camera.aux.packagelist"
W/Binder:23049_9(23049): type=1400 audit(0.0:496977): avc: denied { read } for name="u:object_r:camera_prop:s0" dev="tmpfs" ino=16448 scontext=u:r:untrusted_app:s0:c45,c258,c512,c768 tcontext=u:object_r:camera_prop:s0 tclass=file permissive=0
E/libc    (23049): Access denied finding property "camera.aux.packagelist"
E/libc    (23049): Access denied finding property "persist.vendor.camera.privapp.list"
W/awesome_example(23049): type=1400 audit(0.0:496978): avc: denied { read } for name="u:object_r:persist_camera_prop:s0" dev="tmpfs" ino=16561 scontext=u:r:untrusted_app:s0:c45,c258,c512,c768 tcontext=u:object_r:persist_camera_prop:s0 tclass=file permissive=0
E/libc    (23049): Access denied finding property "camera.aux.packagelist"
E/libc    (23049): Access denied finding property "camera.aux.packagelist"
E/libc    (23049): Access denied finding property "camera.aux.packagelist"
E/MethodChannel#camerawesome(23049): Failed to handle method call
E/MethodChannel#camerawesome(23049): java.lang.IllegalStateException: Session has been closed; further changes are illegal.
E/MethodChannel#camerawesome(23049): 	at android.hardware.camera2.impl.CameraCaptureSessionImpl.checkNotClosed(CameraCaptureSessionImpl.java:835)
E/MethodChannel#camerawesome(23049): 	at android.hardware.camera2.impl.CameraCaptureSessionImpl.abortCaptures(CameraCaptureSessionImpl.java:416)
E/MethodChannel#camerawesome(23049): 	at com.apparence.camerawesome.CameraSession.addPictureSurface(CameraSession.java:83)
E/MethodChannel#camerawesome(23049): 	at com.apparence.camerawesome.CameraPicture.refresh(CameraPicture.java:74)
E/MethodChannel#camerawesome(23049): 	at com.apparence.camerawesome.CameraStateManager.switchCamera(CameraStateManager.java:87)
E/MethodChannel#camerawesome(23049): 	at com.apparence.camerawesome.CamerawesomePlugin._handleSwitchSensor(CamerawesomePlugin.java:246)
E/MethodChannel#camerawesome(23049): 	at com.apparence.camerawesome.CamerawesomePlugin.onMethodCall(CamerawesomePlugin.java:118)
E/MethodChannel#camerawesome(23049): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
E/MethodChannel#camerawesome(23049): 	at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/MethodChannel#camerawesome(23049): 	at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
E/MethodChannel#camerawesome(23049): 	at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#camerawesome(23049): 	at android.os.MessageQueue.next(MessageQueue.java:336)
E/MethodChannel#camerawesome(23049): 	at android.os.Looper.loop(Looper.java:181)
E/MethodChannel#camerawesome(23049): 	at android.app.ActivityThread.main(ActivityThread.java:7520)
E/MethodChannel#camerawesome(23049): 	at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#camerawesome(23049): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
E/MethodChannel#camerawesome(23049): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
E/CameraCaptureSession(23049): Session 0: Exception while stopping repeating: 
E/CameraCaptureSession(23049): android.hardware.camera2.CameraAccessException: CAMERA_DISCONNECTED (2): checkPidStatus:2087: The camera device has been disconnected
E/CameraCaptureSession(23049): 	at android.hardware.camera2.CameraManager.throwAsPublicException(CameraManager.java:804)
E/CameraCaptureSession(23049): 	at android.hardware.camera2.impl.ICameraDeviceUserWrapper.cancelRequest(ICameraDeviceUserWrapper.java:97)
E/CameraCaptureSession(23049): 	at android.hardware.camera2.impl.CameraDeviceImpl.stopRepeating(CameraDeviceImpl.java:1159)
E/CameraCaptureSession(23049): 	at android.hardware.camera2.impl.CameraCaptureSessionImpl.close(CameraCaptureSessionImpl.java:527)
E/CameraCaptureSession(23049): 	at android.hardware.camera2.impl.CameraCaptureSessionImpl$2.onDisconnected(CameraCaptureSessionImpl.java:738)
E/CameraCaptureSession(23049): 	at android.hardware.camera2.impl.CameraDeviceImpl$7.run(CameraDeviceImpl.java:245)
E/CameraCaptureSession(23049): 	at android.os.Handler.handleCallback(Handler.java:883)
E/CameraCaptureSession(23049): 	at android.os.Handler.dispatchMessage(Handler.java:100)
E/CameraCaptureSession(23049): 	at android.os.Looper.loop(Looper.java:224)
E/CameraCaptureSession(23049): 	at android.app.ActivityThread.main(ActivityThread.java:7520)
E/CameraCaptureSession(23049): 	at java.lang.reflect.Method.invoke(Native Method)
E/CameraCaptureSession(23049): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
E/CameraCaptureSession(23049): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
E/CameraCaptureSession(23049): Caused by: android.os.ServiceSpecificException: checkPidStatus:2087: The camera device has been disconnected (code 4)
E/CameraCaptureSession(23049): 	at android.os.Parcel.createException(Parcel.java:2088)
E/CameraCaptureSession(23049): 	at android.os.Parcel.readException(Parcel.java:2042)
E/CameraCaptureSession(23049): 	at android.os.Parcel.readException(Parcel.java:1990)
E/CameraCaptureSession(23049): 	at android.hardware.camera2.ICameraDeviceUser$Stub$Proxy.cancelRequest(ICameraDeviceUser.java:658)
E/CameraCaptureSession(23049): 	at android.hardware.camera2.impl.ICameraDeviceUserWrapper.cancelRequest(ICameraDeviceUserWrapper.java:95)
E/CameraCaptureSession(23049): 	... 11 more
E/com.apparence.camerawesome.CameraStateManager(23049): close camera session: failed
E/flutter (23049): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: PlatformException(error, Session has been closed; further changes are illegal., null, java.lang.IllegalStateException: Session has been closed; further changes are illegal.
E/flutter (23049): 	at android.hardware.camera2.impl.CameraCaptureSessionImpl.checkNotClosed(CameraCaptureSessionImpl.java:835)
E/flutter (23049): 	at android.hardware.camera2.impl.CameraCaptureSessionImpl.abortCaptures(CameraCaptureSessionImpl.java:416)
E/flutter (23049): 	at com.apparence.camerawesome.CameraSession.addPictureSurface(CameraSession.java:83)
E/flutter (23049): 	at com.apparence.camerawesome.CameraPicture.refresh(CameraPicture.java:74)
E/flutter (23049): 	at com.apparence.camerawesome.CameraStateManager.switchCamera(CameraStateManager.java:87)
E/flutter (23049): 	at com.apparence.camerawesome.CamerawesomePlugin._handleSwitchSensor(CamerawesomePlugin.java:246)
E/flutter (23049): 	at com.apparence.camerawesome.CamerawesomePlugin.onMethodCall(CamerawesomePlugin.java:118)
E/flutter (23049): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
E/flutter (23049): 	at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/flutter (23049): 	at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
E/flutter (23049): 	at android.os.MessageQueue.nativePollOnce(Native Method)
E/flutter (23049): 	at android.os.MessageQueue.next(MessageQueue.java:336)
E/flutter (23049): 	at android.os.Looper.loop(Looper.java:181)
E/flutter (23049): 	at android.app.ActivityThread.main(ActivityThread.java:7520)
E/flutter (23049): 	at java.lang.reflect.Method.invoke(Native Method)
E/flutter (23049): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
E/flutter (23049): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
E/flutter (23049): )
E/flutter (23049): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:582:7)
E/flutter (23049): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:159:18)
E/flutter (23049): <asynchronous suspension>
E/flutter (23049): #2      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:332:12)
E/flutter (23049): #3      CamerawesomePlugin.setSensor (package:camerawesome/camerawesome_plugin.dart:166:16)
E/flutter (23049): #4      _CameraAwesomeState._initSensor.<anonymous closure> (package:camerawesome/camerapreview.dart:219:32)
E/flutter (23049): #5      ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart:226:25)
E/flutter (23049): #6      ValueNotifier.value= (package:flutter/src/foundation/change_notifier.dart:292:5)
E/flutter (23049): #7      _MyAppState._buildTopBar.<anonymous closure> (package:camerawesome_example/main.dart:272:28)
E/flutter (23049): #8      _OptionButtonState.build.<anonymous closure>.<anonymous closure> (package:camerawesome_example/widgets/camera_buttons.dart:118:41)
E/flutter (23049): #9      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:993:19)
E/flutter (23049): #10     _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:1111:38)
E/flutter (23049): #11     GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:183:24)
E/flutter (23049): #12     TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:598:11)
E/flutter (23049): #13     BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:287:5)
E/flutter (23049): #14     BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:222:7)
E/flutter (23049): #15     PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:476:9)
E/flutter (23049): #16     PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:77:12)
E/flutter (23049): #17     PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:122:9)
E/flutter (23049): #18     _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:377:8)
E/flutter (23049): #19     PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:120:18)
E/flutter (23049): #20     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:106:7)
E/flutter (23049): #21     GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:358:19)
E/flutter (23049): #22     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:338:22)
E/flutter (23049): #23     RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:267:11)
E/flutter (23049): #24     GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart

About your device

Brand Model OS
Xiomi Poco F1 Android 10

Flutter Doctor

[โˆš] Flutter (Channel beta, 1.22.0-12.1.pre, on Microsoft Windows [Version 10.0.18362.1082], locale en-IN)
    โ€ข Flutter version 1.22.0-12.1.pre at C:\src\flutter
    โ€ข Framework revision 8b3760638a (12 days ago), 2020-09-15 17:47:13 -0700
    โ€ข Engine revision 4654fc6cf6
    โ€ข Dart version 2.10.0 (build 2.10.0-110.3.beta)


[โˆš] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
    โ€ข Android SDK at C:\Users\I524760\AppData\Local\Android\sdk
    โ€ข Platform android-30, build-tools 30.0.2
    โ€ข Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    โ€ข Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
    โ€ข All Android licenses accepted.

[โˆš] Chrome - develop for the web
    โ€ข Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe

[โˆš] Android Studio (version 4.0)
    โ€ข Android Studio at C:\Program Files\Android\Android Studio
    โ€ข Flutter plugin version 48.1.2
    โ€ข Dart plugin version 193.7547
    โ€ข Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)

[โˆš] VS Code (version 1.49.0)
    โ€ข VS Code at C:\Users\I524760\AppData\Local\Programs\Microsoft VS Code
    โ€ข Flutter extension version 3.14.0

[โˆš] Connected device (4 available)
    โ€ข POCO F1 (mobile) โ€ข 3d8cbea1   โ€ข android-arm64  โ€ข Android 10 (API 29)
    โ€ข Web Server (web) โ€ข web-server โ€ข web-javascript โ€ข Flutter Tools
    โ€ข Chrome (web)     โ€ข chrome     โ€ข web-javascript โ€ข Google Chrome 85.0.4183.121
    โ€ข Edge (web)       โ€ข edge       โ€ข web-javascript โ€ข Microsoft Edge 85.0.564.51

โ€ข No issues found!

Example app freezes when taking a picture on Huawei

Steps to Reproduce

  1. Launch the example app on Huawei Y7p in profile mode
  2. Grant access to camera and media library
  3. Observe the app freeze
  4. After ~1 min a rotated image preview is shown

Expected results

The app shouldn't freeze

Actual results

The app freezes

About your device

Brand Model OS
Huawei Y7p EMUI 10.1.0, Android 10

Log:

Launching lib/main.dart on ART L29 in profile mode...
Note: /Users/dominik/Projects/camera_awesome/android/src/main/java/com/apparence/camerawesome/CameraSession.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
โœ“ Built build/app/outputs/flutter-apk/app-profile.apk (10.0MB).
Installing build/app/outputs/flutter-apk/app.apk...
Connecting to VM Service at ws://127.0.0.1:53180/TwoWH5nNgak=/ws
D/com.apparence.camerawesome.CamerawesomePlugin(19126): _handleCheckPermissions:
I/flutter (19126): granted
I/CameraManagerGlobal(19126): Connecting to camera service
D/SensorManager(19126): 0x701c1102b0 addFd fd=119
I/CameraManager(19126): open camera: 0, package name: com.apparence.camerawesome_example
W/Gralloc3(19126): allocator 3.x is not supported
I/Hwaps   (19126): APS: EventAnalyzed: initAPS: version is 10.1.0.18
D/Hwaps   (19126): Fpsrequest create,type:EXACTLY_IDENTIFY
I/hwaps   (19126): HwAps: JNI_OnLoad
D/Hwaps   (19126): Fpsrequest create,type:EXACTLY_IDENTIFY
D/Hwaps   (19126): Fpsrequest create,type:OPENGL_SETTING
D/Hwaps   (19126): FpsController create
D/Hwaps   (19126): APS: EventAnalyzed: reInitFpsPara :mBaseFps = 60; mMaxFps = 60
W/Settings(19126): Setting device_provisioned has moved from android.provider.Settings.Secure to android.provider.Settings.Global.
V/HiTouch_HiTouchSensor(19126): User setup is finished.
W/HwApsManager(19126): HwApsManagerService, registerCallback, start !
D/Hwaps   (19126): APS: EventAnalyzed: registerCallbackInApsManagerService, mPkgName:com.apparence.camerawesome_example; result = true
D/AwareBitmapCacher(19126): handleInit switch not opened pid=19126
I/flutter (19126): ----------------------------------
I/flutter (19126): TAKE PHOTO CALLED
I/flutter (19126): ==> hastakePhoto : Instance of 'Future<bool>'
I/flutter (19126): ==> path : /data/user/0/com.apparence.camerawesome_example/cache/test/1598455418494.jpg
E/com.apparence.camerawesome.CamerawesomePlugin(19126): onSuccess image error
E/com.apparence.camerawesome.CamerawesomePlugin(19126): java.lang.IllegalStateException: Reply already submitted
E/com.apparence.camerawesome.CamerawesomePlugin(19126): 	at io.flutter.embedding.engine.dart.DartMessenger$Reply.reply(DartMessenger.java:139)
E/com.apparence.camerawesome.CamerawesomePlugin(19126): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.success(MethodChannel.java:235)
E/com.apparence.camerawesome.CamerawesomePlugin(19126): 	at com.apparence.camerawesome.CamerawesomePlugin$1.onSuccess(CamerawesomePlugin.java:401)
E/com.apparence.camerawesome.CamerawesomePlugin(19126): 	at com.apparence.camerawesome.CameraPicture$1.onImageAvailable(CameraPicture.java:103)
E/com.apparence.camerawesome.CamerawesomePlugin(19126): 	at android.media.ImageReader$ListenerHandler.handleMessage(ImageReader.java:798)
E/com.apparence.camerawesome.CamerawesomePlugin(19126): 	at android.os.Handler.dispatchMessage(Handler.java:110)
E/com.apparence.camerawesome.CamerawesomePlugin(19126): 	at android.os.Looper.loop(Looper.java:219)
E/com.apparence.camerawesome.CamerawesomePlugin(19126): 	at android.app.ActivityThread.main(ActivityThread.java:8349)
E/com.apparence.camerawesome.CamerawesomePlugin(19126): 	at java.lang.reflect.Method.invoke(Native Method)
E/com.apparence.camerawesome.CamerawesomePlugin(19126): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
E/com.apparence.camerawesome.CamerawesomePlugin(19126): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)
I/flutter (19126): ==> img.width : 6000
I/flutter (19126): ==> img.height : 8000
I/flutter (19126): ----------------------------------
W/HiTouch_PressGestureDetector(19126): Touch pointer move a lot. The moving distance of X is:46.0, limit is:40The moving distance of Y is:1.0, limit is:40
W/HiTouch_PressGestureDetector(19126): Touch pointer move a lot. The moving distance of X is:48.0, limit is:40The moving distance of Y is:13.0, limit is:40

Value notifier

Proposal

Change value notifier parameters to just the parameters
Describe your new feature
We all manage our states very differently for the value notifer - typed parameters, would be better to just have the parameters on their own rather.

"Fake" zoom

Thanks for that amazing lib! I am struggling though with taking zoomed picture. Shouldn't it be covered in lib? If not, maybe you have solved that issue internally and can provide some snippet? :)

It was tested on Xiaomi Mi 9 and Samsung S9+

Cheers

Steps to Reproduce

use zoom in camera

Expected results

image taken of visible zoomed in area

Actual results

whole picture, as it was on zoomNotifier = 0

MultiCamera : In Android 10 and 11, PictureController takePicture does not return on device with multi camera

Steps to Reproduce

  1. On an android 10 or 11 mobile phone, open the example app, using camerawesome 0.1.2+1, or greater
  2. Open the camera to take a picture, fullscreen, rear camera
  3. Press the button to take a picture

Expected results

The picture is taken and the picture can be viewed on the screen

Actual results

The picture is not taken.

While debugging the code, it waits the following code to return:
await _pictureController.takePicture(filePath);

It was working as it should when the mobile device was using Android 9. But it stopped working when it was updated to Android 10.

About your device

Brand Model OS Working Rear Cameras
Xiamoi Redmi 9 Android 11 NO >1
LG K 61 Android 10 NO 2
LG K 61 Android 9 YES 2
Samsung Galaxy A20 Android 10 YES 1

Front camera photo mirrored

Steps to Reproduce

Picture controller take photo on front camera

Expected results

Save photo with no mirror effect

Actual results

Save photo with mirror effect

About your device

Brand Model OS
Oneplus 7 Pro Android 10

Android 10 - captureStillPicture crashes the app

Steps to Reproduce

  • Open the camera to take a picture with the rear camera
  • Press the shutter button

Expected results

  • The picture is taken and saved to a file

Actual results

  • The app crashes

About your device

Brand Model OS Notes
Samsung Galaxy A21s Android 10 sdk 29 85 times in the last 7 days
Motorola Moto g(9) play Android 10 84 times in the last 7 days
Motorola one Android 10 34 times in the last 7 days
Xiaomi Redmi 7A Android 10 28 times in the last 7 days
Motorola Moto g(7) play Android 10 24 times in the last 7 days
Samsung Galaxy S8 Android 9 sdk28
Xiaomi Mi A3, A2, A1 Android 10
Motorola moto z(2) play Android 9
Google Play Console Log
java.lang.IllegalArgumentException: 
  at android.hardware.camera2.CaptureRequest.convertSurfaceToStreamId (CaptureRequest.java:738)
  at android.hardware.camera2.impl.CameraDeviceImpl.submitCaptureRequest (CameraDeviceImpl.java:1078)
  at android.hardware.camera2.impl.CameraDeviceImpl.capture (CameraDeviceImpl.java:939)
  at android.hardware.camera2.impl.CameraCaptureSessionImpl.capture (CameraCaptureSessionImpl.java:173)
  at com.apparence.camerawesome.CameraPicture.captureStillPicture (CameraPicture.java:149)
  at com.apparence.camerawesome.CameraPicture.a (CameraPicture.java:22)
  at com.apparence.camerawesome.CameraSession.a (CameraSession.java:22)
  at com.apparence.camerawesome.CameraPreview.a (CameraPreview.java:132)
  at com.apparence.camerawesome.CameraPreview.access$000 (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.access$100 (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.createCameraPreviewSession (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.onCancel (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.onConfigureFailed (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.onConfigured (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.onListen (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.onStateChanged (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.processCapture (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.refreshConfiguration (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.setAutoFocus (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.setFlashMode (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.setMainHandler (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.setPreviewSize (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.setZoom (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview.setmCameraCharacteristics (CameraPreview.java)
  at com.apparence.camerawesome.CameraPreview$1.onCaptureProgressed (CameraPreview.java:2)
  at android.hardware.camera2.impl.CameraCaptureSessionImpl$1.lambda$onCaptureProgressed$2$CameraCaptureSessionImpl$1 (CameraCaptureSessionImpl.java:627)
  at android.hardware.camera2.impl.-$$Lambda$CameraCaptureSessionImpl$1$7mSdNTTAoYA0D3ITDxzDJKGykz0.run (Unknown Source:8)
  at android.os.Handler.handleCallback (Handler.java:883)
  at android.os.Handler.dispatchMessage (Handler.java:100)
  at android.os.Looper.loop (Looper.java:221)
  at android.app.ActivityThread.main (ActivityThread.java:7520)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:539)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:950)

[Bug] iOS image stream

Hello,
On an iPhone 7, when I launch the example with the stream part uncommented, I have a crash really fast (may be 1 second) :

* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=1450 MB, unused=0x0)
    frame #0: 0x00000001b70d5948 libsystem_platform.dylib`_platform_memmove + 88
libsystem_platform.dylib`_platform_memmove:
->  0x1b70d5948 <+88>:  stnp   x8, x9, [x3]
    0x1b70d594c <+92>:  stnp   x10, x11, [x3, #0x10]
    0x1b70d5950 <+96>:  add    x3, x3, #0x20             ; =0x20
    0x1b70d5954 <+100>: ldnp   x8, x9, [x1]

If I comment this part :

imageStream.listen((Uint8List imageData) {
              print(
                  "...${DateTime.now()} new image received... ${imageData.lengthInBytes} bytes");
            });

The app doesn't crash but the _buildPreviewStream StreamBuilder's builder is called only one time with AsyncSnapshot<List<Uint8List>>(ConnectionState.waiting, null, null, null) for the snapshot state.

Android app carshes on first run

Steps to Reproduce

Install a app for first time with this dependency and you get the error
Describe how to reproduce the error
Uninstall all versions of your app from the app and reinstall. Error appears at launch and app crashes

Expected results

App to load
What it should be

Actual results

App crashes
What you see
Below error:
E/AndroidRuntime( 7923): java.lang.RuntimeException: Unable to destroy activity {mypackage.myapp/mypackage.myapp.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.apparence.camerawesome.CameraPreview.setMainHandler(android.os.Handler)' on a null object reference
E/AndroidRuntime( 7923): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:5105)
E/AndroidRuntime( 7923): at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:5135)
E/AndroidRuntime( 7923): at android.app.ActivityThread.handleRelaunchActivityInner(ActivityThread.java:5427)
E/AndroidRuntime( 7923): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5357)
E/AndroidRuntime( 7923): at android.app.servertransaction.ActivityRelaunchItem.execute(ActivityRelaunchItem.java:69)
E/AndroidRuntime( 7923): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
E/AndroidRuntime( 7923): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
E/AndroidRuntime( 7923): at android.app.ClientTransactionHandler.executeTransaction(ClientTransactionHandler.java:58)
E/AndroidRuntime( 7923): at android.app.ActivityThread.handleRelaunchActivityLocally(ActivityThread.java:5410)
E/AndroidRuntime( 7923): at android.app.ActivityThread.access$3300(ActivityThread.java:237)
E/AndroidRuntime( 7923): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2076)
E/AndroidRuntime( 7923): at android.os.Handler.dispatchMessage(Handler.java:106)
E/AndroidRuntime( 7923): at android.os.Looper.loop(Looper.java:223)
E/AndroidRuntime( 7923): at android.app.ActivityThread.main(ActivityThread.java:7660)
E/AndroidRuntime( 7923): at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime( 7923): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
E/AndroidRuntime( 7923): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
E/AndroidRuntime( 7923): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.apparence.camerawesome.CameraPreview.setMainHandler(android.os.Handler)' on a null object reference
E/AndroidRuntime( 7923): at com.apparence.camerawesome.CamerawesomePlugin.onDetachedFromActivityForConfigChanges(CamerawesomePlugin.java:521)
E/AndroidRuntime( 7923): at io.flutter.embedding.engine.FlutterEnginePluginRegistry.detachFromActivityForConfigChanges(FlutterEnginePluginRegistry.java:328)
E/AndroidRuntime( 7923): at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onDetach(FlutterActivityAndFragmentDelegate.java:510)
E/AndroidRuntime( 7923): at io.flutter.embedding.android.FlutterActivity.onDestroy(FlutterActivity.java:577)
E/AndroidRuntime( 7923): at android.app.Activity.performDestroy(Activity.java:8245)
E/AndroidRuntime( 7923): at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1344)
E/AndroidRuntime( 7923): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:5090)
E/AndroidRuntime( 7923): ... 16 more

About your device

Android - Pixel 4a, And various emulators. Every Android I have tested has same result

Brand Model OS
Apple iPhone X 13.6.1

Call to VideoController.stopRecordingVideo() never finishes

Steps to Reproduce

  1. Run code at bottom of issue
  2. Try starting then stopping video

Expected results

Video stops

Actual results

Async call to VideoController.stopRecordingVideo() never finishes

About your device

Brand Model OS
Apple iPhone Xs 14.2

Code:

import 'package:flutter/material.dart';
import 'dart:io';
import 'package:camerawesome/camerawesome_plugin.dart';
import 'package:path_provider/path_provider.dart';

class WalkCamera extends StatefulWidget {
  WalkCamera({Key key}) : super(key: key);

  @override
  _WalkCameraState createState() => _WalkCameraState();
}

class _WalkCameraState extends State<WalkCamera> {
  ValueNotifier<Sensors> _sensor = ValueNotifier(Sensors.BACK);
  ValueNotifier<CaptureModes> _captureMode = ValueNotifier(CaptureModes.VIDEO);
  ValueNotifier<Size> _photoSize = ValueNotifier(null);

  VideoController _videoController = new VideoController();

  List<Size> availableSizes;

  bool recording = false;
  String videoPath;

  @override
  void initState() {
    super.initState();
  }

  @override
  void dispose() {
    super.dispose();
  }

  recordVideo() async {
    setState(() {
      recording = true;
    });
    final Directory extDir = await getTemporaryDirectory();
    videoPath = '${extDir.path}/${DateTime.now().millisecondsSinceEpoch}.mp4';

    print('Recording $videoPath');
    await _videoController.recordVideo(videoPath);
  }

  stopVideo() async {
    setState(() {
      recording = false;
    });
    print('Attempting stop...');
    await _videoController.stopRecordingVideo();

    print('Recorded $videoPath');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        backgroundColor: Colors.black,
        body: SafeArea(
            bottom: false,
            child: Column(
              children: [
                Expanded(
                  child: CameraAwesome(
                    selectDefaultSize: (availableSizes) {
                      this.availableSizes = availableSizes;
                      return availableSizes[0];
                    },
                    photoSize: _photoSize,
                    sensor: _sensor,
                    captureMode: _captureMode,
                  ),
                ),
                Container(
                  height: 100.0,
                  child: RaisedButton(
                    child:
                        Text(recording ? 'Stop Recording' : 'Start Recording'),
                    onPressed: () {
                      if (recording)
                        stopVideo();
                      else
                        recordVideo();
                    },
                  ),
                )
              ],
            )));
  }
}

[Crash] Crash while switching fast sensor

Firstly, thanks for your work!

I've been getting a few crashes at random while trying to switch the camera sensor (Back/Front).

Steps to Reproduce

Sometimes the crash occours the first time I open the camera, but the easiest way to reproduce is to rapidly switch sensors (aka: mashing a button that toggles front/back cameras). I've tested it on 2 real devices and it's pretty consistent in one of them (Moto E5).

Stacktrace
java.lang.IllegalStateException: CameraDevice was already closed
        at android.hardware.camera2.impl.CameraDeviceImpl.checkIfCameraClosedOrInError(CameraDeviceImpl.java:2217)
        at android.hardware.camera2.impl.CameraDeviceImpl.submitCaptureRequest(CameraDeviceImpl.java:932)
        at android.hardware.camera2.impl.CameraDeviceImpl.setRepeatingRequest(CameraDeviceImpl.java:979)
        at android.hardware.camera2.impl.CameraCaptureSessionImpl.setRepeatingRequest(CameraCaptureSessionImpl.java:239)
        at com.apparence.camerawesome.CameraPreview.refreshConfiguration(CameraPreview.java:238)
        at com.apparence.camerawesome.CameraPreview.onConfigured(CameraPreview.java:284)
        at com.apparence.camerawesome.CameraSession$1.onConfigured(CameraSession.java:52)
        at java.lang.reflect.Method.invoke(Native Method)
        at android.hardware.camera2.dispatch.InvokeDispatcher.dispatch(InvokeDispatcher.java:39)
        at android.hardware.camera2.dispatch.HandlerDispatcher$1.run(HandlerDispatcher.java:65)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6694)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:769)

Expected results

Switch the camera sensor.

Actual results

App crashes

About your device

Brand Model OS
Motorola Moto E5 8.0.0
Motorola Moto G6 9

adding image Mask

add widget top stack camera, Container, Images.png...

nice plugin its could be better if there is a way to add a custom widget something like this

68747470733a2f2f692e696d6775722e636f6d2f734771644533442e6a7067

unlockFocus crashes the app

Steps to Reproduce

  • Open the camera to take a still picture with the rear camera

Expected results

  • The screen displays the image captured by the mobile phone camera, and it updates the image with autofocus
  • The shutter button is clicked

Actual results

  • The app crashes

About your device

Brand Model OS Notes
Xiaomi Redmi 9A Android 10 sdk 29 98 times in the last 7 days
Xiaomi Redmi 9 Android 10 sdk 29 60 times in the last 7 days
Xiaomi Redmi 6A Android 9 sdk 28 2 times in the last 7 days
Google Play Console Log
java.lang.IllegalStateException: 
  at android.hardware.camera2.impl.CameraCaptureSessionImpl.checkNotClosed (CameraCaptureSessionImpl.java:834)
  at android.hardware.camera2.impl.CameraCaptureSessionImpl.capture (CameraCaptureSessionImpl.java:164)
  at com.apparence.camerawesome.CameraPreview.unlockFocus (CameraPreview.java:31)
  at com.apparence.camerawesome.CameraPreview.a (CameraPreview.java:36)
  at com.apparence.camerawesome.CameraSession.a (CameraSession.java:22)
  at com.apparence.camerawesome.CameraPicture$2.onCaptureCompleted (CameraPicture.java:47)
  at android.hardware.camera2.impl.CameraCaptureSessionImpl$1.lambda$onCaptureCompleted$3$CameraCaptureSessionImpl$1 (CameraCaptureSessionImpl.java:640)
  at android.hardware.camera2.impl.-$$Lambda$CameraCaptureSessionImpl$1$OA1Yz_YgzMO8qcV8esRjyt7ykp4.run (Unknown Source:8)
  at android.os.Handler.handleCallback (Handler.java:914)
  at android.os.Handler.dispatchMessage (Handler.java:100)
  at android.os.Looper.loop (Looper.java:225)
  at android.app.ActivityThread.main (ActivityThread.java:7563)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:539)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:994)

missing GPS location in images exif data

Steps to Reproduce

Hello!
It seems images taken with camera_awesome did not have GPS location in exif data.
You can see exif data in your build in gallery app, somewhere in image details, or in flutter using for example
https://pub.dev/packages/photo_manager

Expected results

location is saved in image exif data

Actual results

No location saved in image exif data

About your device

Brand Model OS
Xiaomi MI9 **
Iphone SE 2nd gen **

Exception MUST_CALL_INIT when opening Camera Awesome widget

Hello, I'm on Android 9, Blackview 6100 (BV610) and the bug still persists, however only PlatformException (PlatformException(MUST_CALL_INIT, , , null)) will appear, the texture error doesn't appear.

Not sure if it's the same error as UlanNurmatov, but I'll post it here anyway because this seems similar enough

import 'dart:io';
import 'dart:typed_data';

import 'package:camerawesome/camerapreview.dart';
import 'package:camerawesome/camerawesome_plugin.dart';
import 'package:camerawesome/models/capture_modes.dart';
import 'package:camerawesome/models/flashmodes.dart';
import 'package:camerawesome/models/orientations.dart';
import 'package:camerawesome/models/sensors.dart';
import 'package:camerawesome/picture_controller.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:path_provider/path_provider.dart';
import 'package:image/image.dart' as image;

class FRCameraScreen extends StatefulWidget {
  @override
  _FRCameraScreenState createState() => _FRCameraScreenState();
}

class _FRCameraScreenState extends State<FRCameraScreen> {
  String _lastPhotoPath;
  ValueNotifier<CameraFlashes> _switchFlash = ValueNotifier(CameraFlashes.NONE);
  ValueNotifier<Sensors> _sensor = ValueNotifier(Sensors.BACK);
  ValueNotifier<CaptureModes> _captureMode = ValueNotifier(CaptureModes.PHOTO);
  ValueNotifier<Size> _photoSize = ValueNotifier(null);
  ValueNotifier<bool> _enableAudio = ValueNotifier(true);
  String imgName;
  int number = 0;

  Stream<Uint8List> previewStream;

  PictureController _pictureController = new PictureController();

  _takePhoto() async {
    final Directory extDir = await getExternalStorageDirectory();
    final testDir =
        await Directory('${extDir.path}/test').create(recursive: true);
    final String filePath = imgName != null
        ? '${testDir.path}/${DateTime.now().millisecondsSinceEpoch}.jpg'
        : '${testDir.path}/photo_test.jpg';
    await _pictureController.takePicture(filePath);
    // lets just make our phone vibrate
    HapticFeedback.mediumImpact();
    _lastPhotoPath = filePath;
    setState(() {});

    print("----------------------------------");
    print("TAKE PHOTO CALLED");
    final file = File(filePath);
    print("==> hastakePhoto : ${file.exists()} | path : $filePath");
    final img = image.decodeImage(file.readAsBytesSync());
    print("==> img.width : ${img.width} | img.height : ${img.height}");
    print("----------------------------------");

    setState(() {});
  }

  _onPermissionsResult(bool granted) {
    if (!granted) {
      print("Not Granted");
    } else {
      print("Granted");
    }
  }

  Widget _buildPreviewStream() {
    if (previewStream == null) return Container();
    return Positioned(
      left: 32,
      bottom: 120,
      child: StreamBuilder(
        stream: previewStream,
        builder: (context, snapshot) {
          if (!snapshot.hasData && snapshot.data.isNotEmpty) return Container();
          List<Uint8List> data = snapshot.data;
          print(
              "...${DateTime.now()} new image received... ${data.last.lengthInBytes} bytes");
          return Image.memory(
            data.last,
            width: 120,
          );
        },
      ),
    );
  }

  @override
  void dispose() {
    super.dispose();
  }

  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    double width = MediaQuery.of(context).size.width;
    double height = MediaQuery.of(context).size.height;
    return CameraAwesome(
      testMode: true,
      onPermissionsResult: _onPermissionsResult,
      selectDefaultSize: (List<Size> availableSizes) => Size(640, 480),
      onCameraStarted: () {},
      onOrientationChanged: (CameraOrientations newOrientation) {},
      sensor: _sensor,
      switchFlashMode: _switchFlash,
      captureMode: _captureMode,
      orientation: DeviceOrientation.portraitUp,
      fitted: true,
      enableAudio: _enableAudio,
      photoSize: _photoSize,
    );
  }
}

No error seems to show in my console, the error only appears and once I press Continue, the camera is working and I can move on.
Also, this error only happens when I fully stop the app, the error doesn't appear anymore when I hot restart, if that's any useful information.

Hope this helps! (somehow)

edited: to format use this syntax ```dart

About your device

Brand Model OS
BlackView BV6100 Android 9

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.