The QR Code Scanner package for Appeto SDK.
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 
 
 

142 строки
4.4 KiB

  1. import 'package:flutter/material.dart';
  2. import 'package:qr_code_scanner/qr_code_scanner.dart';
  3. void main() => runApp(MaterialApp(home: QRViewExample()));
  4. const flash_on = "FLASH ON";
  5. const flash_off = "FLASH OFF";
  6. const front_camera = "FRONT CAMERA";
  7. const back_camera = "BACK CAMERA";
  8. class QRViewExample extends StatefulWidget {
  9. const QRViewExample({
  10. Key key,
  11. }) : super(key: key);
  12. @override
  13. State<StatefulWidget> createState() => _QRViewExampleState();
  14. }
  15. class _QRViewExampleState extends State<QRViewExample> {
  16. var qrText = "";
  17. var flashState = flash_on;
  18. var cameraState = front_camera;
  19. QRViewController controller;
  20. @override
  21. Widget build(BuildContext context) {
  22. return Scaffold(
  23. body: Column(
  24. children: <Widget>[
  25. Expanded(
  26. child: QRView(
  27. onQRViewCreated: _onQRViewCreated,
  28. ),
  29. flex: 4,
  30. ),
  31. Expanded(
  32. child: Column(
  33. children: <Widget>[
  34. Text("This is the result of scan: $qrText"),
  35. Row(
  36. mainAxisAlignment: MainAxisAlignment.center,
  37. crossAxisAlignment: CrossAxisAlignment.center,
  38. children: <Widget>[
  39. Container(
  40. margin: EdgeInsets.all(8.0),
  41. child: RaisedButton(
  42. onPressed: () {
  43. if (controller != null) {
  44. controller.toggleFlash();
  45. if (_isFlashOn(flashState))
  46. setState(() {
  47. flashState = flash_off;
  48. });
  49. else
  50. setState(() {
  51. flashState = flash_on;
  52. });
  53. }
  54. },
  55. child: Text(flashState, style: TextStyle(fontSize: 20)),
  56. ),
  57. ),
  58. Container(
  59. margin: EdgeInsets.all(8.0),
  60. child: RaisedButton(
  61. onPressed: () {
  62. if (controller != null) {
  63. controller.flipCamera();
  64. if (_isBackCamera(cameraState))
  65. setState(() {
  66. cameraState = front_camera;
  67. });
  68. else
  69. setState(() {
  70. cameraState = back_camera;
  71. });
  72. }
  73. },
  74. child:
  75. Text(cameraState, style: TextStyle(fontSize: 20)),
  76. ),
  77. )
  78. ],
  79. ),
  80. Row(
  81. mainAxisAlignment: MainAxisAlignment.spaceEvenly,
  82. crossAxisAlignment: CrossAxisAlignment.center,
  83. children: <Widget>[
  84. Container(
  85. margin: EdgeInsets.only(bottom: 8.0),
  86. child: RaisedButton(
  87. onPressed: () {
  88. controller?.pauseCamera();
  89. },
  90. child: Text('pause', style: TextStyle(fontSize: 20)),
  91. ),
  92. ),
  93. Container(
  94. margin: EdgeInsets.only(bottom: 8.0),
  95. child: RaisedButton(
  96. onPressed: () {
  97. controller.resumeCamera();
  98. },
  99. child: Text('resume', style: TextStyle(fontSize: 20)),
  100. ),
  101. )
  102. ],
  103. ),
  104. ],
  105. ),
  106. flex: 1,
  107. )
  108. ],
  109. ),
  110. );
  111. }
  112. _isFlashOn(String current) {
  113. return flash_on == current;
  114. }
  115. _isBackCamera(String current) {
  116. return back_camera == current;
  117. }
  118. void _onQRViewCreated(QRViewController controller) {
  119. this.controller = controller;
  120. controller.scannedData.listen((scanData) {
  121. setState(() {
  122. qrText = scanData;
  123. });
  124. });
  125. }
  126. @override
  127. void dispose() {
  128. controller.dispose();
  129. super.dispose();
  130. }
  131. }