From 8c302ef477b56747252b2c876ca6c7ad9d8b841b Mon Sep 17 00:00:00 2001 From: Leonardo da Silva Date: Sat, 2 Jan 2021 11:58:11 -0300 Subject: [PATCH 1/5] upgrade to null safety --- lib/color_from_string.dart | 226 +++++++++++++++++++++++++++++++++++++ lib/conversion.dart | 6 +- lib/hsl_color.dart | 2 +- lib/tinycolor.dart | 17 ++- pubspec.lock | 45 ++++---- pubspec.yaml | 4 +- 6 files changed, 256 insertions(+), 44 deletions(-) create mode 100644 lib/color_from_string.dart diff --git a/lib/color_from_string.dart b/lib/color_from_string.dart new file mode 100644 index 0000000..7510abd --- /dev/null +++ b/lib/color_from_string.dart @@ -0,0 +1,226 @@ +// inlined from package Pigment, since it is not being supported anymore +import 'dart:ui'; + +const _cssColors = { + 'lightsalmon': '#FFA07A', + 'salmon': '#FA8072', + 'darksalmon': '#E9967A', + 'lightcoral': '#F08080', + 'indianred': '#CD5C5C', + 'crimson': '#DC143C', + 'firebrick': '#B22222', + 'red': '#FF0000', + 'darkred': '#8B0000', + 'coral': '#FF7F50', + 'tomato': '#FF6347', + 'orangered': '#FF4500', + 'gold': '#FFD700', + 'orange': '#FFA500', + 'darkorange': '#FF8C00', + 'lightyellow': '#FFFFE0', + 'lemonchiffon': '#FFFACD', + 'lightgoldenrodyellow': '#FAFAD2', + 'papayawhip': '#FFEFD5', + 'moccasin': '#FFE4B5', + 'peachpuff': '#FFDAB9', + 'palegoldenrod': '#EEE8AA', + 'khaki': '#F0E68C', + 'darkkhaki': '#BDB76B', + 'yellow': '#FFFF00', + 'awngreen': '#7CFC00', + 'chartreuse': '#7FFF00', + 'limegreen': '#32CD32', + 'lime': '#00FF00', + 'forestgreen': '#228B22', + 'green': '#008000', + 'darkgreen': '#006400', + 'greenyellow': '#ADFF2F', + 'yellowgreen': '#9ACD32', + 'springgreen': '#00FF7F', + 'mediumspringgreen': '#00FA9A', + 'lightgreen': '#90EE90', + 'palegreen': '#98FB98', + 'darkseagreen': '#8FBC8F', + 'mediumseagreen': '#3CB371', + 'seagreen': '#2E8B57', + 'olive': '#808000', + 'darkolivegreen': '#556B2F', + 'olivedrab': '#6B8E23', + 'lightcyan': '#E0FFFF', + 'cyan': '#00FFFF', + 'aqua': '#00FFFF', + 'aquamarine': '#7FFFD4', + 'mediumaquamarine': '#66CDAA', + 'paleturquoise': '#AFEEEE', + 'turquoise': '#40E0D0', + 'mediumturquoise': '#48D1CC', + 'darkturquoise': '#00CED1', + 'lightseagreen': '#20B2AA', + 'cadetblue': '#5F9EA0', + 'darkcyan': '#008B8B', + 'teal': '#008080', + 'powderblue': '#B0E0E6', + 'lightblue': '#ADD8E6', + 'lightskyblue': '#87CEFA', + 'skyblue': '#87CEEB', + 'deepskyblue': '#00BFFF', + 'lightsteelblue': '#B0C4DE', + 'dodgerblue': '#1E90FF', + 'cornflowerblue': '#6495ED', + 'steelblue': '#4682B4', + 'royalblue': '#4169E1', + 'blue': '#0000FF', + 'mediumblue': '#0000CD', + 'darkblue': '#00008B', + 'navy': '#000080', + 'midnightblue': '#191970', + 'mediumslateblue': '#7B68EE', + 'slateblue': '#6A5ACD', + 'darkslateblue': '#483D8B', + 'lavender': '#E6E6FA', + 'thistle': '#D8BFD8', + 'plum': '#DDA0DD', + 'violet': '#EE82EE', + 'orchid': '#DA70D6', + 'fuchsia': '#FF00FF', + 'magenta': '#FF00FF', + 'mediumorchid': '#BA55D3', + 'mediumpurple': '#9370DB', + 'blueviolet': '#8A2BE2', + 'darkviolet': '#9400D3', + 'darkorchid': '#9932CC', + 'darkmagenta': '#8B008B', + 'purple': '#800080', + 'indigo': '#4B0082', + 'pink': '#FFC0CB', + 'lightpink': '#FFB6C1', + 'hotpink': '#FF69B4', + 'deeppink': '#FF1493', + 'palevioletred': '#DB7093', + 'mediumvioletred': '#C71585', + 'white': '#FFFFFF', + 'snow': '#FFFAFA', + 'honeydew': '#F0FFF0', + 'mintcream': '#F5FFFA', + 'azure': '#F0FFFF', + 'aliceblue': '#F0F8FF', + 'ghostwhite': '#F8F8FF', + 'whitesmoke': '#F5F5F5', + 'seashell': '#FFF5EE', + 'beige': '#F5F5DC', + 'oldlace': '#FDF5E6', + 'floralwhite': '#FFFAF0', + 'ivory': '#FFFFF0', + 'antiquewhite': '#FAEBD7', + 'linen': '#FAF0E6', + 'lavenderblush': '#FFF0F5', + 'mistyrose': '#FFE4E1', + 'gainsboro': '#DCDCDC', + 'lightgray': '#D3D3D3', + 'silver': '#C0C0C0', + 'darkgray': '#A9A9A9', + 'gray': '#808080', + 'dimgray': '#696969', + 'lightslategray': '#778899', + 'slategray': '#708090', + 'darkslategray': '#2F4F4F', + 'black': '#000000', + 'cornsilk': '#FFF8DC', + 'blanchedalmond': '#FFEBCD', + 'bisque': '#FFE4C4', + 'navajowhite': '#FFDEAD', + 'wheat': '#F5DEB3', + 'burlywood': '#DEB887', + 'tan': '#D2B48C', + 'rosybrown': '#BC8F8F', + 'sandybrown': '#F4A460', + 'goldenrod': '#DAA520', + 'peru': '#CD853F', + 'chocolate': '#D2691E', + 'saddlebrown': '#8B4513', + 'sienna': '#A0522D', + 'brown': '#A52A2A', + 'maroon': '#800000', +}; + +Color colorFromString(String color) { + color = color.trim(); + + final rgbColor = _getRGBColorFromString(color); + if (rgbColor != null) { + return rgbColor; + } + + Color? finalColor; + if (_hasCorrectHexPattern(color)) { + color = color.replaceAll("#", ""); + int size = color.length; + if (size == 6 || size == 3) { + if (size == 3) { + color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2]; + } + + int value = int.parse(color, radix: 16); + value = value + 0xFF000000; + finalColor = new Color(value); + } else if (size == 8 || size == 4) { + if (size == 4) { + color = color[0] + + color[0] + + color[1] + + color[1] + + color[2] + + color[2] + + color[3] + + color[3]; + } + String alpha = color.substring(6); + color = alpha + color.substring(0, 6); + int value = int.parse(color, radix: 16); + finalColor = new Color(value); + } + } + + if (finalColor != null) { + return finalColor; + } + + var namedColor = _cssColors[color]; + if (namedColor != null && namedColor != "") { + namedColor = namedColor.replaceAll("#", ""); + int value = int.parse(namedColor, radix: 16); + value = value + 0xFF000000; + return new Color(value); + } + + throw 'color pattern [$color] not found! D:'; +} + +Color? _getRGBColorFromString(String string) { + string = string.replaceAll(" ", ""); // pseudo-trimming + if (string.startsWith("rgb(") && string.endsWith(")")) { + // Correct + string = string.replaceAll("rgb(", ""); + string = string.replaceAll(")", ""); + List rgb = string.split(","); + if (rgb.length == 3) { + int r = int.parse(rgb[0]); + int g = int.parse(rgb[1]); + int b = int.parse(rgb[2]); + return new Color.fromARGB(255, r, g, b); + } + return null; + } + return null; +} + +bool _hasCorrectHexPattern(String string) { + string = string.replaceAll("#", ""); + String validChars = "0123456789AaBbCcDdEeFf"; + for (int i = 0; i < string.length; i++) { + if (!validChars.contains(string[i])) { + return false; + } + } + return true; +} diff --git a/lib/conversion.dart b/lib/conversion.dart index 12f8a81..760ab0d 100644 --- a/lib/conversion.dart +++ b/lib/conversion.dart @@ -2,13 +2,11 @@ import 'dart:math' as Math; import 'dart:ui'; import 'package:flutter/painting.dart'; -import 'package:meta/meta.dart'; import 'hsl_color.dart'; import 'util.dart'; -HslColor rgbToHsl( - {@required double r, @required double g, @required double b}) { +HslColor rgbToHsl({required double r, required double g, required double b}) { r = bound01(r, 255.0); g = bound01(g, 255.0); b = bound01(b, 255.0); @@ -67,7 +65,7 @@ HSVColor colorToHsv(Color color) { } HSVColor rgbToHsv( - {@required int r, @required int g, @required int b, @required int a}) { + {required int r, required int g, required int b, required int a}) { return colorToHsv(Color.fromARGB(a, r, g, b)); } diff --git a/lib/hsl_color.dart b/lib/hsl_color.dart index 2a83f5d..0abf1d5 100644 --- a/lib/hsl_color.dart +++ b/lib/hsl_color.dart @@ -4,7 +4,7 @@ class HslColor { double l; double a; - HslColor({this.h, this.s, this.l, this.a = 0.0}); + HslColor({required this.h, required this.s, required this.l, this.a = 0.0}); String toString() { return "HSL(h: $h, s: $s, l: $l, a: $a)"; diff --git a/lib/tinycolor.dart b/lib/tinycolor.dart index 06e429d..1fcef24 100644 --- a/lib/tinycolor.dart +++ b/lib/tinycolor.dart @@ -2,9 +2,8 @@ import 'dart:math' as Math; import 'dart:ui'; import 'package:flutter/painting.dart'; -import 'package:meta/meta.dart'; -import 'package:pigment/pigment.dart'; +import 'color_from_string.dart'; import 'conversion.dart'; import 'hsl_color.dart'; import 'util.dart'; @@ -13,18 +12,16 @@ export 'hsl_color.dart'; export 'color_extension.dart'; class TinyColor { - Color originalColor; - Color _color; + final Color originalColor; + late Color _color; - TinyColor(Color color) { - this.originalColor = - Color.fromARGB(color.alpha, color.red, color.green, color.blue); + TinyColor(Color color) : this.originalColor = color { this._color = Color.fromARGB(color.alpha, color.red, color.green, color.blue); } factory TinyColor.fromRGB( - {@required int r, @required int g, @required int b, int a = 100}) { + {required int r, required int g, required int b, int a = 100}) { return TinyColor(Color.fromARGB(a, r, g, b)); } @@ -37,7 +34,7 @@ class TinyColor { } factory TinyColor.fromString(String string) { - return TinyColor(Pigment.fromString(string)); + return TinyColor(colorFromString(string)); } bool isDark() { @@ -142,7 +139,7 @@ class TinyColor { return TinyColor.fromHSL(hsl); } - TinyColor mix({@required Color input, int amount = 50}) { + TinyColor mix({required Color input, int amount = 50}) { final int p = (amount / 100).round(); final color = Color.fromARGB( (input.alpha - _color.alpha) * p + _color.alpha, diff --git a/pubspec.lock b/pubspec.lock index 544bf47..1d1928d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -7,49 +7,49 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.4.2" + version: "2.5.0-nullsafety.3" boolean_selector: dependency: transitive description: name: boolean_selector url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.0-nullsafety.3" characters: dependency: transitive description: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.1.0-nullsafety.5" charcode: dependency: transitive description: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.1.3" + version: "1.2.0-nullsafety.3" clock: dependency: transitive description: name: clock url: "https://pub.dartlang.org" source: hosted - version: "1.0.1" + version: "1.1.0-nullsafety.3" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.14.13" + version: "1.15.0-nullsafety.5" fake_async: dependency: transitive description: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.2.0-nullsafety.3" flutter: dependency: "direct main" description: flutter @@ -66,28 +66,21 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.8" + version: "0.12.10-nullsafety.3" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.1.8" + version: "1.3.0-nullsafety.6" path: dependency: transitive description: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.7.0" - pigment: - dependency: "direct main" - description: - name: pigment - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.3" + version: "1.8.0-nullsafety.3" sky_engine: dependency: transitive description: flutter @@ -99,56 +92,56 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.7.0" + version: "1.8.0-nullsafety.4" stack_trace: dependency: transitive description: name: stack_trace url: "https://pub.dartlang.org" source: hosted - version: "1.9.5" + version: "1.10.0-nullsafety.6" stream_channel: dependency: transitive description: name: stream_channel url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.0-nullsafety.3" string_scanner: dependency: transitive description: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.0.5" + version: "1.1.0-nullsafety.3" term_glyph: dependency: transitive description: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.2.0-nullsafety.3" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.17" + version: "0.2.19-nullsafety.6" typed_data: dependency: transitive description: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.3.0-nullsafety.5" vector_math: dependency: transitive description: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.0.8" + version: "2.1.0-nullsafety.5" sdks: - dart: ">=2.9.0-14.0.dev <3.0.0" + dart: ">=2.12.0-0.0 <3.0.0" flutter: ">=1.12.0 <3.0.0" diff --git a/pubspec.yaml b/pubspec.yaml index 1bb06c5..1c140d7 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -4,12 +4,10 @@ version: 1.0.3 homepage: https://github.com/FooStudio/tinycolor environment: - sdk: ">=2.6.0 <3.0.0" + sdk: ">=2.12.0-0 <3.0.0" flutter: ">=1.12.0 <3.0.0" dependencies: - pigment: ^1.0.3 - meta: ^1.2.2 flutter: sdk: flutter From 467de0737179574b59aa6c38b34ed4e786aca5b8 Mon Sep 17 00:00:00 2001 From: Leonardo da Silva Date: Tue, 4 May 2021 08:17:21 -0300 Subject: [PATCH 2/5] updated dependencies --- pubspec.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index 1d1928d..52ed0ad 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -7,49 +7,49 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.5.0-nullsafety.3" + version: "2.5.0" boolean_selector: dependency: transitive description: name: boolean_selector url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.3" + version: "2.1.0" characters: dependency: transitive description: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.5" + version: "1.1.0" charcode: dependency: transitive description: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.3" + version: "1.2.0" clock: dependency: transitive description: name: clock url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.3" + version: "1.1.0" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.15.0-nullsafety.5" + version: "1.15.0" fake_async: dependency: transitive description: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.3" + version: "1.2.0" flutter: dependency: "direct main" description: flutter @@ -66,21 +66,21 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.10-nullsafety.3" + version: "0.12.10" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.3.0-nullsafety.6" + version: "1.3.0" path: dependency: transitive description: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.8.0-nullsafety.3" + version: "1.8.0" sky_engine: dependency: transitive description: flutter @@ -92,56 +92,56 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.0-nullsafety.4" + version: "1.8.0" stack_trace: dependency: transitive description: name: stack_trace url: "https://pub.dartlang.org" source: hosted - version: "1.10.0-nullsafety.6" + version: "1.10.0" stream_channel: dependency: transitive description: name: stream_channel url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.3" + version: "2.1.0" string_scanner: dependency: transitive description: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.3" + version: "1.1.0" term_glyph: dependency: transitive description: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.3" + version: "1.2.0" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.19-nullsafety.6" + version: "0.2.19" typed_data: dependency: transitive description: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.3.0-nullsafety.5" + version: "1.3.0" vector_math: dependency: transitive description: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.5" + version: "2.1.0" sdks: dart: ">=2.12.0-0.0 <3.0.0" - flutter: ">=1.12.0 <3.0.0" + flutter: ">=1.12.0" From eb3efbdc4e514e5fba66709601c0a5037ddca046 Mon Sep 17 00:00:00 2001 From: Leonardo da Silva Date: Tue, 4 May 2021 08:17:46 -0300 Subject: [PATCH 3/5] remove unnecessary late --- lib/tinycolor.dart | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/lib/tinycolor.dart b/lib/tinycolor.dart index 1fcef24..e784ce0 100644 --- a/lib/tinycolor.dart +++ b/lib/tinycolor.dart @@ -13,12 +13,11 @@ export 'color_extension.dart'; class TinyColor { final Color originalColor; - late Color _color; + Color _color; - TinyColor(Color color) : this.originalColor = color { - this._color = - Color.fromARGB(color.alpha, color.red, color.green, color.blue); - } + TinyColor(Color color) + : this.originalColor = color, + _color = color.copy(); factory TinyColor.fromRGB( {required int r, required int g, required int b, int a = 100}) { @@ -159,3 +158,9 @@ class TinyColor { return _color; } } + +extension on Color { + Color copy() { + return Color.fromARGB(alpha, red, green, blue); + } +} From 87f654ce7b79daddfbe7cdf7b7d9bb27574a8b89 Mon Sep 17 00:00:00 2001 From: Leonardo da Silva Date: Tue, 4 May 2021 08:20:16 -0300 Subject: [PATCH 4/5] using Pigment lib instead of reimplementing colorFromString --- lib/color_from_string.dart | 226 ------------------------------------- lib/tinycolor.dart | 4 +- pubspec.lock | 9 +- pubspec.yaml | 1 + 4 files changed, 11 insertions(+), 229 deletions(-) delete mode 100644 lib/color_from_string.dart diff --git a/lib/color_from_string.dart b/lib/color_from_string.dart deleted file mode 100644 index 7510abd..0000000 --- a/lib/color_from_string.dart +++ /dev/null @@ -1,226 +0,0 @@ -// inlined from package Pigment, since it is not being supported anymore -import 'dart:ui'; - -const _cssColors = { - 'lightsalmon': '#FFA07A', - 'salmon': '#FA8072', - 'darksalmon': '#E9967A', - 'lightcoral': '#F08080', - 'indianred': '#CD5C5C', - 'crimson': '#DC143C', - 'firebrick': '#B22222', - 'red': '#FF0000', - 'darkred': '#8B0000', - 'coral': '#FF7F50', - 'tomato': '#FF6347', - 'orangered': '#FF4500', - 'gold': '#FFD700', - 'orange': '#FFA500', - 'darkorange': '#FF8C00', - 'lightyellow': '#FFFFE0', - 'lemonchiffon': '#FFFACD', - 'lightgoldenrodyellow': '#FAFAD2', - 'papayawhip': '#FFEFD5', - 'moccasin': '#FFE4B5', - 'peachpuff': '#FFDAB9', - 'palegoldenrod': '#EEE8AA', - 'khaki': '#F0E68C', - 'darkkhaki': '#BDB76B', - 'yellow': '#FFFF00', - 'awngreen': '#7CFC00', - 'chartreuse': '#7FFF00', - 'limegreen': '#32CD32', - 'lime': '#00FF00', - 'forestgreen': '#228B22', - 'green': '#008000', - 'darkgreen': '#006400', - 'greenyellow': '#ADFF2F', - 'yellowgreen': '#9ACD32', - 'springgreen': '#00FF7F', - 'mediumspringgreen': '#00FA9A', - 'lightgreen': '#90EE90', - 'palegreen': '#98FB98', - 'darkseagreen': '#8FBC8F', - 'mediumseagreen': '#3CB371', - 'seagreen': '#2E8B57', - 'olive': '#808000', - 'darkolivegreen': '#556B2F', - 'olivedrab': '#6B8E23', - 'lightcyan': '#E0FFFF', - 'cyan': '#00FFFF', - 'aqua': '#00FFFF', - 'aquamarine': '#7FFFD4', - 'mediumaquamarine': '#66CDAA', - 'paleturquoise': '#AFEEEE', - 'turquoise': '#40E0D0', - 'mediumturquoise': '#48D1CC', - 'darkturquoise': '#00CED1', - 'lightseagreen': '#20B2AA', - 'cadetblue': '#5F9EA0', - 'darkcyan': '#008B8B', - 'teal': '#008080', - 'powderblue': '#B0E0E6', - 'lightblue': '#ADD8E6', - 'lightskyblue': '#87CEFA', - 'skyblue': '#87CEEB', - 'deepskyblue': '#00BFFF', - 'lightsteelblue': '#B0C4DE', - 'dodgerblue': '#1E90FF', - 'cornflowerblue': '#6495ED', - 'steelblue': '#4682B4', - 'royalblue': '#4169E1', - 'blue': '#0000FF', - 'mediumblue': '#0000CD', - 'darkblue': '#00008B', - 'navy': '#000080', - 'midnightblue': '#191970', - 'mediumslateblue': '#7B68EE', - 'slateblue': '#6A5ACD', - 'darkslateblue': '#483D8B', - 'lavender': '#E6E6FA', - 'thistle': '#D8BFD8', - 'plum': '#DDA0DD', - 'violet': '#EE82EE', - 'orchid': '#DA70D6', - 'fuchsia': '#FF00FF', - 'magenta': '#FF00FF', - 'mediumorchid': '#BA55D3', - 'mediumpurple': '#9370DB', - 'blueviolet': '#8A2BE2', - 'darkviolet': '#9400D3', - 'darkorchid': '#9932CC', - 'darkmagenta': '#8B008B', - 'purple': '#800080', - 'indigo': '#4B0082', - 'pink': '#FFC0CB', - 'lightpink': '#FFB6C1', - 'hotpink': '#FF69B4', - 'deeppink': '#FF1493', - 'palevioletred': '#DB7093', - 'mediumvioletred': '#C71585', - 'white': '#FFFFFF', - 'snow': '#FFFAFA', - 'honeydew': '#F0FFF0', - 'mintcream': '#F5FFFA', - 'azure': '#F0FFFF', - 'aliceblue': '#F0F8FF', - 'ghostwhite': '#F8F8FF', - 'whitesmoke': '#F5F5F5', - 'seashell': '#FFF5EE', - 'beige': '#F5F5DC', - 'oldlace': '#FDF5E6', - 'floralwhite': '#FFFAF0', - 'ivory': '#FFFFF0', - 'antiquewhite': '#FAEBD7', - 'linen': '#FAF0E6', - 'lavenderblush': '#FFF0F5', - 'mistyrose': '#FFE4E1', - 'gainsboro': '#DCDCDC', - 'lightgray': '#D3D3D3', - 'silver': '#C0C0C0', - 'darkgray': '#A9A9A9', - 'gray': '#808080', - 'dimgray': '#696969', - 'lightslategray': '#778899', - 'slategray': '#708090', - 'darkslategray': '#2F4F4F', - 'black': '#000000', - 'cornsilk': '#FFF8DC', - 'blanchedalmond': '#FFEBCD', - 'bisque': '#FFE4C4', - 'navajowhite': '#FFDEAD', - 'wheat': '#F5DEB3', - 'burlywood': '#DEB887', - 'tan': '#D2B48C', - 'rosybrown': '#BC8F8F', - 'sandybrown': '#F4A460', - 'goldenrod': '#DAA520', - 'peru': '#CD853F', - 'chocolate': '#D2691E', - 'saddlebrown': '#8B4513', - 'sienna': '#A0522D', - 'brown': '#A52A2A', - 'maroon': '#800000', -}; - -Color colorFromString(String color) { - color = color.trim(); - - final rgbColor = _getRGBColorFromString(color); - if (rgbColor != null) { - return rgbColor; - } - - Color? finalColor; - if (_hasCorrectHexPattern(color)) { - color = color.replaceAll("#", ""); - int size = color.length; - if (size == 6 || size == 3) { - if (size == 3) { - color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2]; - } - - int value = int.parse(color, radix: 16); - value = value + 0xFF000000; - finalColor = new Color(value); - } else if (size == 8 || size == 4) { - if (size == 4) { - color = color[0] + - color[0] + - color[1] + - color[1] + - color[2] + - color[2] + - color[3] + - color[3]; - } - String alpha = color.substring(6); - color = alpha + color.substring(0, 6); - int value = int.parse(color, radix: 16); - finalColor = new Color(value); - } - } - - if (finalColor != null) { - return finalColor; - } - - var namedColor = _cssColors[color]; - if (namedColor != null && namedColor != "") { - namedColor = namedColor.replaceAll("#", ""); - int value = int.parse(namedColor, radix: 16); - value = value + 0xFF000000; - return new Color(value); - } - - throw 'color pattern [$color] not found! D:'; -} - -Color? _getRGBColorFromString(String string) { - string = string.replaceAll(" ", ""); // pseudo-trimming - if (string.startsWith("rgb(") && string.endsWith(")")) { - // Correct - string = string.replaceAll("rgb(", ""); - string = string.replaceAll(")", ""); - List rgb = string.split(","); - if (rgb.length == 3) { - int r = int.parse(rgb[0]); - int g = int.parse(rgb[1]); - int b = int.parse(rgb[2]); - return new Color.fromARGB(255, r, g, b); - } - return null; - } - return null; -} - -bool _hasCorrectHexPattern(String string) { - string = string.replaceAll("#", ""); - String validChars = "0123456789AaBbCcDdEeFf"; - for (int i = 0; i < string.length; i++) { - if (!validChars.contains(string[i])) { - return false; - } - } - return true; -} diff --git a/lib/tinycolor.dart b/lib/tinycolor.dart index e784ce0..eda3763 100644 --- a/lib/tinycolor.dart +++ b/lib/tinycolor.dart @@ -2,8 +2,8 @@ import 'dart:math' as Math; import 'dart:ui'; import 'package:flutter/painting.dart'; +import 'package:pigment/pigment.dart'; -import 'color_from_string.dart'; import 'conversion.dart'; import 'hsl_color.dart'; import 'util.dart'; @@ -33,7 +33,7 @@ class TinyColor { } factory TinyColor.fromString(String string) { - return TinyColor(colorFromString(string)); + return TinyColor(Pigment.fromString(string)); } bool isDark() { diff --git a/pubspec.lock b/pubspec.lock index 52ed0ad..7ffb8e0 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -81,6 +81,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.8.0" + pigment: + dependency: "direct main" + description: + name: pigment + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.4" sky_engine: dependency: transitive description: flutter @@ -143,5 +150,5 @@ packages: source: hosted version: "2.1.0" sdks: - dart: ">=2.12.0-0.0 <3.0.0" + dart: ">=2.12.0 <3.0.0" flutter: ">=1.12.0" diff --git a/pubspec.yaml b/pubspec.yaml index 1c140d7..510a382 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -10,6 +10,7 @@ environment: dependencies: flutter: sdk: flutter + pigment: ^1.0.4 dev_dependencies: flutter_test: From d3710c17dd9cce39ec4da046c2a4888c522436c2 Mon Sep 17 00:00:00 2001 From: Leonardo da Silva Date: Tue, 13 Jul 2021 15:42:20 -0300 Subject: [PATCH 5/5] rename method copy -> clone make extension private access more explicit --- lib/tinycolor.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/tinycolor.dart b/lib/tinycolor.dart index eda3763..ffc3858 100644 --- a/lib/tinycolor.dart +++ b/lib/tinycolor.dart @@ -17,7 +17,7 @@ class TinyColor { TinyColor(Color color) : this.originalColor = color, - _color = color.copy(); + _color = color.clone(); factory TinyColor.fromRGB( {required int r, required int g, required int b, int a = 100}) { @@ -159,8 +159,8 @@ class TinyColor { } } -extension on Color { - Color copy() { +extension _ on Color { + Color clone() { return Color.fromARGB(alpha, red, green, blue); } }