8000 GitHub - Nidal-Bakir/qr.dart: Dart QR code generation library.
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Nidal-Bakir/qr.dart

 
 

Repository files navigation

A QR code generation library for Dart and Flutter.

Pub Package package publisher CI

Features

  • Supports QR code versions 1 - 40
  • Error correction / redundancy

Getting started

To start, import the dependency in your code:

import 'package:qr/qr.dart';

To build your QR code data you should do so as such:

final qrCode = QrCode(4, QrErrorCorrectLevel.L)
  ..addData('Hello, world in QR form!');
final qrImage = QrImage(qrCode);

Now you can use your qrImage instance to render a graphical representation of the QR code. A basic implementation would be as such:

for (var x = 0; x < qrImage.moduleCount; x++) {
  for (var y = 0; y < qrImage.moduleCount; y++) {
    if (qrImage.isDark(y, x)) {
      // render a dark square on the canvas
    }
  }
}

See the example directory for further details.

Minimalistic concrete example

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

class QrCodeGenWidget extends StatefulWidget {
  final String data;
  final double size;

  const QrCodeGenWidget({
    super.key,
    required this.data,
    required this.size,
  });

  @override
  State<QrCodeGenWidget> createState() => _QrCodeGenWidgetState();
}

class _QrCodeGenWidgetState extends State<QrCodeGenWidget> {
  late var _qrImage = QrImage(
    QrCode.fromData(
      data: widget.data,
      errorCorrectLevel: QrErrorCorrectLevel.L,
    ),
  );

  @override
  void didUpdateWidget(QrCodeGenWidget oldWidget) {
    super.didUpdateWidget(oldWidget);
    if (widget.data != oldWidget.data) {
      _qrImage = QrImage(
        QrCode.fromData(
          data: widget.data,
          errorCorrectLevel: QrErrorCorrectLevel.L,
        ),
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    return CustomPaint(
      size: Size.square(widget.size),
      isComplex: false,
      willChange: false,
      painter: _QrPainter(qrImage: _qrImage),
    );
  }
}

class _QrPainter extends CustomPainter {
  final QrImage qrImage;

  _QrPainter({required this.qrImage});

  @override
  bool shouldRepaint(covariant _QrPainter oldDelegate) {
    return oldDelegate.qrImage != qrImage;
  }

  @override
  void paint(Canvas canvas, Size size) {
    final paint = Paint()
      ..color = Colors.black
      ..isAntiAlias = false;

    canvas.scale(size.height / qrImage.moduleCount);

    for (var x = 0; x < qrImage.moduleCount; x++) {
      for (var y = 0; y < qrImage.moduleCount; y++) {
        if (qrImage.isDark(y, x)) {
          canvas.drawRect(
            Rect.fromLTWH(x.toDouble(), y.toDouble(), 1, 1),
            paint,
          );
        }
      }
    }
  }
}

Pre-made UI libraries

The following libraries use qr.dart to generate QR codes for you out of the box:

qr_flutter - A Flutter Widget to render QR codes

barcode - A package that supports many types of scannable codes, include QR.

Demo

A working demo can be found here: kevmoo.github.io/qr.dart

About

Dart QR code generation library.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Dart 99.9%
  • Other 0.1%
0