qr_code_scanner在第一次正常工作后,再次打开黑屏,偶尔过好几秒才能正常工作。
解决方法:在_onQRViewCreated添加controller.resumeCamera();激活一下。
官方使用
import 'dart:convert';
import 'dart:io';
import 'package:bot_toast/bot_toast.dart';
import 'package:canteenpurchase/views/order/order_details.dart';
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:qr_code_scanner/qr_code_scanner.dart';
import '../layout/CustomAppBar.dart';
class QrcodeScan extends StatefulWidget {
_QrcodeScanState createState() => _QrcodeScanState();
}
class _QrcodeScanState extends State<QrcodeScan> {
final GlobalKey qrKey = GlobalKey(debugLabel: 'QR');
Barcode result;
QRViewController controller;
bool _success = false;
/// 动态申请权限
/// 授予权限返回true, 否则返回false
static Future<bool> requestLocationPermission() async {
//获取当前的权限
var status = await Permission.camera.status;
if (status == PermissionStatus.granted) {
//已经授权
return true;
} else {
//未授权则发起一次申请
status = await Permission.camera.request();
if (status == PermissionStatus.granted) {
return true;
} else {
return false;
}
}
}
void initState() {
super.initState();
initPermission();
}
void initPermission() {
requestLocationPermission().then((rel) {
if (!rel) {
BotToast.showText(text: '权限申请失败');
}
});
}
// In order to get hot reload to work we need to pause the camera if the platform
// is android, or resume the camera if the platform is iOS.
void reassemble() {
super.reassemble();
if (Platform.isAndroid) {
controller.pauseCamera();
} else if (Platform.isIOS) {
controller.resumeCamera();
}
}
void _onQRViewCreated(QRViewController controller) {
//激活相机,否则有时候会黑屏
controller.resumeCamera();
setState(() {
this.controller = controller;
});
controller.scannedDataStream.listen((scanData) {
setState(() {
result = scanData;
print(result.code);
});
});
}
void dispose() {
controller?.dispose();
super.dispose();
}
Widget build(BuildContext context) {
return Scaffold(
appBar: CustomAppBar(
title: '二维码扫描',
),
body: Column(
children: <Widget>[
Expanded(
flex: 5,
child: QRView(
key: qrKey,
onQRViewCreated: _onQRViewCreated,
),
),
],
),
);
}
}