diff --git a/example/README.md b/example/README.md index 2ec5a26..d9a96cd 100644 --- a/example/README.md +++ b/example/README.md @@ -22,11 +22,15 @@ Demonstrates how to use the qr_code_scanner plugin. ## Example: ```dart import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; import 'package:qr_code_scanner/qr_code_scanner.dart'; void main() => runApp(MaterialApp(home: QRViewExample())); +const flashOn = 'FLASH ON'; +const flashOff = 'FLASH OFF'; +const frontCamera = 'FRONT CAMERA'; +const backCamera = 'BACK CAMERA'; + class QRViewExample extends StatefulWidget { const QRViewExample({ Key key, @@ -37,60 +41,144 @@ class QRViewExample extends StatefulWidget { } class _QRViewExampleState extends State { - final GlobalKey qrKey = GlobalKey(debugLabel: 'QR'); - var qrText = ""; + var qrText = ''; + var flashState = flashOn; + var cameraState = frontCamera; QRViewController controller; + final GlobalKey qrKey = GlobalKey(debugLabel: 'QR'); + @override Widget build(BuildContext context) { return Scaffold( body: Column( children: [ Expanded( + flex: 4, child: QRView( key: qrKey, onQRViewCreated: _onQRViewCreated, + overlay: QrScannerOverlayShape( + borderColor: Colors.red, + borderRadius: 10, + borderLength: 30, + borderWidth: 10, + cutOutSize: 300, + ), ), - flex: 4, ), Expanded( - child: Column(children: - [ - Text("This is the result of scan: $qrText"), - RaisedButton( - onPressed: (){ - if(controller != null){ - controller.flipCamera(); - } - }, - child: Text( - 'Flip', - style: TextStyle(fontSize: 20) + flex: 1, + child: FittedBox( + fit: BoxFit.contain, + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Text('This is the result of scan: $qrText'), + Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Container( + margin: EdgeInsets.all(8), + child: RaisedButton( + onPressed: () { + if (controller != null) { + controller.toggleFlash(); + if (_isFlashOn(flashState)) { + setState(() { + flashState = flashOff; + }); + } else { + setState(() { + flashState = flashOn; + }); + } + } + }, + child: + Text(flashState, style: TextStyle(fontSize: 20)), + ), + ), + Container( + margin: EdgeInsets.all(8), + child: RaisedButton( + onPressed: () { + if (controller != null) { + controller.flipCamera(); + if (_isBackCamera(cameraState)) { + setState(() { + cameraState = frontCamera; + }); + } else { + setState(() { + cameraState = backCamera; + }); + } + } + }, + child: + Text(cameraState, style: TextStyle(fontSize: 20)), + ), + ) + ], ), - ) - ], + Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Container( + margin: EdgeInsets.all(8), + child: RaisedButton( + onPressed: () { + controller?.pauseCamera(); + }, + child: Text('pause', style: TextStyle(fontSize: 20)), + ), + ), + Container( + margin: EdgeInsets.all(8), + child: RaisedButton( + onPressed: () { + controller?.resumeCamera(); + }, + child: Text('resume', style: TextStyle(fontSize: 20)), + ), + ) + ], + ), + ], + ), ), - flex: 1, ) ], ), ); } + bool _isFlashOn(String current) { + return flashOn == current; + } + + bool _isBackCamera(String current) { + return backCamera == current; + } + void _onQRViewCreated(QRViewController controller) { - final channel = controller.channel; - controller.init(qrKey); this.controller = controller; - channel.setMethodCallHandler((MethodCall call) async { - switch (call.method) { - case "onRecognizeQR": - dynamic arguments = call.arguments; - setState(() { - qrText = arguments.toString(); - }); - } + controller.scannedDataStream.listen((scanData) { + setState(() { + qrText = scanData; + }); }); } + + @override + void dispose() { + controller.dispose(); + super.dispose(); + } } + ```