ricnaaru / adv_camera

Advanced Camera for Flutter
BSD 3-Clause "New" or "Revised" License
54 stars 35 forks source link

adv_camera crashes on first open in IOS #14

Closed alecsam closed 4 years ago

alecsam commented 4 years ago

On iOS, when I open for the first time the camera I get this error: PlatformException(create_failed, can't create a view on a headless engine, null)

Complete error:

StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:569:7)
MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:321:33)
PlatformViewsService.initUiKitView (package:flutter/src/services/platform_views.dart:168:41)
_UiKitViewState._createNewUiKitView (package:flutter/src/widgets/platform_view.dart:621:71)
_UiKitViewState._initializeOnce (package:flutter/src/widgets/platform_view.dart:571:5)
_UiKitViewState.didChangeDependencies (package:flutter/src/widgets/platform_view.dart:581:5)
StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4376:12)
ComponentElement.mount (package:flutter/src/widgets/framework.dart:4201:5)
Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5445:14)
Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5445:14)
Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
_LayoutBuilderElement._layout. (package:flutter/src/widgets/layout_builder.dart:115:18)
BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2412:19)
_LayoutBuilderElement._layout (package:flutter/src/widgets/layout_builder.dart:95:11)
RenderObject.invokeLayoutCallback. (package:flutter/src/rendering/object.dart:1823:58)
PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:875:15)
RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:1823:13)
RenderConstrainedLayoutBuilder.layoutAndBuildChild (package:flutter/src/widgets/layout_builder.dart:173:5)
_RenderLayoutBuilder.performLayout (package:flutter/src/widgets/layout_builder.dart:240:5)
RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
RenderConstrainedBox.performLayout (package:flutter/src/rendering/proxy_box.dart:259:13)
RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
RenderFlex.performLayout (package:flutter/src/rendering/flex.dart:744:15)
RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
RenderIntrinsicHeight.performLayout (package:flutter/src/rendering/proxy_box.dart:707:13)
RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
RenderConstrainedBox.performLayout (package:flutter/src/rendering/proxy_box.dart:259:13)
RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
_RenderLayoutBuilder.performLayout (package:flutter/src/widgets/layout_builder.dart:242:13)
RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
RenderPadding.performLayout (package:flutter/src/rendering/shifted_box.dart:206:11)
RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:163:11)
_ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:477:7)
MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:232:7)
RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:391:14)
RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
_RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1232:11)
RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
RenderStack.performLayout (package:flutter/src/rendering/stack.dart:505:15)
RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:13)
RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:3166:14)
RenderObject.layout (package:flutter/src/rendering/object.dart:1724:7)
RenderStack.performLayout (package:flutter/src/rendering/stack.dart:505:15)
RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1584:7)
PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:844:18)
RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:344:19)
WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:774:13)
RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:283:5)
SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1102:15)
SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1041:9)
SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:957:5)
_rootRun (dart:async/zone.dart:1126:13)
_CustomZone.run (dart:async/zone.dart:1023:19)
_CustomZone.runGuarded (dart:async/zone.dart:925:7)
_invoke (dart:ui/hooks.dart:259:10)
_drawFrame (dart:ui/hooks.dart:217:3)

If I open the camera again, everything works fine.

flutter doctor -v
[✓] Flutter (Channel stable, v1.12.13+hotfix.8, on Mac OS X 10.15.3 19D76, locale en-RO)
    • Flutter version 1.12.13+hotfix.8 at [...]
    • Framework revision 0b8abb4724 (3 weeks ago), 2020-02-11 11:44:36 -0800
    • Engine revision e1e6ced81d
    • Dart version 2.7.0

[✗] Android toolchain - develop for Android devices
    ✗ Unable to locate Android SDK.
      Install Android Studio from: https://developer.android.com/studio/index.html
      On first launch it will assist you in installing the Android SDK components.
      (or visit https://flutter.dev/setup/#android-setup for detailed instructions).
      If the Android SDK has been installed to a custom location, set ANDROID_HOME to that location.
      You may also want to add it to your PATH environment variable.

[✓] Xcode - develop for iOS and macOS (Xcode 11.3.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 11.3.1, Build version 11C504
    • CocoaPods version 1.8.4

[!] Android Studio (not installed)
    • Android Studio not found; download from https://developer.android.com/studio/index.html
      (or visit https://flutter.dev/setup/#android-setup for detailed instructions).

See also: https://github.com/flutter/flutter/issues/36310

ricnaaru commented 4 years ago

this happens when the app is requesting for any permission in ios, and the flutter NativeView try to render itself. so as long as the permission dialog hanging there, i think it's considered to be "headless".

i think, what you can do to fix this is basically wait until the permission request is finished, and then try to render / call the build NativeView (whatever it is, could be WebView or GoogleMap). For what i know, ios permission request will only prompt only when the service is called (start motion activity update / get current location from GPS / Notification received)

although this case is relatively hard to reproduce, and considered to be rare occasion (need to have ios permission request script [calling the GPS location / Notification received thus will prompt notification permission request / start motion activity update], and render the NativeView at the same time)