Wie konvertiere ich eine hexadezimale Farbzeichenfolge wie #b74093
in eine Color
in Flutter?
In Flutter akzeptiert die Color
Klasse nur Ganzzahlen als Parameter , oder es besteht die Möglichkeit, die genannten Konstruktoren fromARGB
und zu verwenden fromRGBO
.
Wir müssen also nur die Zeichenfolge #b74093
in einen ganzzahligen Wert konvertieren . Wir müssen auch respektieren, dass die Deckkraft immer spezifiziert werden muss.
255
Die (volle) Deckkraft wird durch den Hexadezimalwert dargestellt FF
. Das lässt uns schon mit 0xFF
. Jetzt müssen wir nur noch unsere Farbzeichenfolge wie folgt anhängen:
const color = const Color(0xffb74093); // Second `const` is optional in assignments.
Die Buchstaben können wahlweise groß geschrieben werden oder nicht:
const color = const Color(0xFFB74093);
Beginnend mit Dart 2.6.0
können Sie eineextension
für die Color
Klasse erstellen , mit der Sie hexadezimale Farbzeichenfolgen verwenden können, um ein Color
Objekt zu erstellen :
extension HexColor on Color {
/// String is in the format "aabbcc" or "ffaabbcc" with an optional leading "#".
static Color fromHex(String hexString) {
final buffer = StringBuffer();
if (hexString.length == 6 || hexString.length == 7) buffer.write('ff');
buffer.write(hexString.replaceFirst('#', ''));
return Color(int.parse(buffer.toString(), radix: 16));
}
/// Prefixes a hash sign if [leadingHashSign] is set to `true` (default is `true`).
String toHex({bool leadingHashSign = true}) => '${leadingHashSign ? '#' : ''}'
'${alpha.toRadixString(16).padLeft(2, '0')}'
'${red.toRadixString(16).padLeft(2, '0')}'
'${green.toRadixString(16).padLeft(2, '0')}'
'${blue.toRadixString(16).padLeft(2, '0')}';
}
Die fromHex
Methode könnte auch in a deklariert werden mixin
oder class
weil der HexColor
Name explizit angegeben werden muss, um sie zu verwenden, aber die Erweiterung ist nützlich für die toHex
Methode, die implizit verwendet werden kann. Hier ist ein Beispiel:
void main() {
final Color color = HexColor.fromHex('#aabbcc');
print(color.toHex());
print(const Color(0xffaabbcc).toHex());
}
Viele der anderen Antworten hier zeigen, wie Sie Color
aus einer Hex-Zeichenfolge dynamisch eine erstellen können , wie ich es oben getan habe. Dies bedeutet jedoch, dass die Farbe nicht a sein kann const
.
Im Idealfall würden Sie Ihre Farben so zuweisen, wie ich es im ersten Teil dieser Antwort erklärt habe. Dies ist effizienter, wenn Sie häufig Farben instanziieren, was normalerweise bei Flutter-Widgets der Fall ist.
HexColor.fromHex
funktioniert, funktioniert aberColor.fromHex
nicht).0x
nur an, dass die folgenden Ziffern als hexadezimales 🙃 analysiert werdenDie
Color
Klasse erwartet eine ARGB-Ganzzahl. Da Sie versuchen, es mitRGB
value zu verwenden, stellen Sie es als int dar und stellen Sie ihm ein Präfix voran0xff
.Wenn Sie sich darüber ärgern und dennoch Zeichenfolgen verwenden möchten, können
Color
Sie einen Zeichenfolgenkonstruktor erweitern und hinzufügenVerwendung
quelle
Wenn Sie einen hexadezimalen Farbcode in diesem Format # 123456 verwenden möchten, können Sie ihn ganz einfach verwenden. Erstellen Sie eine A-Variable vom Typ Farbe und weisen Sie ihr die folgenden Werte zu.
benutze myhexcolor und du bist bereit zu gehen.
Wenn Sie die Deckkraft der Farbe direkt aus dem Hex-Code ändern möchten, ändern Sie den ff-Wert in 0xff in den entsprechenden Wert aus der folgenden Tabelle.
Hex-Opazitätswerte
100% - FF
95% - F2
90% - E6
85% - D9
80% - CC
75% - BF
70% - B3
65% - A6
60% - 99
55% - 8C
50% - 80
45% - 73
40% - 66
35% - 59
30% - 4D
25% - 40
20% - 33
15% - 26
10% - 1A
5% - 0D
0% - 00
quelle
Gehen Sie folgendermaßen vor, um von einem hexadezimalen String in einen int zu konvertieren:
Beispiel aufrufen:
quelle
Eine einfache Funktion ohne Verwendung einer Klasse:
Sie können es so verwenden:
quelle
Color(int.parse('#000000'.replaceAll('#', '0xff')))
Einfacher Weg:
Verwendung:
quelle
Es gibt eine andere Lösung. Wenn Sie Ihre Farbe als normale Hex-Zeichenfolge speichern und keine Deckkraft hinzufügen möchten (führendes FF): 1) Konvertieren Sie Ihre Hex-Zeichenfolge in int Um eine Hex-Zeichenfolge in eine Ganzzahl zu konvertieren, führen Sie einen der folgenden Schritte aus:
oder
Als Präfix von 0x (oder -0x) wird int.parse standardmäßig auf radix von 16 gesetzt.
2) Fügen Sie Ihrer Farbe über Code Deckkraft hinzu
quelle
ThemeData
.In Flutter wird eine Farbe aus RGB mit Alpha erstellt
So verwenden Sie Hex-Farbe:
Hex-Farbe mit Deckkraft:
// oder ändere den "FF" Wert
Für weitere Informationen folgen Sie dem offiziellen Link https://api.flutter.dev/flutter/dart-ui/Color-class.html
quelle
utils.dart
Beispiel Verwendung
quelle
Als allgemeine Referenz. Es gibt eine einfachere Möglichkeit, die Bibliothek Supercharged zu verwenden . Obwohl Sie mit allen genannten Lösungen Erweiterungsmethoden verwenden können, finden Sie ein praktisches Toolkit für die Benutzerbibliothek.
Einfacher, oder?
Aufgeladen
quelle
"#b74093"
? OK...Zum HEX-Rezept
quelle
Importieren Sie die neue Klasse und verwenden Sie sie so
HexToColor('#F2A03D')
quelle
Ich habe die offensichtliche Antwort mit Hex-Zahlen für den fromRGB-Konstruktor verpasst:
quelle
Sie können auf das Farb-Widget klicken und erfahren ausführlicher, wofür diese Buchstaben stehen. Sie können auch die Color.fromARGB () -Methode verwenden, um benutzerdefinierte Farben zu erstellen, was für mich viel einfacher ist. Verwenden Sie die Flutter Doctor Color Picker- Website, um eine beliebige Farbe für Ihre Flatteranwendung auszuwählen.
quelle
Ich weiß nicht, warum das niedergeschlagen wird, das war die Lösung für mich.
Nur so waren keine zusätzlichen Schritte erforderlich
quelle
Sie können dieses Paket from_css_color verwenden , um
Color
aus einer Hex-Zeichenfolge herauszukommen. Es unterstützt sowohl die drei- als auch die sechsstellige RGB-Hex-Notation.Erstellen Sie zur Optimierung einmal eine Farbinstanz für jede Farbe und speichern Sie sie zur späteren Verwendung an einem anderen Ort.
quelle