import 'package:barcode/barcode.dart'; import 'package:flutter/material.dart'; /// Renders [data] as a QR code, painted from the pure-Dart `barcode` matrix (no /// native plugin). Used for the profile's shareable identity — hand your npub to /// someone at a fair with a scan. class QrView extends StatelessWidget { const QrView({required this.data, this.size = 200, super.key}); final String data; final double size; @override Widget build(BuildContext context) { return Container( width: size, height: size, color: Colors.white, padding: const EdgeInsets.all(8), child: CustomPaint( size: Size.square(size), painter: _QrPainter(data), ), ); } } class _QrPainter extends CustomPainter { _QrPainter(this.data); final String data; @override void paint(Canvas canvas, Size size) { final black = Paint()..color = Colors.black; for (final element in Barcode.qrCode() .make(data, width: size.width, height: size.height)) { if (element is BarcodeBar && element.black) { canvas.drawRect( Rect.fromLTWH( element.left, element.top, element.width, element.height, ), black, ); } } } @override bool shouldRepaint(_QrPainter oldDelegate) => oldDelegate.data != data; }