5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Flutterでバーコードをスキャンする (2022/05/02)

Last updated at Posted at 2022-05-02

はじめに

Flutterでバーコードスキャンをする方法はbarcode_scanパッケージを使用しますが、2022年現在ではbarcode_scan2を使用するようになっています。最新の方法が検索しても載っていなかったので備忘録。

1. プラットフォームの設定

iosとAndroidでカメラを使用する設定をします。
以下の二つのファイルに追加します。

  • Android
android/app/src/main/AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="~~~~~~~~~~~~~~~~~~~~~~~~">
    <uses-permission android:name="android.permission.CAMERA" />
...

manifestタグの直下。おそらく3行目くらい

  • ios
ios/Runner/Info.plist
<dict>
...
    <key>NSCameraUsageDescription</key>
    <string>Camera permission is required for barcode scanning.</string>
...
</dict>

タグ内。タグのすぐ下がわかりやすい

2. パッケージの設定

プロジェクトに読み込ませるパッケージを指定します。
ここが主に以前の方法と違います。2になってます。

pubspec.yaml
dependencies:
...
    # https://pub.dev/packages/barcode_scan2
    barcode_scan2: any
...

ここを書いたらパッケージを更新しましょう。
ターミナルで以下のコマンドを入力します。

flutter packages get

バージョン関係のエラーが出たら多分これなんで以下を書き換える。詳しくは参考のサイトを見てください

android/app/build.gradle
defaultConfig {
...
    minSdkVersion 18
...
}

3. import

以下の二つをインポートします。

import 'package:barcode_scan2/platform_wrapper.dart';
import 'package:flutter/services.dart';

4. スキャン

以下の関数をボタンを押したときにせってするとスキャンされます
readDataにはスキャンの内容、typeDataにはバーコードの種類が格納されます。

String readData = "";
String typeData = "";

Future scan() async {
  try {
    var scan = await BarcodeScanner.scan();
    setState(() => {
      readData = scan.rawContent,
      typeData = scan.format.name,
    });
  }
  on PlatformException catch (e) {
    if (e.code == BarcodeScanner.cameraAccessDenied) {
      setState(() {
        readData = 'Camera permissions are not valid.';
      });
    }
    else {
      setState(() => readData = 'Unexplained error : $e');
    }
  }
  on FormatException{
    setState(() => readData = 'Failed to read (I used the back button before starting the scan).');
  } catch (e) {
    setState(() => readData = 'Unknown error : $e');
  }
}

ちなみにボタンへの設定方法はScaffold内のfloatingActionButtonの方法を例とします。

floatingActionButton: FloatingActionButton(
  onPressed: scan,
  tooltip: 'QR SCAN',
  child: Icon(Icons.add),
), 

参考

5
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?