import 'dart:io'; import 'package:farm_tpf/presentation/custom_widgets/app_bar_widget.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:qr_code_scanner/qr_code_scanner.dart'; class QrCodeScannerScreen extends StatefulWidget { @override State createState() => _QrCodeScannerScreenState(); } class _QrCodeScannerScreenState extends State { // Barcode? result; QRViewController? controller; final GlobalKey qrKey = GlobalKey(debugLabel: 'QR'); // 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. @override void reassemble() { super.reassemble(); if (Platform.isAndroid) { controller?.pauseCamera(); } controller?.resumeCamera(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBarWidget( isBack: true, ), body: Column( children: [ Expanded(flex: 4, child: _buildQrView(context)), ], ), ); } Widget _buildQrView(BuildContext context) { // For this example we check how width or tall the device is and change the scanArea and overlay accordingly. var scanArea = (MediaQuery.of(context).size.width < 400 || MediaQuery.of(context).size.height < 400) ? 150.0 : 300.0; // To ensure the Scanner view is properly sizes after rotation // we need to listen for Flutter SizeChanged notification and update controller return QRView( key: qrKey, onQRViewCreated: _onQRViewCreated, overlay: QrScannerOverlayShape(borderColor: Colors.red, borderRadius: 10, borderLength: 30, borderWidth: 10, cutOutSize: scanArea), ); } void _onQRViewCreated(QRViewController controller) { setState(() { this.controller = controller; }); controller.scannedDataStream.listen((scanData) { if (scanData != null) { Get.back(result: scanData); } }); } void _onPermissionSet(BuildContext context, QRViewController ctrl, bool p) { if (!p) { ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text('no Permission')), ); } } @override void dispose() { controller?.dispose(); super.dispose(); } }