前面一篇写了生成二维码图片,这篇来写使用相机扫描识别二维码

识别二维码需要用到插件 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

  

如图

注:该插件也可以用来扫描条形码

最新文章

  1. CSS性能分析,如何优化CSS提高性能
  2. require.js源码分析
  3. Entity Framework Code First数据库自动更新
  4. AutoLayout自动布局
  5. Windows8.1画热度图 - 坑
  6. [POJ2109]Power of Cryptography
  7. C#6.0语法糖剖析(二)
  8. 各大OJ
  9. LR测试https协议设置方法
  10. Python-Day2 Python基础进阶之数据类型
  11. 每天一道LeetCode--118. Pascal&#39;s Triangle(杨辉三角)
  12. JVM内存回收机制
  13. sqlserver使用OpenQuery或OPENROWSET遇到的问题
  14. animation之translate、scale、alpha、rotate动画效果呈现
  15. Servlet开发(二)
  16. dos下的cd指令
  17. ionic1 sqlite的添加使用
  18. 基于element ui的级联选择器组件实现的分类后台接口
  19. java开发过程问题及解决
  20. [Flex] 组件Tree系列 —— 打开和关闭节点

热门文章

  1. 整合91平台接入的ANE
  2. SpringBoot中LocalDatetime作为参数和返回值的序列化问题
  3. Mybatis,返回Map的时候,将Map内的Key转换为驼峰的命名
  4. Linux命令——dumpe2fs
  5. ajax使用案例
  6. MyBatis_tp50_动态sql_sql标签_抽取可重用的sql片段_使用include标签进行引用
  7. PHP实现DES/ECB/PKCS5Padding加密兼容Java SHA1PRNG算法
  8. 关于C3P0-mySQL关于url的细节问题
  9. solrconfig.xml配置文件
  10. machine learning (3)---Linear Algebra Review