Flutter调用原生硬件Api实现扫码

barcode_scan2可以实现扫描条形码、二维码

地址:https://pub.dev/packages/barcode_scan2

Android里面的配置

  1. 安装

    dependencies:
        barcode_scan2: ^4.1.3
    
  1. 配置权限

    Add the camera permission to your AndroidManifest.xml

    配置:android\app\src\main\AndroidManifest.xml

    <uses-permission android:name="android.permission.CAMERA" />
    
  1. 编辑你的android目录下面的build.gradle (Edit your project-level build.gradle file to look likethis)

    注意:如果ext.kotlin_version的版本大于1.3.61则无需配置

    buildscript {
      ext.kotlin_version = '1.3.61'
      // ...
      dependencies {
        // ...
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
      }
    }
    
  1. 编辑你的android/app目录下面的build.gradle (Edit your app-level build.gradle file to look likethis)

    apply plugin: 'kotlin-android'
    // ...
    dependencies {
      implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
      // ...
    }
    

    注意:minSdkVersion 18 以上

    defaultConfig {
        ...
        minSdkVersion 18
        ...
    }
    

    提示:如果您使用的是最新版本的flutter sdk,在Android里面只需要配置minSdkVersion 18和CAMERA的权限

Ios里面的配置

<dict>
  <!-- ... -->
  <key>NSCameraUsageDescription</key>
  <string>Camera permission is required for barcode scanning.</string>
  <!-- ... -->
</dict>

示例代码

import 'package:flutter/material.dart';
import 'package:barcode_scan2/barcode_scan2.dart';
class BarcodeScanPage extends StatefulWidget {
  const BarcodeScanPage({super.key});
  @override
  State<BarcodeScanPage> createState() => _BarcodeScanPageState();
}
class _BarcodeScanPageState extends State<BarcodeScanPage> {
  void _doBarcodeScan() async {
    var options = const ScanOptions(
      // set the options
      autoEnableFlash: true,
      strings: {
        'cancel': '取消',
        'flash_on': '打开Flash',
        'flash_off': '关闭Flash',
      });
    var result = await BarcodeScanner.scan(options: options);
    print(result.type); // The result type (barcode, cancelled, failed)
    print(result.rawContent); // The barcode content
    print(result.format); // The barcode format (as enum)
    print(result
          .formatNote); // If a unknown format was scanned this field contains a
    note
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("扫码演示")),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: _doBarcodeScan,
              child: const Text("扫描二维码 条形码"),
            )
          ],
        ),
      ),
    );
  }
}

results matching ""

    No results matching ""