Showing
4 changed files
with
72 additions
and
11 deletions
| @@ -17,6 +17,7 @@ | @@ -17,6 +17,7 @@ | ||
| 17 | library widget; | 17 | library widget; |
| 18 | 18 | ||
| 19 | import 'dart:collection'; | 19 | import 'dart:collection'; |
| 20 | +import 'dart:convert'; | ||
| 20 | import 'dart:math' as math; | 21 | import 'dart:math' as math; |
| 21 | import 'dart:typed_data'; | 22 | import 'dart:typed_data'; |
| 22 | import 'package:image/image.dart' as im; | 23 | import 'package:image/image.dart' as im; |
| @@ -25,10 +25,11 @@ class _BarcodeWidget extends Widget { | @@ -25,10 +25,11 @@ class _BarcodeWidget extends Widget { | ||
| 25 | this.color = PdfColors.black, | 25 | this.color = PdfColors.black, |
| 26 | this.drawText, | 26 | this.drawText, |
| 27 | this.textStyle, | 27 | this.textStyle, |
| 28 | + this.textPadding, | ||
| 28 | }); | 29 | }); |
| 29 | 30 | ||
| 30 | /// the barcode data | 31 | /// the barcode data |
| 31 | - final String data; | 32 | + final Uint8List data; |
| 32 | 33 | ||
| 33 | final Barcode barcode; | 34 | final Barcode barcode; |
| 34 | 35 | ||
| @@ -38,6 +39,8 @@ class _BarcodeWidget extends Widget { | @@ -38,6 +39,8 @@ class _BarcodeWidget extends Widget { | ||
| 38 | 39 | ||
| 39 | final TextStyle textStyle; | 40 | final TextStyle textStyle; |
| 40 | 41 | ||
| 42 | + final double textPadding; | ||
| 43 | + | ||
| 41 | @override | 44 | @override |
| 42 | void layout(Context context, BoxConstraints constraints, | 45 | void layout(Context context, BoxConstraints constraints, |
| 43 | {bool parentUsesSize = false}) { | 46 | {bool parentUsesSize = false}) { |
| @@ -50,12 +53,13 @@ class _BarcodeWidget extends Widget { | @@ -50,12 +53,13 @@ class _BarcodeWidget extends Widget { | ||
| 50 | 53 | ||
| 51 | final List<BarcodeText> textList = <BarcodeText>[]; | 54 | final List<BarcodeText> textList = <BarcodeText>[]; |
| 52 | 55 | ||
| 53 | - for (BarcodeElement element in barcode.make( | 56 | + for (BarcodeElement element in barcode.makeBytes( |
| 54 | data, | 57 | data, |
| 55 | width: box.width, | 58 | width: box.width, |
| 56 | height: box.height, | 59 | height: box.height, |
| 57 | drawText: drawText, | 60 | drawText: drawText, |
| 58 | fontHeight: textStyle.fontSize, | 61 | fontHeight: textStyle.fontSize, |
| 62 | + textPadding: textPadding, | ||
| 59 | )) { | 63 | )) { |
| 60 | if (element is BarcodeBar) { | 64 | if (element is BarcodeBar) { |
| 61 | if (element.black) { | 65 | if (element.black) { |
| @@ -121,12 +125,13 @@ class _BarcodeWidget extends Widget { | @@ -121,12 +125,13 @@ class _BarcodeWidget extends Widget { | ||
| 121 | super.debugPaint(context); | 125 | super.debugPaint(context); |
| 122 | 126 | ||
| 123 | if (drawText) { | 127 | if (drawText) { |
| 124 | - for (BarcodeElement element in barcode.make( | 128 | + for (BarcodeElement element in barcode.makeBytes( |
| 125 | data, | 129 | data, |
| 126 | width: box.width, | 130 | width: box.width, |
| 127 | height: box.height, | 131 | height: box.height, |
| 128 | drawText: drawText, | 132 | drawText: drawText, |
| 129 | fontHeight: textStyle.fontSize, | 133 | fontHeight: textStyle.fontSize, |
| 134 | + textPadding: textPadding, | ||
| 130 | )) { | 135 | )) { |
| 131 | if (element is BarcodeText) { | 136 | if (element is BarcodeText) { |
| 132 | context.canvas.drawRect( | 137 | context.canvas.drawRect( |
| @@ -147,7 +152,38 @@ class _BarcodeWidget extends Widget { | @@ -147,7 +152,38 @@ class _BarcodeWidget extends Widget { | ||
| 147 | } | 152 | } |
| 148 | 153 | ||
| 149 | class BarcodeWidget extends StatelessWidget { | 154 | class BarcodeWidget extends StatelessWidget { |
| 150 | - BarcodeWidget({ | 155 | + /// Draw a barcode using String data |
| 156 | + factory BarcodeWidget({ | ||
| 157 | + @required String data, | ||
| 158 | + @required Barcode barcode, | ||
| 159 | + PdfColor color = PdfColors.black, | ||
| 160 | + PdfColor backgroundColor, | ||
| 161 | + BoxDecoration decoration, | ||
| 162 | + EdgeInsets margin, | ||
| 163 | + EdgeInsets padding, | ||
| 164 | + double width, | ||
| 165 | + double height, | ||
| 166 | + bool drawText = true, | ||
| 167 | + TextStyle textStyle, | ||
| 168 | + double textPadding = 0, | ||
| 169 | + }) => | ||
| 170 | + BarcodeWidget.fromBytes( | ||
| 171 | + data: utf8.encoder.convert(data), | ||
| 172 | + barcode: barcode, | ||
| 173 | + color: color, | ||
| 174 | + backgroundColor: backgroundColor, | ||
| 175 | + decoration: decoration, | ||
| 176 | + margin: margin, | ||
| 177 | + padding: padding, | ||
| 178 | + width: width, | ||
| 179 | + height: height, | ||
| 180 | + drawText: drawText, | ||
| 181 | + textStyle: textStyle, | ||
| 182 | + textPadding: textPadding, | ||
| 183 | + ); | ||
| 184 | + | ||
| 185 | + /// Draw a barcode using Uint8List data | ||
| 186 | + BarcodeWidget.fromBytes({ | ||
| 151 | @required this.data, | 187 | @required this.data, |
| 152 | @required this.barcode, | 188 | @required this.barcode, |
| 153 | this.color = PdfColors.black, | 189 | this.color = PdfColors.black, |
| @@ -159,29 +195,51 @@ class BarcodeWidget extends StatelessWidget { | @@ -159,29 +195,51 @@ class BarcodeWidget extends StatelessWidget { | ||
| 159 | this.height, | 195 | this.height, |
| 160 | this.drawText = true, | 196 | this.drawText = true, |
| 161 | this.textStyle, | 197 | this.textStyle, |
| 162 | - }) : assert(barcode != null); | 198 | + this.textPadding = 0, |
| 199 | + }) : assert(data != null), | ||
| 200 | + assert(barcode != null), | ||
| 201 | + assert(textPadding != null); | ||
| 163 | 202 | ||
| 164 | /// the barcode data | 203 | /// the barcode data |
| 165 | - final String data; | 204 | + final Uint8List data; |
| 166 | 205 | ||
| 206 | + /// The type of barcode to use. | ||
| 207 | + /// use: | ||
| 208 | + /// * Barcode.code128() | ||
| 209 | + /// * Barcode.ean13() | ||
| 210 | + /// * ... | ||
| 167 | final Barcode barcode; | 211 | final Barcode barcode; |
| 168 | 212 | ||
| 213 | + /// The bars color | ||
| 214 | + /// should be black or really dark color | ||
| 169 | final PdfColor color; | 215 | final PdfColor color; |
| 170 | 216 | ||
| 217 | + /// The background color. | ||
| 218 | + /// this should be white or really light color | ||
| 171 | final PdfColor backgroundColor; | 219 | final PdfColor backgroundColor; |
| 172 | 220 | ||
| 221 | + /// Padding to apply | ||
| 173 | final EdgeInsets padding; | 222 | final EdgeInsets padding; |
| 174 | 223 | ||
| 224 | + /// Margin to apply | ||
| 175 | final EdgeInsets margin; | 225 | final EdgeInsets margin; |
| 176 | 226 | ||
| 227 | + /// Width of the barcode with padding | ||
| 177 | final double width; | 228 | final double width; |
| 178 | 229 | ||
| 230 | + /// Height of the barcode with padding | ||
| 179 | final double height; | 231 | final double height; |
| 180 | 232 | ||
| 233 | + /// Whether to draw the text with the barcode | ||
| 181 | final bool drawText; | 234 | final bool drawText; |
| 182 | 235 | ||
| 236 | + /// Text style to use to draw the text | ||
| 183 | final TextStyle textStyle; | 237 | final TextStyle textStyle; |
| 184 | 238 | ||
| 239 | + /// Padding to add between the text and the barcode | ||
| 240 | + final double textPadding; | ||
| 241 | + | ||
| 242 | + /// Decoration to apply to the barcode | ||
| 185 | final BoxDecoration decoration; | 243 | final BoxDecoration decoration; |
| 186 | 244 | ||
| 187 | @override | 245 | @override |
| @@ -203,6 +261,7 @@ class BarcodeWidget extends StatelessWidget { | @@ -203,6 +261,7 @@ class BarcodeWidget extends StatelessWidget { | ||
| 203 | barcode: barcode, | 261 | barcode: barcode, |
| 204 | drawText: drawText, | 262 | drawText: drawText, |
| 205 | textStyle: _textStyle, | 263 | textStyle: _textStyle, |
| 264 | + textPadding: textPadding, | ||
| 206 | ); | 265 | ); |
| 207 | 266 | ||
| 208 | if (padding != null) { | 267 | if (padding != null) { |
| @@ -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.9.1 | 7 | +version: 1.10.0 |
| 8 | 8 | ||
| 9 | environment: | 9 | environment: |
| 10 | sdk: ">=2.3.0 <3.0.0" | 10 | sdk: ">=2.3.0 <3.0.0" |
| @@ -15,10 +15,10 @@ dependencies: | @@ -15,10 +15,10 @@ 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 | - barcode: ^1.14.0 | 18 | + barcode: ^1.16.0 |
| 19 | image: ^2.1.10 | 19 | image: ^2.1.10 |
| 20 | path_parsing: ^0.1.4 | 20 | path_parsing: ^0.1.4 |
| 21 | 21 | ||
| 22 | dev_dependencies: | 22 | dev_dependencies: |
| 23 | test: | 23 | test: |
| 24 | - pedantic: 1.9.0 | 24 | + pedantic: 1.9.2 |
-
Please register or login to post a comment