Flutter扫码识别二维码内容
2024-08-21 05:50:25
前面一篇写了生成二维码图片,这篇来写使用相机扫描识别二维码
识别二维码需要用到插件 barcode_scan
首先在 pubspec.yaml 文件中添加以下依赖,添加依赖后在 pubspec.yaml 运行 flutter packages get 或 使用IDE更新软件包。
dependencies:
...
barcode_scan: ^1.0.0
Android配置
在使用它之前需要先配置 android\app\src\main\AndroidManifest.xml
在该文件中添加添加app获取相机权限及BarcodeScanner activity
<!--获取相机权限-->
<uses-permission android:name="android.permission.CAMERA" />
<activity android:name="com.apptreesoftware.barcodescan.BarcodeScannerActivity"/>
如下图所示
编辑项目级build.gradle文件
buildscript {
ext.kotlin_version = '1.2.31'
...
dependencies {
...
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
...
如图所示
以及编辑应用级build.gradle文件
apply plugin: 'kotlin-android'
...
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
...
}
如图所示
注意 apply plugin: 'kotlin-android' 需要放在 apply plugin: 'com.android.application' 之后
IOS配置
在 Info.plist 中添加一下内容
<key>NSCameraUsageDescription</key>
<string>Camera permission is required for barcode scanning.</string>
扫码实现
完成以上步骤之后在需要触发扫码的页面引用barcode_scan
import 'package:barcode_scan/barcode_scan.dart';
然后写上一个调用扫码的方法
// 扫描二维码
Future scan() async {
try {
// 此处为扫码结果,barcode为二维码的内容
String barcode = await BarcodeScanner.scan();
print('扫码结果: '+barcode);
} on PlatformException catch (e) {
if (e.code == BarcodeScanner.CameraAccessDenied) {
// 未授予APP相机权限
print('未授予APP相机权限');
} else {
// 扫码错误
print('扫码错误: $e');
}
} on FormatException{
// 进入扫码页面后未扫码就返回
print('进入扫码页面后未扫码就返回');
} catch (e) {
// 扫码错误
print('扫码错误: $e');
}
}
在使用时触发scan()方法即可,效果如下
默认的右上角打开闪光灯的文字为英文,如果需要修改可以到Flutter目录下修改以下相应文件
Andriod文件
flutter\.pub-cache\hosted\pub.flutter-io.cn\barcode_scan-1.0.0\android\src\main\kotlin\com\apptreesoftware\barcodescan\BarcodeScannerActivity.kt
如图
IOS文件
flutter\.pub-cache\hosted\pub.flutter-io.cn\barcode_scan-1.0.0\ios\Classes\BarcodeScannerViewController.m
如图
注:该插件也可以用来扫描条形码
最新文章
- CSS性能分析,如何优化CSS提高性能
- require.js源码分析
- Entity Framework Code First数据库自动更新
- AutoLayout自动布局
- Windows8.1画热度图 - 坑
- [POJ2109]Power of Cryptography
- C#6.0语法糖剖析(二)
- 各大OJ
- LR测试https协议设置方法
- Python-Day2 Python基础进阶之数据类型
- 每天一道LeetCode--118. Pascal&#39;s Triangle(杨辉三角)
- JVM内存回收机制
- sqlserver使用OpenQuery或OPENROWSET遇到的问题
- animation之translate、scale、alpha、rotate动画效果呈现
- Servlet开发(二)
- dos下的cd指令
- ionic1 sqlite的添加使用
- 基于element ui的级联选择器组件实现的分类后台接口
- java开发过程问题及解决
- [Flex] 组件Tree系列 —— 打开和关闭节点
热门文章
- 整合91平台接入的ANE
- SpringBoot中LocalDatetime作为参数和返回值的序列化问题
- Mybatis,返回Map的时候,将Map内的Key转换为驼峰的命名
- Linux命令——dumpe2fs
- ajax使用案例
- MyBatis_tp50_动态sql_sql标签_抽取可重用的sql片段_使用include标签进行引用
- PHP实现DES/ECB/PKCS5Padding加密兼容Java SHA1PRNG算法
- 关于C3P0-mySQL关于url的细节问题
- solrconfig.xml配置文件
- machine learning (3)---Linear Algebra Review