Android 如何将条形码扫描小部件作为其他小部件的子部件使用?

Android 如何将条形码扫描小部件作为其他小部件的子部件使用?,android,flutter,barcode,barcode-scanner,Android,Flutter,Barcode,Barcode Scanner,当我调用scan method时,我正在我的flift应用程序中使用barcode\u scan小部件。这个小部件占据了显示摄像头的整个屏幕,我想在另一个小部件中显示camera view。您可以使用软件包或 它们都在颤振中使用平台视图 最后一个\u qr\u扫描仪的完整示例代码 import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:last_qr_sca

当我调用scan method时,我正在我的flift应用程序中使用
barcode\u scan
小部件。这个小部件占据了显示摄像头的整个屏幕,我想在另一个小部件中显示
camera view

您可以使用软件包或
它们都在颤振中使用平台视图

最后一个\u qr\u扫描仪的完整示例代码

import 'package:flutter/material.dart';

import 'package:flutter/services.dart';
import 'package:last_qr_scanner/last_qr_scanner.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  const MyApp({
    Key key,
  }) : super(key: key);
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final GlobalKey qrKey = GlobalKey(debugLabel: 'QR');
  var qrText = ""; 
  var controller;

  @override
  void initState() {
    super.initState();
  }

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

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new Scaffold(
        appBar: new AppBar(
          title: new Text('Barcode Scanner Example'),
        ),
        body: Column(
          children: <Widget>[
            Expanded(
              child: LastQrScannerPreview(
                key: qrKey,
                onQRViewCreated: _onQRViewCreated,
              ),
              flex: 4,
            ),
            Expanded(
              child: Text("This is the result of scan: $qrText"),
              flex: 1,
            ),
            Expanded(
              child: RaisedButton(
                onPressed: () {
                  this.controller.toggleTorch();                  
                },
                child: Text("Toggle Torch"),
              ),
              flex: 1,
            )
          ],
        ),
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
导入“包:flifter/services.dart”;
导入“package:last_qr_scanner/last_qr_scanner.dart”;
void main()=>runApp(MyApp());
类MyApp扩展了StatefulWidget{
常量MyApp({
关键点,
}):super(key:key);
@凌驾
_MyAppState createState()=>\u MyAppState();
}
类MyAppState扩展了状态{
最终GlobalKey qrKey=GlobalKey(调试标签:“QR”);
var qrText=“”;
无功控制器;
@凌驾
void initState(){
super.initState();
}
void _onQRViewCreated(QRViewController){
this.controller=控制器;
最终通道=controller.channel;
controller.init(qrKey);
channel.setMethodCallHandler((MethodCall调用)异步{
开关(调用方法){
案例“OnRecognitizeQR”:
动态参数=call.arguments;
设置状态(){
qrText=arguments.toString();
});
}
});
}
@凌驾
小部件构建(构建上下文){
返回新材料PP(
家:新脚手架(
appBar:新的appBar(
标题:新文本(“条形码扫描仪示例”),
),
正文:专栏(
儿童:[
扩大(
子:LastQrScannerPreview(
钥匙:qrKey,
onQRViewCreated:_onQRViewCreated,
),
弹性:4,
),
扩大(
child:Text(“这是扫描的结果:$qrText”),
弹性:1,
),
扩大(
孩子:升起按钮(
已按下:(){
this.controller.toggleTorch();
},
子项:文本(“切换火炬”),
),
弹性:1,
)
],
),
),
);
}
}

您的相机视图必须是一个颤振小部件,才能嵌入到另一个小部件中

您可以使用此软件包在颤振纹理上输出相机预览,并使用Mobile Vision API检测二维码和条形码: