main.dart 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. import 'dart:io';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter/services.dart';
  4. import 'package:image_picker/image_picker.dart';
  5. import 'package:permission_handler/permission_handler.dart';
  6. import 'package:r_scan_example/scan_dialog.dart';
  7. import 'scan_camera_dialog.dart';
  8. import 'package:r_scan/r_scan.dart';
  9. void main() async {
  10. WidgetsFlutterBinding.ensureInitialized();
  11. runApp(MyApp());
  12. }
  13. class MyApp extends StatefulWidget {
  14. @override
  15. _MyAppState createState() => _MyAppState();
  16. }
  17. class _MyAppState extends State<MyApp> {
  18. @override
  19. Widget build(BuildContext context) {
  20. return MaterialApp(
  21. home: MyPage(),
  22. );
  23. }
  24. }
  25. class MyPage extends StatefulWidget {
  26. @override
  27. _MyPageState createState() => _MyPageState();
  28. }
  29. class _MyPageState extends State<MyPage> {
  30. RScanResult? result;
  31. @override
  32. Widget build(BuildContext context) {
  33. return Scaffold(
  34. appBar: AppBar(
  35. title: Text('scan example'),
  36. ),
  37. body: Column(
  38. mainAxisAlignment: MainAxisAlignment.center,
  39. crossAxisAlignment: CrossAxisAlignment.center,
  40. children: <Widget>[
  41. Center(child: Text(result == null ? '点击下方按钮开始扫码' : '扫码结果${result.toString().split(',').join('\n')}')),
  42. Center(
  43. child: FlatButton(
  44. onPressed: () async {
  45. final result = await Navigator.of(context)
  46. .push(MaterialPageRoute(builder: (BuildContext context) => RScanCameraDialog()));
  47. setState(() {
  48. this.result = result;
  49. });
  50. },
  51. child: Text('RScanCamera开始扫码'),
  52. ),
  53. ),
  54. Center(
  55. child: FlatButton(
  56. onPressed: () async {
  57. final result = await Navigator.of(context)
  58. .push(MaterialPageRoute(builder: (BuildContext context) => RScanDialog()));
  59. setState(() {
  60. this.result = result;
  61. });
  62. },
  63. child: Text('RScanView开始扫码(已弃用)'),
  64. ),
  65. ),
  66. Center(
  67. child: FlatButton(
  68. onPressed: () async {
  69. if (await canReadStorage()) {
  70. var image = await ImagePicker().getImage(source: ImageSource.gallery);
  71. if (image != null) {
  72. final result = await RScan.scanImagePath(image.path);
  73. setState(() {
  74. this.result = result;
  75. });
  76. }
  77. }
  78. },
  79. child: Text('选择图片扫描'),
  80. ),
  81. ),
  82. Center(
  83. child: FlatButton(
  84. onPressed: () async {
  85. final result =
  86. await RScan.scanImageUrl("https://s.cn.bing.net/th?id=OJ.5F0gxqWmxskS0Q&w=75&h=75&pid=MSNJVFeeds");
  87. setState(() {
  88. this.result = result;
  89. });
  90. },
  91. child: Text('网络图片解析'),
  92. ),
  93. ),
  94. Center(
  95. child: FlatButton(
  96. onPressed: () async {
  97. ByteData data = await rootBundle.load('images/qrCode.png');
  98. final result = await RScan.scanImageMemory(data.buffer.asUint8List());
  99. setState(() {
  100. this.result = result;
  101. });
  102. },
  103. child: Text('内存图片解析'),
  104. ),
  105. ),
  106. ],
  107. ),
  108. );
  109. }
  110. Future<bool> canReadStorage() async {
  111. if (Platform.isIOS) return true;
  112. var status = await Permission.storage.status;
  113. // var status = await PermissionHandler().checkPermissionStatus(PermissionGroup.storage);
  114. if (status != PermissionStatus.granted) {
  115. var future = await [Permission.storage].request();
  116. for (final item in future.entries) {
  117. if (item.value != PermissionStatus.granted) {
  118. return false;
  119. }
  120. }
  121. } else {
  122. return true;
  123. }
  124. return true;
  125. }
  126. }