当我从 qr_code_scanner 包中打开 QRView 小部件时出现平台异常

Ale*_*scu 6 android qr-code dart flutter flutter-dependencies

我已经从包中复制了示例代码: https: //pub.dev/packages/qr_code_scanner

\n

这是我的二维码扫描仪的样子:

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

当我使用 navigator.push 转到 /QrReader 路径打开此屏幕时,QRView 为黑色,并且出现错误:

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

我应该做什么才能让它发挥作用?在一切正常之前,我将项目更新到最新版本的 flutter,现在出现此错误。

\n

小智 1

无论如何,假设这段代码应该可以正常工作,就像包示例中给出的那样

您可以返回到以前的flutter版本

在Flutter安装目录下执行

git checkout v1.2.2   (the version you wanted)
Run Code Online (Sandbox Code Playgroud)

现在运行

flutter doctor
Run Code Online (Sandbox Code Playgroud)

或者您可以使用新命令从一个版本转到另一个版本

flutter downgrade-> 转到上一个

flutter upgrade-> 更新到新的