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

145 строки
4.6 KiB

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