长期以来,Flutter都缺乏一个简单易用,功能强大的二维码、条形码等扫码库,需要既能支持相机扫码,也能支持本地图片码识别。为了解决这个问题,我考察了原生的扫码生态,选取了功能强大的HUAWEI ScanKit SDK,对它进行了Flutter插件包封装。
华为的ScanKit SDK既支持Android,也支持iOS,同时还做了扫码界面和图库选择功能,非常适合引入Flutter世界。
仓库地址: flutter_scankit
中文文档
这是一个扫码的Flutter插件,它是HUAWEI ScanKit SDK的Flutter包。HUAWEI ScanKit 是一个强大的库,使用简单,对于模糊污损码识别率高,识码速度超快。
得益于华为在计算机视觉领域能力的积累,Scan Kit可以实现远距离码或小型码的检测和自动放大,同时针对常见复杂扫码场景(如反光、暗光、污损、模糊、柱面)做了针对性识别优化,提升扫码成功率与用户体验。
- Android
- iOS
扫码
Scan Kit支持扫描13种全球主流的码制式。如果您的应用只处理部分特定的码制式,您也可以在接口中指定制式以便加快扫码速度。已支持的码制式:
一维码:EAN-8、EAN-13、UPC-A、UPC-E、Codabar、Code 39、Code 93、Code 128、ITF-14 二维码:QR Code、Data Matrix、PDF417、Aztec
支持相机扫码和本地图片码识别。
用法
- 配置权限
- 处理权限请求
- 调用API
配置权限
iOS
将以下内容添加到ios/Runner/Info.plist
中
<key>NSCameraUsageDescription</key>
<string>在此向用户解释你为什么需要这个权限</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>在此向用户解释你为什么需要这个权限</string>
注意,替换<string></string>
标签的内容,给用户一个需要该权限的理由。
安卓平台不需要配置!
权限请求
在Flutter中,你需要一个插件库来处理权限,这里推荐我的另一个插件库:flutter_easy_permission,详细配置请看 这里。
打开ios/Podfile
文件,添加如下配置:
target 'Runner' do
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
# Add the library of permissions you need here
pod 'LBXPermission/Camera'
pod 'LBXPermission/Photo'
end
然后执行命令进行安装。
调用API
代码语言:txt复制 void initState() {
super.initState();
scanKit = FlutterScankit()
..addResultListen((val) {
// 返回识别结果
debugPrint("scanning result:$val");
});
FlutterEasyPermission().addPermissionCallback(
onGranted: (requestCode, perms,perm) {
startScan();
},
onDenied: (requestCode, perms,perm, isPermanent) {});
}
Scan the code:
代码语言:txt复制 // 如果没有权限则请求
if (!await FlutterEasyPermission.has(perms: _permissions,permsGroup: _permissionGroup)) {
FlutterEasyPermission.request(perms: _permissions,permsGroup: _permissionGroup);
} else {
// 有权限则调用
startScan();
}
Future<void> startScan() async {
try {
await scanKit.startScan(scanTypes: [ScanTypes.ALL]);
} on PlatformException {}
}
关于 FlutterEasyPermission
的用法,请查看这里 。
例子
一个完整的例子,请看 这里。
TODO
SDK本身支持自定义扫码UI,但目前插件还未进行深度封装,无法支持自定义页面,后续将抽一点空,通过外接纹理方式进行深度封装,支持直接在Flutter Widget层自定义扫码界面。
插件开发
如果您对Flutter插件开发内容感兴趣,可以去我的网校中查看《Flutter全栈式开发-高级篇》的课程,全网独家深入解析关于Flutter插件开发的方方面面,实战讲解多个案例(包含本插件开发过程)