二维码做为信息的载体,普遍应用于咱们生活的方方面面,例如:使用支付宝支付,二维码加好友,二维码推送等等,能举例的例子多不胜数,而若是你的应用支持二维码的扫描,用户和体验将会翻倍的增加,若是你是应用的开发者,欢迎来使用此二维码扫描插件!并但愿能给予项目一个star,谢谢!项目地址:github.com/rhymelph/r_…android
你能够在pub.dev网站上面搜索r_scan
便可找到该插件,添加下面代码到pubspec.yaml
文件git
dependencies:
r_scan: last version
复制代码
r_scan
获得android6.0系统下请动态受权,能够结合permission_handler
插件使用,代码以下:github
import 'package:permission_handler/permission_handler.dart';
Future<bool> canReadStorage() async {
if(Platform.isIOS) return true;
var status = await PermissionHandler()
.checkPermissionStatus(PermissionGroup.storage);
if (status != PermissionStatus.granted) {
var future = await PermissionHandler()
.requestPermissions([PermissionGroup.storage]);
for (final item in future.entries) {
if (item.value != PermissionStatus.granted) {
return false;
}
}
} else {
return true;
}
return true;
}
Future<bool> canOpenCamera() async {
var status =
await PermissionHandler().checkPermissionStatus(PermissionGroup.camera);
if (status != PermissionStatus.granted) {
var future = await PermissionHandler()
.requestPermissions([PermissionGroup.camera]);
for (final item in future.entries) {
if (item.value != PermissionStatus.granted) {
return false;
}
}
} else {
return true;
}
return true;
}
复制代码
须要在info.plist
文件下添加以下代码:async
<key>NSCameraUsageDescription</key>
<string>扫描二维码时须要使用您的相机</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>扫描二维码时须要访问您的相册</string>
<key>io.flutter.embedded_views_preview</key>
<true/>
复制代码
import 'package:r_scan/r_scan.dart';
复制代码
final result=await RScan.scanImagePath('你的文件路径');
if(result.isNotEmpty){
//result 为二维码内容
}
复制代码
final result=await RScan.scanImagePath('你的图片连接');
if(result.isNotEmpty){
//result 为二维码内容
}
复制代码
ByteData data=await rootBundle.load('images/qrCode.png');
final result=await RScan.scanImageMemory(data.buffer.asUint8List());
if(result.isNotEmpty){
//result 为二维码内容
}
复制代码
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:r_scan/r_scan.dart';
class RScanDialog extends StatefulWidget {
@override
_RScanDialogState createState() => _RScanDialogState();
}
class _RScanDialogState extends State<RScanDialog> {
RScanController _controller;
@override
void initState() {
super.initState();
initController();
}
bool isFirst=true;
Future<void> initController() async {
_controller = RScanController();
_controller.addListener(() {//监听扫描到的二维码
final result = _controller.result;
if (result != null) {
if(isFirst){
Navigator.of(context).pop(result);
isFirst=false;
}
}
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
backgroundColor: Colors.black,
body: FutureBuilder<bool>(
future: canOpenCameraView(),
builder: (BuildContext context, AsyncSnapshot<bool> snapshot) {
if (snapshot.hasData && snapshot.data == true) {
return ScanImageView(//这个为本身写的前景
child: RScanView(
controller: _controller,
),
);
} else {
return Container();
}
},
),
),
);
}
Future<bool> canOpenCameraView() async {
var status =
await PermissionHandler().checkPermissionStatus(PermissionGroup.camera);
if (status != PermissionStatus.granted) {
var future = await PermissionHandler()
.requestPermissions([PermissionGroup.camera]);
for (final item in future.entries) {
if (item.value != PermissionStatus.granted) {
return false;
}
}
} else {
return true;
}
return true;
}
}
复制代码