Showing
5 changed files
with
34 additions
and
11 deletions
| @@ -83,11 +83,9 @@ class Invoice { | @@ -83,11 +83,9 @@ class Invoice { | ||
| 83 | static const _darkColor = PdfColors.blueGrey800; | 83 | static const _darkColor = PdfColors.blueGrey800; |
| 84 | static const _lightColor = PdfColors.white; | 84 | static const _lightColor = PdfColors.white; |
| 85 | 85 | ||
| 86 | - PdfColor get _baseTextColor => | ||
| 87 | - baseColor.luminance < 0.5 ? _lightColor : _darkColor; | 86 | + PdfColor get _baseTextColor => baseColor.isLight ? _lightColor : _darkColor; |
| 88 | 87 | ||
| 89 | - PdfColor get _accentTextColor => | ||
| 90 | - baseColor.luminance < 0.5 ? _lightColor : _darkColor; | 88 | + PdfColor get _accentTextColor => baseColor.isLight ? _lightColor : _darkColor; |
| 91 | 89 | ||
| 92 | double get _total => | 90 | double get _total => |
| 93 | products.map<double>((p) => p.total).reduce((a, b) => a + b); | 91 | products.map<double>((p) => p.total).reduce((a, b) => a + b); |
| @@ -282,17 +282,13 @@ Future<Uint8List> generateReport( | @@ -282,17 +282,13 @@ Future<Uint8List> generateReport( | ||
| 282 | datasets: List<pw.Dataset>.generate(dataTable.length, (index) { | 282 | datasets: List<pw.Dataset>.generate(dataTable.length, (index) { |
| 283 | final data = dataTable[index]; | 283 | final data = dataTable[index]; |
| 284 | final color = chartColors[index % chartColors.length]; | 284 | final color = chartColors[index % chartColors.length]; |
| 285 | - final textColor = | ||
| 286 | - color.luminance < 0.2 ? PdfColors.white : PdfColors.black; | ||
| 287 | - | ||
| 288 | final value = (data[2] as num).toDouble(); | 285 | final value = (data[2] as num).toDouble(); |
| 289 | final pct = (value / expense * 100).round(); | 286 | final pct = (value / expense * 100).round(); |
| 290 | - | ||
| 291 | return pw.PieDataSet( | 287 | return pw.PieDataSet( |
| 292 | legend: '${data[0]}\n$pct%', | 288 | legend: '${data[0]}\n$pct%', |
| 293 | value: value, | 289 | value: value, |
| 294 | color: color, | 290 | color: color, |
| 295 | - legendStyle: pw.TextStyle(fontSize: 10, color: textColor), | 291 | + legendStyle: pw.TextStyle(fontSize: 10), |
| 296 | ); | 292 | ); |
| 297 | }), | 293 | }), |
| 298 | ), | 294 | ), |
| @@ -13,6 +13,7 @@ | @@ -13,6 +13,7 @@ | ||
| 13 | - Passthrough SpanningWidget on SingleChildWidget and StatelessWidget | 13 | - Passthrough SpanningWidget on SingleChildWidget and StatelessWidget |
| 14 | - Improve TextOverflow support | 14 | - Improve TextOverflow support |
| 15 | - Fix Table horizontalInside borders | 15 | - Fix Table horizontalInside borders |
| 16 | +- Improve PieChart default colors | ||
| 16 | 17 | ||
| 17 | ## 3.2.0 | 18 | ## 3.2.0 |
| 18 | 19 |
| @@ -180,6 +180,16 @@ class PdfColor { | @@ -180,6 +180,16 @@ class PdfColor { | ||
| 180 | return math.pow((component + 0.055) / 1.055, 2.4).toDouble(); | 180 | return math.pow((component + 0.055) / 1.055, 2.4).toDouble(); |
| 181 | } | 181 | } |
| 182 | 182 | ||
| 183 | + /// Determines whether the given [PdfColor] is light. | ||
| 184 | + bool get isLight => !isDark; | ||
| 185 | + | ||
| 186 | + /// Determines whether the given [PdfColor] is dark. | ||
| 187 | + bool get isDark { | ||
| 188 | + final relativeLuminance = luminance; | ||
| 189 | + const kThreshold = 0.15; | ||
| 190 | + return (relativeLuminance + 0.05) * (relativeLuminance + 0.05) > kThreshold; | ||
| 191 | + } | ||
| 192 | + | ||
| 183 | /// Get the luminance | 193 | /// Get the luminance |
| 184 | double get luminance { | 194 | double get luminance { |
| 185 | final R = _linearizeColorComponent(red); | 195 | final R = _linearizeColorComponent(red); |
| @@ -240,6 +250,12 @@ class PdfColor { | @@ -240,6 +250,12 @@ class PdfColor { | ||
| 240 | int get hashCode => toInt(); | 250 | int get hashCode => toInt(); |
| 241 | } | 251 | } |
| 242 | 252 | ||
| 253 | +class PdfColorGrey extends PdfColor { | ||
| 254 | + /// Create a grey color | ||
| 255 | + const PdfColorGrey(double color, [double alpha = 1.0]) | ||
| 256 | + : super(color, color, color, alpha); | ||
| 257 | +} | ||
| 258 | + | ||
| 243 | /// Represents an CMYK color | 259 | /// Represents an CMYK color |
| 244 | class PdfColorCmyk extends PdfColor { | 260 | class PdfColorCmyk extends PdfColor { |
| 245 | /// Creates a CMYK color | 261 | /// Creates a CMYK color |
| @@ -126,13 +126,14 @@ class PieDataSet extends Dataset { | @@ -126,13 +126,14 @@ class PieDataSet extends Dataset { | ||
| 126 | this.legendAlign, | 126 | this.legendAlign, |
| 127 | this.legendPosition = PieLegendPosition.auto, | 127 | this.legendPosition = PieLegendPosition.auto, |
| 128 | this.legendLineWidth = 1.0, | 128 | this.legendLineWidth = 1.0, |
| 129 | - this.legendLineColor = PdfColors.black, | 129 | + PdfColor? legendLineColor, |
| 130 | Widget? legendWidget, | 130 | Widget? legendWidget, |
| 131 | this.legendOffset = 20, | 131 | this.legendOffset = 20, |
| 132 | }) : drawBorder = drawBorder ?? borderColor != null && color != borderColor, | 132 | }) : drawBorder = drawBorder ?? borderColor != null && color != borderColor, |
| 133 | assert((drawBorder ?? borderColor != null && color != borderColor) || | 133 | assert((drawBorder ?? borderColor != null && color != borderColor) || |
| 134 | drawSurface), | 134 | drawSurface), |
| 135 | _legendWidget = legendWidget, | 135 | _legendWidget = legendWidget, |
| 136 | + legendLineColor = legendLineColor ?? color, | ||
| 136 | super( | 137 | super( |
| 137 | legend: legend, | 138 | legend: legend, |
| 138 | color: color, | 139 | color: color, |
| @@ -201,7 +202,18 @@ class PieDataSet extends Dataset { | @@ -201,7 +202,18 @@ class PieDataSet extends Dataset { | ||
| 201 | 202 | ||
| 202 | _legendWidget ??= legend == null | 203 | _legendWidget ??= legend == null |
| 203 | ? null | 204 | ? null |
| 204 | - : Text(legend!, style: legendStyle, textAlign: _legendAlign); | 205 | + : RichText( |
| 206 | + text: TextSpan( | ||
| 207 | + children: [TextSpan(text: legend!, style: legendStyle)], | ||
| 208 | + style: TextStyle( | ||
| 209 | + color: lp == PieLegendPosition.inside | ||
| 210 | + ? color!.isLight | ||
| 211 | + ? PdfColors.white | ||
| 212 | + : PdfColors.black | ||
| 213 | + : null), | ||
| 214 | + ), | ||
| 215 | + textAlign: _legendAlign, | ||
| 216 | + ); | ||
| 205 | 217 | ||
| 206 | if (_legendWidget != null) { | 218 | if (_legendWidget != null) { |
| 207 | _legendWidget!.layout(context, | 219 | _legendWidget!.layout(context, |
-
Please register or login to post a comment