import 'dart:io'; import 'package:flutter/material.dart'; import 'package:qr_code_scanner_plus/qr_code_scanner_plus.dart'; import '../util/router_util.dart'; class QRScanner extends StatefulWidget { @override State createState() { return _QRScanner(); } static Future show(BuildContext context) async { return await RouterUtil.push(context, MaterialPageRoute(builder: (context) { return QRScanner(); })); } } class _QRScanner extends State { final GlobalKey qrKey = GlobalKey(debugLabel: 'QR'); Barcode? result; QRViewController? controller; // 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(); } else if (Platform.isIOS) { controller!.resumeCamera(); } } @override Widget build(BuildContext context) { return Scaffold( body: QRView( key: qrKey, onQRViewCreated: _onQRViewCreated, ), ); } bool scanComplete = false; void _onQRViewCreated(QRViewController controller) { this.controller = controller; controller.scannedDataStream.listen((scanData) { if (!scanComplete) { scanComplete = true; RouterUtil.back(context, scanData.code); } }); } @override void dispose() { controller?.dispose(); super.dispose(); } }