这是二维码组件的进阶实践:权限、闪光灯、扫码频率控制。
0. 依赖
dependencies:
qr_code_scanner: ^1.0.1
permission_handler: ^10.2.0
1. 权限处理
Future<bool> ensureCameraPermission() async {
var status = await Permission.camera.status;
if (status.isDenied) status = await Permission.camera.request();
return status.isGranted;
}
2. 闪光灯控制
await controller?.toggleFlash();
final isOn = await controller?.getFlashStatus();
3. 扫码节流(防止多次触发)
bool _locked = false;
controller!.scannedDataStream.listen((scanData) {
if (_locked) return;
_locked = true;
controller?.pauseCamera();
// handle result
Future.delayed(const Duration(seconds: 1), () {
_locked = false;
controller?.resumeCamera();
});
});
4. 常见坑点
- 权限拒绝:需引导设置页
- 多次回调:必须加锁