Jak przekonwertować szesnastkowy ciąg koloru jak #b74093
na Color
Flutter?
W Flutter Color
klasa przyjmuje tylko liczby całkowite jako parametry lub istnieje możliwość użycia nazwanych konstruktorów fromARGB
i fromRGBO
.
Musimy tylko przekonwertować ciąg #b74093
na wartość całkowitą. Musimy także uszanować, że zawsze należy określać krycie .
255
(pełne) krycie jest reprezentowane przez wartość szesnastkową FF
. To już nas pozostawia 0xFF
. Teraz musimy tylko dołączyć nasz ciąg kolorów w następujący sposób:
const color = const Color(0xffb74093); // Second `const` is optional in assignments.
Litery mogą być z wyboru pisane wielkimi literami lub nie:
const color = const Color(0xFFB74093);
Począwszy od Dart 2.6.0
, możesz utworzyćextension
dla Color
klasy, która pozwala używać ciągów kolorów szesnastkowych do tworzenia Color
obiektu:
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')}';
}
fromHex
Metoda może być również uznane w sposób mixin
albo class
dlatego, że HexColor
nazwa musi być wyraźnie określony w celu wykorzystania go, ale rozszerzenie jest użyteczny dla toHex
sposobu, który może być używany w sposób dorozumiany. Oto przykład:
void main() {
final Color color = HexColor.fromHex('#aabbcc');
print(color.toHex());
print(const Color(0xffaabbcc).toHex());
}
Wiele innych odpowiedzi tutaj pokazuje, jak możesz dynamicznie utworzyć Color
ciąg szesnastkowy, tak jak ja powyżej. Jednak wykonanie tego oznacza, że kolor nie może być const
.
Najlepiej byłoby przypisać kolory w sposób opisany w pierwszej części tej odpowiedzi, co jest bardziej wydajne przy częstym tworzeniu instancji kolorów, co zwykle ma miejsce w przypadku widżetów Flutter.
HexColor.fromHex
działa, aleColor.fromHex
nie działa).0x
po prostu wskazuje, że następujące cyfry zostaną przeanalizowane jako szesnastkowy 🙃Color
Klasy oczekuje całkowitą ARGB. Ponieważ próbujesz użyć go zRGB
wartością, przedstaw go jako int i przedrostek0xff
.Jeśli denerwujesz się tym i nadal chcesz używać ciągów, możesz rozszerzyć
Color
i dodać konstruktor ciągówstosowanie
źródło
jeśli chcesz użyć szesnastkowego kodu koloru, który jest w tym formacie # 123456, to bardzo łatwo go użyć, utwórz zmienne typu Color i przypisz mu następujące wartości.
użyj myhexcolor i jesteś gotowy do pracy.
jeśli chcesz zmienić krycie koloru bezpośrednio z kodu szesnastkowego, zmień wartość ff w 0xff na odpowiednio wartość z poniższej tabeli.
Wartości krycia szesnastkowego
100% - FF
95% - F2
90% - E6
85% - D9
80% - CC
75% - BF
70% - B3
65% - A6
60% - 99
55% - 8 ° C
50% - 80
45% - 73
40% - 66
35% - 59
30% - 4D
25% - 40
20% - 33
15% - 26
10% - 1A
5% - 0D
0% - 00
źródło
Aby przekonwertować z ciągu szesnastkowego na int, wykonaj:
Przykład połączenia:
źródło
Prosta funkcja bez użycia klasy:
Możesz użyć tego w następujący sposób:
źródło
Color(int.parse('#000000'.replaceAll('#', '0xff')))
Łatwy sposób :
Stosowanie:
źródło
Jest inne rozwiązanie. Jeśli przechowujesz kolor jako normalny ciąg szesnastkowy i nie chcesz do niego dodawać krycia (wiodące FF): 1) Konwertuj ciąg szesnastkowy na int Aby przekonwertować ciąg szesnastkowy na liczbę całkowitą, wykonaj jedną z następujących czynności:
lub
jako prefiks 0x (lub -0x) ustawi int. parse domyślnie na radix 16.
2) Dodaj krycie do koloru za pomocą kodu
źródło
ThemeData
.W Flutter tworzy kolor z RGB za pomocą alfa, użyj
Jak używać koloru szesnastkowego:
Kolor szesnastkowy z kryciem:
// lub zmień wartość „FF”
Aby uzyskać więcej, odwiedź oficjalny link https://api.flutter.dev/flutter/dart-ui/Color-class.html
źródło
utils.dart
przykładowe użycie
źródło
W celach informacyjnych. Istnieje prostszy sposób korzystania z biblioteki Supercharged . Chociaż możesz używać metod rozszerzenia ze wszystkimi wymienionymi rozwiązaniami, znajdziesz praktyczny zestaw narzędzi biblioteki użytkownika.
Łatwiej, prawda?
Doładowany
źródło
"#b74093"
? DOBRZE...Do przepisu HEX
źródło
Zaimportuj nową klasę i użyj jej w ten sposób
HexToColor('#F2A03D')
źródło
Brakowało mi oczywistej odpowiedzi przy użyciu liczb szesnastkowych dla konstruktora fromRGB:
źródło
Możesz kliknąć opcję Widżet kolorów, który poda znacznie głębsze informacje o znaczeniu tych liter. Możesz także użyć metody Color.fromARGB (), aby stworzyć niestandardowe kolory, co jest dla mnie znacznie łatwiejsze. Skorzystaj z witryny Flutter Doctor Color Picker, aby wybrać dowolny kolor dla swojej aplikacji trzepotania.
źródło
Nie wiem, dlaczego to jest powalane, to było dla mnie rozwiązanie.
Jedyny sposób, który nie wymagał dodatkowych kroków
źródło
Możesz użyć tego pakietu from_css_color, aby wydostać
Color
się z ciągu szesnastkowego. Obsługuje trzy- i sześciocyfrowy zapis szesnastkowy RGB.W celu optymalizacji utwórz instancję Color jeden raz dla każdego koloru i zapisz ją gdzieś do późniejszego wykorzystania.
źródło