抖动中的半屏扫描

时间:2019-09-11 15:43:10

标签: flutter barcode

我正在开发一个用于扫描条形码的应用程序,我想扫描多个条形码,但仍然看到我同时扫描的内容。请问有什么方法可以在颤抖中实现?

1 个答案:

答案 0 :(得分:0)

这只能通过使用嵌入式QR扫描小部件来实现。 这是可用的,但是使用嵌入式本机窗口小部件,这是一种实验功能

看看这个库:https://pub.dev/packages/qr_code_scanner

包含的示例应该可以为您提供帮助。它将相机小部件的屏幕分为4/5,其余部分为1/5。您可以通过以下示例中的flex值来更改此设置。

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:qr_code_scanner/qr_code_scanner.dart';

void main() => runApp(MaterialApp(home: QRViewExample()));

class QRViewExample extends StatefulWidget {
  const QRViewExample({
    Key key,
  }) : super(key: key);

  @override
  State<StatefulWidget> createState() => _QRViewExampleState();
}

class _QRViewExampleState extends State<QRViewExample> {
  final GlobalKey qrKey = GlobalKey(debugLabel: 'QR');
  var qrText = "";
  QRViewController controller;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: <Widget>[
          Expanded(
            child: QRView(
              key: qrKey,
              onQRViewCreated: _onQRViewCreated,
            ),
            flex: 4,
          ),
          Expanded(
            child: Column(children:
              <Widget>[
                Text("This is the result of scan: $qrText"),
                RaisedButton(
                  onPressed: (){
                    if(controller != null){
                      controller.flipCamera();
                    }
                  },
                  child: Text(
                      'Flip',
                      style: TextStyle(fontSize: 20)
                  ),
                )
              ],
            ),
            flex: 1,
          )
        ],
      ),
    );
  }

  void _onQRViewCreated(QRViewController controller) {
    final channel = controller.channel;
    controller.init(qrKey);
    this.controller = controller;
    channel.setMethodCallHandler((MethodCall call) async {
      switch (call.method) {
        case "onRecognizeQR":
          dynamic arguments = call.arguments;
          setState(() {
            qrText = arguments.toString();
          });
      }
    });
  }
}