juliuscanute / qr_code_scanner

QR Code Scanner for Flutter
BSD 2-Clause "Simplified" License
999 stars 759 forks source link

Can't stop the camera after getting the result for web platform.[BUG] #645

Open nutfyb opened 1 year ago

nutfyb commented 1 year ago

class _QRScan extends State { Barcode? result; QRViewController? controller; final GlobalKey qrKey = GlobalKey(debugLabel: 'QR');

@override Widget build(BuildContext context) { return Scaffold( body: Stack( children: [ Expanded(flex: 4, child: _buildQrView(context)), Expanded( flex: 1, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.end, children: [ MaterialBtn.iconButton( context, onPressed: () { AppRoutes.redeemcode.go(context); }, icon: const Icon(Icons.arrow_back_ios_new), ), Container( margin: const EdgeInsets.all(8), child: ElevatedButton( onPressed: () async { await controller?.toggleFlash(); setState(() {}); }, child: FutureBuilder( future: controller?.getFlashStatus(), builder: (context, snapshot) { return Text('Flash: ${snapshot.data}'); }, )), ), ], ), ), Positioned( bottom: 0, child: Row( mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.center, children: [ if (result != null) Text( 'Barcode Type: ${describeEnum(result!.format)} Data: ${result!.code}') else const Text('Scan a code'), ], )) ], ), ); }

Widget _buildQrView(BuildContext context) { var scanArea = (MediaQuery.of(context).size.width < 400 || MediaQuery.of(context).size.height < 400) ? 150.0 : 300.0; return QRView( key: qrKey, onQRViewCreated: _onQRViewCreated, overlay: QrScannerOverlayShape( borderColor: Colors.red, borderRadius: 10, borderLength: 30, borderWidth: 10, cutOutSize: scanArea), onPermissionSet: (ctrl, p) => _onPermissionSet(context, ctrl, p), ); }

void _onQRViewCreated(QRViewController controller) { setState(() { this.controller = controller; }); controller.scannedDataStream.listen((scanData) { setState(() { result = scanData; controller.pauseCamera(); }); }); }

void _onPermissionSet(BuildContext context, QRViewController ctrl, bool p) { log('${DateTime.now().toIso8601String()}_onPermissionSet $p'); } }

BraveEvidence commented 1 year ago

This will help https://www.youtube.com/watch?v=w-n0jUrUtPI&list=PLQhQEGkwKZUqZC2QAp_u4ZAzqpsCCRvmM&index=10 https://www.youtube.com/watch?v=QpnVENc9dIA&list=PLQhQEGkwKZUqZC2QAp_u4ZAzqpsCCRvmM&index=11