Reputation: 1167
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.
Upvotes: 6
Views: 5315
Reputation: 131
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),
);
}
Upvotes: 3
Reputation: 469
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
Upvotes: 1