Showing
7 changed files
with
38 additions
and
155 deletions
| @@ -23,9 +23,10 @@ import 'dart:typed_data'; | @@ -23,9 +23,10 @@ import 'dart:typed_data'; | ||
| 23 | import 'package:barcode/barcode.dart'; | 23 | import 'package:barcode/barcode.dart'; |
| 24 | import 'package:meta/meta.dart'; | 24 | import 'package:meta/meta.dart'; |
| 25 | import 'package:pdf/pdf.dart'; | 25 | import 'package:pdf/pdf.dart'; |
| 26 | -import 'package:qr/qr.dart'; | ||
| 27 | import 'package:vector_math/vector_math_64.dart'; | 26 | import 'package:vector_math/vector_math_64.dart'; |
| 28 | 27 | ||
| 28 | +export 'package:barcode/barcode.dart'; | ||
| 29 | + | ||
| 29 | part 'widgets/annotations.dart'; | 30 | part 'widgets/annotations.dart'; |
| 30 | part 'widgets/barcode.dart'; | 31 | part 'widgets/barcode.dart'; |
| 31 | part 'widgets/basic.dart'; | 32 | part 'widgets/basic.dart'; |
| @@ -20,98 +20,12 @@ part of widget; | @@ -20,98 +20,12 @@ part of widget; | ||
| 20 | 20 | ||
| 21 | typedef QrError = void Function(dynamic error); | 21 | typedef QrError = void Function(dynamic error); |
| 22 | 22 | ||
| 23 | -class _QrCodeWidget extends Widget { | ||
| 24 | - _QrCodeWidget({ | ||
| 25 | - @required String data, | ||
| 26 | - this.version, | ||
| 27 | - this.errorCorrectionLevel, | ||
| 28 | - this.color, | ||
| 29 | - this.onError, | ||
| 30 | - this.gapless = false, | ||
| 31 | - }) : assert(data != null), | ||
| 32 | - _qr = version == null | ||
| 33 | - ? QrCode.fromData( | ||
| 34 | - data: data, | ||
| 35 | - errorCorrectLevel: errorCorrectionLevel, | ||
| 36 | - ) | ||
| 37 | - : QrCode( | ||
| 38 | - version, | ||
| 39 | - errorCorrectionLevel, | ||
| 40 | - ) { | ||
| 41 | - // configure and make the QR code data | ||
| 42 | - try { | ||
| 43 | - if (version != null) { | ||
| 44 | - _qr.addData(data); | ||
| 45 | - } | ||
| 46 | - _qr.make(); | ||
| 47 | - } catch (ex) { | ||
| 48 | - if (onError != null) { | ||
| 49 | - _hasError = true; | ||
| 50 | - onError(ex); | ||
| 51 | - } | ||
| 52 | - } | ||
| 53 | - } | ||
| 54 | - | ||
| 55 | - @override | ||
| 56 | - void layout(Context context, BoxConstraints constraints, | ||
| 57 | - {bool parentUsesSize = false}) { | ||
| 58 | - box = PdfRect.fromPoints(PdfPoint.zero, constraints.biggest); | ||
| 59 | - } | ||
| 60 | - | ||
| 61 | - /// the qr code version | ||
| 62 | - final int version; | ||
| 63 | - | ||
| 64 | - /// the qr code error correction level | ||
| 65 | - final int errorCorrectionLevel; | ||
| 66 | - | ||
| 67 | - /// the color of the dark squares | ||
| 68 | - final PdfColor color; | ||
| 69 | - | ||
| 70 | - final QrError onError; | ||
| 71 | - | ||
| 72 | - final bool gapless; | ||
| 73 | - | ||
| 74 | - // our qr code data | ||
| 75 | - final QrCode _qr; | ||
| 76 | - | ||
| 77 | - bool _hasError = false; | ||
| 78 | - | ||
| 79 | - @override | ||
| 80 | - void paint(Context context) { | ||
| 81 | - super.paint(context); | ||
| 82 | - | ||
| 83 | - if (_hasError) { | ||
| 84 | - return; | ||
| 85 | - } | ||
| 86 | - | ||
| 87 | - final double shortestSide = box.width < box.height ? box.width : box.height; | ||
| 88 | - assert(shortestSide > 0); | ||
| 89 | - | ||
| 90 | - context.canvas.setFillColor(color); | ||
| 91 | - final double squareSize = shortestSide / _qr.moduleCount.toDouble(); | ||
| 92 | - final int pxAdjustValue = gapless ? 1 : 0; | ||
| 93 | - for (int x = 0; x < _qr.moduleCount; x++) { | ||
| 94 | - for (int y = 0; y < _qr.moduleCount; y++) { | ||
| 95 | - if (_qr.isDark(y, x)) { | ||
| 96 | - context.canvas.drawRect( | ||
| 97 | - box.left + x * squareSize, | ||
| 98 | - box.top - (y + 1) * squareSize, | ||
| 99 | - squareSize + pxAdjustValue, | ||
| 100 | - squareSize + pxAdjustValue, | ||
| 101 | - ); | ||
| 102 | - } | ||
| 103 | - } | ||
| 104 | - } | ||
| 105 | - | ||
| 106 | - context.canvas.fillPath(); | ||
| 107 | - } | ||
| 108 | -} | ||
| 109 | - | 23 | +@Deprecated('Use BarcodeWidget instead') |
| 110 | class QrCodeWidget extends StatelessWidget { | 24 | class QrCodeWidget extends StatelessWidget { |
| 111 | QrCodeWidget({ | 25 | QrCodeWidget({ |
| 112 | @required this.data, | 26 | @required this.data, |
| 113 | this.version, | 27 | this.version, |
| 114 | - this.errorCorrectionLevel = QrErrorCorrectLevel.L, | 28 | + this.errorCorrectionLevel = BarcodeQRCorrectionLevel.low, |
| 115 | this.color = PdfColors.black, | 29 | this.color = PdfColors.black, |
| 116 | this.backgroundColor, | 30 | this.backgroundColor, |
| 117 | this.decoration, | 31 | this.decoration, |
| @@ -129,7 +43,7 @@ class QrCodeWidget extends StatelessWidget { | @@ -129,7 +43,7 @@ class QrCodeWidget extends StatelessWidget { | ||
| 129 | final int version; | 43 | final int version; |
| 130 | 44 | ||
| 131 | /// the qr code error correction level | 45 | /// the qr code error correction level |
| 132 | - final int errorCorrectionLevel; | 46 | + final BarcodeQRCorrectionLevel errorCorrectionLevel; |
| 133 | 47 | ||
| 134 | /// the color of the dark squares | 48 | /// the color of the dark squares |
| 135 | final PdfColor color; | 49 | final PdfColor color; |
| @@ -150,41 +64,19 @@ class QrCodeWidget extends StatelessWidget { | @@ -150,41 +64,19 @@ class QrCodeWidget extends StatelessWidget { | ||
| 150 | 64 | ||
| 151 | @override | 65 | @override |
| 152 | Widget build(Context context) { | 66 | Widget build(Context context) { |
| 153 | - Widget qrcode = AspectRatio( | ||
| 154 | - aspectRatio: 1.0, | ||
| 155 | - child: _QrCodeWidget( | 67 | + return BarcodeWidget( |
| 68 | + barcode: Barcode.qrCode( | ||
| 69 | + typeNumber: version, | ||
| 70 | + errorCorrectLevel: errorCorrectionLevel, | ||
| 71 | + ), | ||
| 156 | data: data, | 72 | data: data, |
| 157 | - version: version, | ||
| 158 | - errorCorrectionLevel: errorCorrectionLevel, | 73 | + backgroundColor: backgroundColor, |
| 159 | color: color, | 74 | color: color, |
| 160 | - onError: onError, | ||
| 161 | - gapless: gapless, | ||
| 162 | - )); | ||
| 163 | - | ||
| 164 | - if (padding != null) { | ||
| 165 | - qrcode = Padding(padding: padding, child: qrcode); | ||
| 166 | - } | ||
| 167 | - | ||
| 168 | - if (decoration != null) { | ||
| 169 | - qrcode = DecoratedBox( | ||
| 170 | decoration: decoration, | 75 | decoration: decoration, |
| 171 | - child: qrcode, | ||
| 172 | - ); | ||
| 173 | - } else if (backgroundColor != null) { | ||
| 174 | - qrcode = DecoratedBox( | ||
| 175 | - decoration: BoxDecoration(color: backgroundColor), | ||
| 176 | - child: qrcode, | 76 | + width: size, |
| 77 | + height: size, | ||
| 78 | + margin: margin, | ||
| 79 | + padding: padding, | ||
| 177 | ); | 80 | ); |
| 178 | } | 81 | } |
| 179 | - | ||
| 180 | - if (size != null) { | ||
| 181 | - qrcode = SizedBox(width: size, height: size, child: qrcode); | ||
| 182 | - } | ||
| 183 | - | ||
| 184 | - if (margin != null) { | ||
| 185 | - qrcode = Padding(padding: margin, child: qrcode); | ||
| 186 | - } | ||
| 187 | - | ||
| 188 | - return qrcode; | ||
| 189 | - } | ||
| 190 | } | 82 | } |
| @@ -4,7 +4,7 @@ description: A pdf producer for Dart. It can create pdf files for both web or fl | @@ -4,7 +4,7 @@ description: A pdf producer for Dart. It can create pdf files for both web or fl | ||
| 4 | homepage: https://github.com/DavBfr/dart_pdf/tree/master/pdf | 4 | homepage: https://github.com/DavBfr/dart_pdf/tree/master/pdf |
| 5 | repository: https://github.com/DavBfr/dart_pdf | 5 | repository: https://github.com/DavBfr/dart_pdf |
| 6 | issue_tracker: https://github.com/DavBfr/dart_pdf/issues | 6 | issue_tracker: https://github.com/DavBfr/dart_pdf/issues |
| 7 | -version: 1.6.1 | 7 | +version: 1.6.2 |
| 8 | 8 | ||
| 9 | environment: | 9 | environment: |
| 10 | sdk: ">=2.3.0 <3.0.0" | 10 | sdk: ">=2.3.0 <3.0.0" |
| @@ -15,8 +15,7 @@ dependencies: | @@ -15,8 +15,7 @@ dependencies: | ||
| 15 | utf: ^0.9.0 | 15 | utf: ^0.9.0 |
| 16 | crypto: ^2.0.6 | 16 | crypto: ^2.0.6 |
| 17 | archive: ^2.0.10 | 17 | archive: ^2.0.10 |
| 18 | - qr: ^1.2.0 | ||
| 19 | - barcode: ^1.5.0 | 18 | + barcode: ^1.7.0 |
| 20 | image: ^2.1.4 | 19 | image: ^2.1.4 |
| 21 | 20 | ||
| 22 | dev_dependencies: | 21 | dev_dependencies: |
| @@ -18,14 +18,17 @@ | @@ -18,14 +18,17 @@ | ||
| 18 | 18 | ||
| 19 | import 'dart:io'; | 19 | import 'dart:io'; |
| 20 | 20 | ||
| 21 | -import 'package:barcode/barcode.dart'; | ||
| 22 | -import 'package:pdf/pdf.dart'; | ||
| 23 | import 'package:pdf/widgets.dart'; | 21 | import 'package:pdf/widgets.dart'; |
| 24 | import 'package:test/test.dart'; | 22 | import 'package:test/test.dart'; |
| 25 | 23 | ||
| 26 | Document pdf; | 24 | Document pdf; |
| 27 | 25 | ||
| 28 | -Widget barcode(Barcode barcode, String data, {double width = 200}) { | 26 | +Widget barcode( |
| 27 | + Barcode barcode, | ||
| 28 | + String data, { | ||
| 29 | + double width = 200, | ||
| 30 | + double height = 80, | ||
| 31 | +}) { | ||
| 29 | return Row( | 32 | return Row( |
| 30 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, | 33 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, |
| 31 | children: <Widget>[ | 34 | children: <Widget>[ |
| @@ -42,7 +45,7 @@ Widget barcode(Barcode barcode, String data, {double width = 200}) { | @@ -42,7 +45,7 @@ Widget barcode(Barcode barcode, String data, {double width = 200}) { | ||
| 42 | barcode: barcode, | 45 | barcode: barcode, |
| 43 | data: data, | 46 | data: data, |
| 44 | width: width, | 47 | width: width, |
| 45 | - height: 80, | 48 | + height: height, |
| 46 | margin: const EdgeInsets.symmetric(vertical: 20), | 49 | margin: const EdgeInsets.symmetric(vertical: 20), |
| 47 | ), | 50 | ), |
| 48 | ), | 51 | ), |
| @@ -72,34 +75,13 @@ void main() { | @@ -72,34 +75,13 @@ void main() { | ||
| 72 | barcode(Barcode.ean2(), '44', width: 40), | 75 | barcode(Barcode.ean2(), '44', width: 40), |
| 73 | barcode(Barcode.ean5(), '30897', width: 60), | 76 | barcode(Barcode.ean5(), '30897', width: 60), |
| 74 | barcode(Barcode.itf14(), '2578639587234'), | 77 | barcode(Barcode.itf14(), '2578639587234'), |
| 78 | + barcode(Barcode.telepen(), 'Telepen'), | ||
| 79 | + barcode(Barcode.qrCode(), 'QR-Code!', width: 120, height: 120), | ||
| 75 | ], | 80 | ], |
| 76 | ), | 81 | ), |
| 77 | ); | 82 | ); |
| 78 | }); | 83 | }); |
| 79 | 84 | ||
| 80 | - test('QrCode Widgets', () { | ||
| 81 | - pdf.addPage( | ||
| 82 | - Page( | ||
| 83 | - build: (Context context) => QrCodeWidget( | ||
| 84 | - data: 'HELLO 123', | ||
| 85 | - size: 200, | ||
| 86 | - padding: const EdgeInsets.all(20), | ||
| 87 | - margin: const EdgeInsets.all(20), | ||
| 88 | - decoration: const BoxDecoration( | ||
| 89 | - borderRadius: 20, | ||
| 90 | - color: PdfColors.white, | ||
| 91 | - border: BoxBorder( | ||
| 92 | - color: PdfColors.blue, | ||
| 93 | - top: true, | ||
| 94 | - bottom: true, | ||
| 95 | - left: true, | ||
| 96 | - right: true, | ||
| 97 | - )), | ||
| 98 | - ), | ||
| 99 | - ), | ||
| 100 | - ); | ||
| 101 | - }); | ||
| 102 | - | ||
| 103 | tearDownAll(() { | 85 | tearDownAll(() { |
| 104 | final File file = File('widgets-barcode.pdf'); | 86 | final File file = File('widgets-barcode.pdf'); |
| 105 | file.writeAsBytesSync(pdf.save()); | 87 | file.writeAsBytesSync(pdf.save()); |
| @@ -100,7 +100,12 @@ Future<pw.Document> generateDocument(PdfPageFormat format) async { | @@ -100,7 +100,12 @@ Future<pw.Document> generateDocument(PdfPageFormat format) async { | ||
| 100 | Percent(size: 60, value: .7, title: pw.Text('Word')), | 100 | Percent(size: 60, value: .7, title: pw.Text('Word')), |
| 101 | Percent(size: 60, value: .4, title: pw.Text('Excel')), | 101 | Percent(size: 60, value: .4, title: pw.Text('Excel')), |
| 102 | ]), | 102 | ]), |
| 103 | - pw.QrCodeWidget(data: 'Parnella Charlesbois', size: 60), | 103 | + pw.BarcodeWidget( |
| 104 | + data: 'Parnella Charlesbois', | ||
| 105 | + width: 60, | ||
| 106 | + height: 60, | ||
| 107 | + barcode: pw.Barcode.qrCode(), | ||
| 108 | + ), | ||
| 104 | ], | 109 | ], |
| 105 | ) | 110 | ) |
| 106 | ]), | 111 | ]), |
No preview for this file type
-
Please register or login to post a comment