Platform exception when I open the QRView widget from the qr_code_scanner package

1,315

Solution 1

I had the same issue and fixed it by requesting camera permission before showing the QR scanner. I did this using the following library: https://pub.dev/packages/permission_handler/install

I solved it with a method returning camera permission status and requesting it once if missing:

Future<PermissionStatus> _getCameraPermission() async {
    var status = await Permission.camera.status;
    if (!status.isGranted) {
        final result = await Permission.camera.request();
        return result;
    } else {
      return status;
    }
}

Then I call the method before opening the widget as a dialog

PermissionStatus status = await _getCameraPermission();
if (status.isGranted) {
    showDialog(
        context: context, 
        builder: (context) => QrScanDialog(onResult: onResult),
    );
}

Solution 2

Assuming that this code should work fine as it is given in package example, anyways

You can go back to previous version of flutter

In the Flutter install directory execute

git checkout v1.2.2   (the version you wanted)

Now run

flutter doctor

Or You can just go from a version to another using the new commands

flutter downgrade -> go to the previous

flutter upgrade -> update to the new one

Share:
1,315
Alexandru Stroescu
Author by

Alexandru Stroescu

Updated on December 22, 2022

Comments

  • Alexandru Stroescu
    Alexandru Stroescu over 1 year

    I've copied the example code from the package: https://pub.dev/packages/qr_code_scanner

    This is how my QR code scanner looks like:

    import 'package:flutter/material.dart';
    'package:qr_code_scanner/qr_code_scanner.dart';
    
    class QrReader extends StatefulWidget {
      static final routeName = '/QrReader';
      @override
      _QrReaderState createState() => _QrReaderState();
    }
    
    class _QrReaderState extends State<QrReader> {
      final GlobalKey qrKey = GlobalKey(debugLabel: 'QR');
      var qrText = "";
      QRViewController controller;
    
      @override
      void initState() {
        super.initState();
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Scan the QR code'),
          ),
          body: QRView(
            key: qrKey,
            onQRViewCreated: _onQRViewCreated,
          ),
        );
      }
    
      void _onQRViewCreated(QRViewController controller) {
        this.controller = controller;
        controller.scannedDataStream.listen((scanData) {
          setState(() {
            qrText = scanData;
          });
        });
      }
    
      @override
      void dispose() {
        controller?.dispose();
        super.dispose();
      }
    }
    

    When I open this screen by going to the /QrReader route using navigator.push, the QRView is black and I get the error:

    
    E/flutter (30118): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: PlatformException(error, java.lang.IllegalStateException: Trying to create a platform view of unregistered type: net.touchcapture.qr.flutterqr/qrview
    E/flutter (30118):  at io.flutter.plugin.platform.PlatformViewsController$1.createVirtualDisplayForPlatformView(PlatformViewsController.java:192)
    E/flutter (30118):  at io.flutter.embedding.engine.systemchannels.PlatformViewsChannel$1.create(PlatformViewsChannel.java:104)
    E/flutter (30118):  at io.flutter.embedding.engine.systemchannels.PlatformViewsChannel$1.onMethodCall(PlatformViewsChannel.java:59)
    E/flutter (30118):  at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
    E/flutter (30118):  at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
    E/flutter (30118):  at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
    E/flutter (30118):  at android.os.MessageQueue.nativePollOnce(Native Method)
    E/flutter (30118):  at android.os.MessageQueue.next(MessageQueue.java:335)
    E/flutter (30118):  at android.os.Looper.loop(Looper.java:183)
    E/flutter (30118):  at android.app.ActivityThread.main(ActivityThread.java:7656)
    E/flutter (30118):  at java.lang.reflect.Method.invoke(Native Method)
    E/flutter (30118):  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
    E/flutter (30118):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
    E/flutter (30118): , null, null)
    [38;5;244mE/flutter (30118): #0      StandardMethodCodec.decodeEnvelope[39;49m
     package:flutter/…/services/message_codecs.dart
    [38;5;244mE/flutter (30118): #1      MethodChannel._invokeMethod[39;49m
     package:flutter/…/services/platform_channel.dart
    E/flutter (30118): <asynchronous suspension>
    [38;5;244mE/flutter (30118): #2      MethodChannel.invokeMethod[39;49m
     package:flutter/…/services/platform_channel.dart
    [38;5;244mE/flutter (30118): #3      TextureAndroidViewController._sendCreateMessage[39;49m
     package:flutter/…/services/platform_views.dart
    [38;5;244mE/flutter (30118): #4      AndroidViewController.create[39;49m
     package:flutter/…/services/platform_views.dart
    [38;5;244mE/flutter (30118): #5      TextureAndroidViewController.create[39;49m
     package:flutter/…/services/platform_views.dart
    [38;5;244mE/flutter (30118): #6      TextureAndroidViewController.setSize[39;49m
     package:flutter/…/services/platform_views.dart
    [38;5;244mE/flutter (30118): #7      RenderAndroidView._sizePlatformView[39;49m
     package:flutter/…/rendering/platform_view.dart
    [38;5;244mE/flutter (30118): #8      RenderAndroidView.performResize[39;49m
     package:flutter/…/rendering/platform_view.dart
    [38;5;244mE/flutter (30118): #9      RenderObject.layout[39;49m
     package:flutter/…/rendering/object.dart
    [38;5;244mE/flutter (30118): #10     RenderProxyBoxMixin.performLayout[39;49m
     package:flutter/…/rendering/proxy_box.dart
    [38;5;244mE/flutter (30118): #11     RenderObject.layout[39;49m
     package:flutter/…/rendering/object.dart
    [38;5;244mE/flutter (30118): #12     RenderStack.performLayout[39;49m
     package:flutter/…/rendering/stack.dart
    [38;5;244mE/flutter (30118): #13     RenderObject.layout[39;49m
     package:flutter/…/rendering/object.dart
    [38;5;244mE/flutter (30118): #14     MultiChildLayoutDelegate.layoutChild[39;49m
     package:flutter/…/rendering/custom_layout.dart
    [38;5;244mE/flutter (30118): #15     _ScaffoldLayout.performLayout[39;49m
     package:flutter/…/material/scaffold.dart
    [38;5;244mE/flutter (30118): #16     MultiChildLayoutDelegate._callPerformLayout[39;49m
     package:flutter/…/rendering/custom_layout.dart
    [38;5;244mE/flutter (30118): #17     RenderCustomMultiChildLayoutBox.performLayout[39;49m
     package:flutter/…/rendering/custom_layout.dart
    [38;5;244mE/flutter (30118): #18     RenderObject.layout[39;49m
     package:flutter/…/rendering/object.dart
    [38;5;244mE/flutter (30118): #19     RenderProxyBoxMixin.performLayout[39;49m
     package:flutter/…/rendering/proxy_box.dart
    [38;5;244mE/flutter (30118): #20     RenderObject.layout[39;49m
     package:flutter/…/rendering/object.dart
    [38;5;244mE/flutter (30118): #21     RenderProxyBoxMixin.performLayout[39;49m
     package:flutter/…/rendering/proxy_box.dart
    [38;5;244mE/flutter (30118): #22     _RenderCustomClip.performLayout[39;49m
     package:flutter/…/rendering/proxy_box.dart
    [38;5;244mE/flutter (30118): #23     RenderObject.layout[39;49m
     package:flutter/…/rendering/object.dart
    [38;5;244mE/flutter (30118): #24     RenderProxyBoxMixin.performLayout[39;49m
     package:flutter/…/rendering/proxy_box.dart
    [38;5;244mE/flutter (30118): #25     RenderObject.layout[39;49m
     package:flutter/…/rendering/object.dart
    [38;5;244mE/flutter (30118): #26     RenderProxyBoxMixin.performLayout[39;49m
     package:flutter/…/rendering/proxy_box.dart
    [38;5;244mE/flutter (30118): #27     RenderObject.layout[39;49m
     package:flutter/…/rendering/object.dart
    [38;5;244mE/flutter (30118): #28     RenderProxyBoxMixin.performLayout[39;49m
     package:flutter/…/rendering/proxy_box.dart
    [38;5;244mE/flutter (30118): #29     RenderObject.layout[39;49m
     package:flutter/…/rendering/object.dart
    [38;5;244mE/flutter (30118): #30     RenderProxyBoxMixin.performLayout[39;49m
     package:flutter/…/rendering/proxy_box.dart
    [38;5;244mE/flutter (30118): #31     RenderObject.layout[39;49m
     package:flutter/…/rendering/object.dart
    [38;5;244mE/flutter (30118): #32     RenderProxyBoxMixin.performLayout[39;49m
     package:flutter/…/rendering/proxy_box.dart
    [38;5;244mE/flutter (30118): #33     RenderObject.layout[39;49m
     package:flutter/…/rendering/object.dart
    [38;5;244mE/flutter (30118): #34     RenderProxyBoxMixin.performLayout[39;49m
     package:flutter/…/rendering/proxy_box.dart
    [38;5;244mE/flutter (30118): #35     RenderObject.layout[39;49m
     package:flutter/…/rendering/object.dart
    [38;5;244mE/flutter (30118): #36     RenderProxyBoxMixin.performLayout[39;49m
     package:flutter/…/rendering/proxy_box.dart
    [38;5;244mE/flutter (30118): #37     RenderObject.layout[39;49m
     package:flutter/…/rendering/object.dart
    [38;5;244mE/flutter (30118): #38     RenderOffstage.performLayout[39;49m
     package:flutter/…/rendering/proxy_box.dart
    [38;5;244mE/flutter (30118): #39     RenderObject.layout[39;49m
     package:flutter/…/rendering/object.dart
    [38;5;244mE/flutter (30118): #40     RenderProxyBoxMixin.performLayout[39;49m
     package:flutter/…/rendering/proxy_box.dart
    [38;5;244mE/flutter (30118): #41     RenderObject.layout[39;49m
     package:flutter/…/rendering/object.dart
    [38;5;244mE/flutter (30118): #42     _RenderTheatre.performLayout[39;49m
     package:flutter/…/widgets/overlay.dart
    [38;5;244mE/flutter (30118): #43     RenderObject._layoutWithoutResize[39;49m
     package:flutter/…/rendering/object.dart
    [38;5;244mE/flutter (30118): #44     PipelineOwner.flushLayout[39;49m
     package:flutter/…/rendering/object.dart
    [38;5;244mE/flutter (30118): #45     RendererBinding.drawFrame[39;49m
     package:flutter/…/rendering/binding.dart
    [38;5;244mE/flutter (30118): #46     WidgetsBinding.drawFrame[39;49m
     package:flutter/…/widgets/binding.dart
    [38;5;244mE/flutter (30118): #47     RendererBinding._handlePersistentFrameCallback[39;49m
     package:flutter/…/rendering/binding.dart
    [38;5;244mE/flutter (30118): #48     SchedulerBinding._invokeFrameCallback[39;49m
     package:flutter/…/scheduler/binding.dart
    [38;5;244mE/flutter (30118): #49     SchedulerBinding.handleDrawFrame[39;49m
     package:flutter/…/scheduler/binding.dart
    [38;5;244mE/flutter (30118): #50     SchedulerBinding._handleDrawFrame[39;49m
     package:flutter/…/scheduler/binding.dart
    [38;5;244mE/flutter (30118): #51     _rootRun (dart:async/zone.dart:1190:13)[39;49m
    [38;5;244mE/flutter (30118): #52     _CustomZone.run (dart:async/zone.dart:1093:19)[39;49m
    [38;5;244mE/flutter (30118): #53     _CustomZone.runGuarded (dart:async/zone.dart:997:7)[39;49m
    [38;5;244mE/flutter (30118): #54     _invoke (dart:ui/hooks.dart:251:10)[39;49m
    [38;5;244mE/flutter (30118): #55     _drawFrame (dart:ui/hooks.dart:209:3)[39;49m
    
    

    What should I do to make it work? Before everything was fine, I updated my project to the latest version of flutter and now I get this error.