1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Naoya FlutterAdvent Calendar 2024

Day 2

FlutterでQRコードの生成とスキャン

Last updated at Posted at 2024-12-01

FlutterでQRコードの生成とスキャン

Flutterを使用して、アプリ内でQRコードの生成とスキャンを実装する方法

必要なパッケージの追加

まず、pubspec.yamlファイルに以下のパッケージを追加します。

dependencies:
  flutter:
    sdk: flutter
  qr_flutter: ^4.0.0        # QRコード生成用
  mobile_scanner: ^2.0.0    # QRコードスキャン用

ターミナルで以下のコマンドを実行し、パッケージをインストールします。

flutter pub get

QRコードの生成

qr_flutterパッケージを使用して、簡単にQRコードを生成できます。

import 'package:qr_flutter/qr_flutter.dart';

// ...

QrImage(
  data: 'https://example.com',
  version: QrVersions.auto,
  size: 200.0,
),

• data: エンコードする文字列
• version: QRコードのバージョン(QrVersions.autoで自動設定)
• size: QRコードのサイズ
• backgroundColor: 背景色
• foregroundColor: QRコードの色

QRコードのスキャン

mobile_scannerパッケージを使用して、デバイスのカメラでQRコードをスキャンします。

基本的な実装

import 'package:flutter/material.dart';
import 'package:mobile_scanner/mobile_scanner.dart';

class QRScannerPage extends StatefulWidget {
  @override
  _QRScannerPageState createState() => _QRScannerPageState();
}

class _QRScannerPageState extends State<QRScannerPage> {
  String? barcode;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('QRコードスキャン'),
      ),
      body: Stack(
        children: [
          MobileScanner(
            onDetect: (barcode, args) {
              final String code = barcode.rawValue ?? '---';
              setState(() {
                this.barcode = code;
              });
              // 必要に応じて、結果を表示したり、別の画面に遷移
              print('QRコードの内容: $code');
            },
          ),
          if (barcode != null)
            Align(
              alignment: Alignment.bottomCenter,
              child: Container(
                color: Colors.white54,
                padding: EdgeInsets.all(16),
                child: Text(
                  '検出されたコード: $barcode',
                  style: TextStyle(fontSize: 16),
                ),
              ),
            ),
        ],
      ),
    );
  }
}

カメラの権限設定

iOSの場合: ios/Runner/Info.plistに以下を追加します。

<key>NSCameraUsageDescription</key>
<string>カメラを使用してQRコードをスキャンします。</string>

Androidの場合: android/app/src/main/AndroidManifest.xmlに以下を確認してください。

<uses-permission android:name="android.permission.CAMERA" />

追加のオプション

MobileScannerウィジェットには、以下のオプションがあります。
• controller: カメラのフラッシュやフォーカス、ズームを制御するためのコントローラー。
• formats: スキャンするバーコードの形式を指定(デフォルトですべての形式をスキャン)。
• fit: カメラプレビューのアスペクト比を指定。

コントローラーの使用例

MobileScannerController cameraController = MobileScannerController();

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text('QRコードスキャン'),
      actions: [
        IconButton(
          icon: Icon(Icons.flash_on),
          onPressed: () => cameraController.toggleTorch(),
        ),
        IconButton(
          icon: Icon(Icons.cameraswitch),
          onPressed: () => cameraController.switchCamera(),
        ),
      ],
    ),
    body: MobileScanner(
      controller: cameraController,
      onDetect: (barcode, args) {
        // スキャン結果を処理
      },
    ),
  );
}

おわり〜

1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?