LoginSignup
18
19

More than 3 years have passed since last update.

Flutter で QR コードを生成

Posted at

はじめに

Flutter で QR コード生成する記事が見つけられなかったため、自分のために残しておきます。
ただ、めちゃくちゃ簡単にできます笑

環境

  • macOS Catalina バージョン 10.15.6
  • Android Studio 4.0
flutter --version
Flutter 1.20.1 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 2ae34518b8 (10 days ago) • 2020-08-05 19:53:19 -0700
Engine • revision c8e3b94853
Tools • Dart 2.9.0

前提条件

  • Flutter のセットアップ済み
  • Flutter プロジェクト作成済み

QR コードを生成

今回は以下の自分の Twitter アカウントの URL を QR コードにしていきます :raising_hand:

ライブラリを追加

qr_flutter というライブラリを使うので、pubspec.yamlqr_flutter を追加します。

pubspec.yaml
dependencies:
  ...
  qr_flutter: ^3.1.0
  ...

追加したら以下のコマンドを実行します。

cd {プロジェクトルート}
flutter pub get

QR コードを表示する画面を作成

qr_flutter パッケージに QrImage というクラスがあるので、それを使います。

main.dart
import 'package:flutter/material.dart';
import 'package:qr_flutter/qr_flutter.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'QR Code Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: const QrCodeLayout(),
    );
  }
}

class QrCodeLayout extends StatelessWidget {
  const QrCodeLayout({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('QR Code Demo'),
      ),
      body: Center(
        child: QrImage(
          data: 'https://twitter.com/blendthink',
          size: 200,
        ),
      ),
    );
  }
}

アプリで実行

Android のエミュレーターか iOS のシミュレーターを起動して以下のコマンドを実行します。

cd {プロジェクトルート}
flutter run

以下のように無事に QR コードが生成できました :tada:
めちゃくちゃ簡単ですね :laughing:

真ん中に画像を表示したい

おしゃれに表示したり、何のデータが入ってるか分かるようにしたいですよね。
簡単に実装できます!

画像を追加

今回は以下のサイトから画像を使わせていただきました。

Icons8

プロジェクト直下に images というフォルダーを作成して、そこに画像を twitter.png として入れます。

assets の設定

pubspec.yamlassets の設定を追加します

flutter:
  uses-material-design: true
  ...
  assets:
   - images/
  ...

追加したら以下のコマンドを実行します。

cd {プロジェクトルート}
flutter pub get

レイアウトを修正

あとは QrImage クラスの embeddedImage で追加した画像を設定するだけです :sunglasses:

main.dart
import 'package:flutter/material.dart';
import 'package:qr_flutter/qr_flutter.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'QR Code Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: const QrCodeLayout(),
    );
  }
}

class QrCodeLayout extends StatelessWidget {
  const QrCodeLayout({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('QR Code Demo'),
      ),
      body: Center(
        child: QrImage(
          data: 'https://twitter.com/blendthink',
          size: 200,
          embeddedImage: AssetImage('images/twitter.png'),
          embeddedImageStyle: QrEmbeddedImageStyle(
            size: Size(50, 50),
          ),
        ),
      ),
    );
  }
}

アプリで実行

Android のエミュレーターか iOS のシミュレーターを起動して以下のコマンドを実行します。

cd {プロジェクトルート}
flutter run

おわりに

こんなに簡単に実装できて、これからは Flutter の時代になるんじゃないかなって感じました。
ぜひみなさんも Flutter やりましょ!

18
19
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
18
19