Как преобразовать цвета строки шестнадцатеричных как #b74093
к Color
в флаттере?
Во Flutter Color
класс принимает только целые числа в качестве параметров , или есть возможность использовать именованные конструкторы fromARGB
и fromRGBO
.
Таким образом, нам нужно только преобразовать строку #b74093
в целочисленное значение. Также мы должны уважать, что непрозрачность всегда должна быть указана.
255
(полная) непрозрачность представлена шестнадцатеричным значением FF
. Это уже оставляет нас с 0xFF
. Теперь нам просто нужно добавить нашу цветовую строку следующим образом:
const color = const Color(0xffb74093); // Second `const` is optional in assignments.
Буквы могут быть выбраны с большой буквы или нет:
const color = const Color(0xFFB74093);
Начиная с Dart 2.6.0
, вы можете создатьextension
Color
класс для класса, который позволяет использовать шестнадцатеричные строки цвета для создания Color
объекта:
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
Метод также может быть объявлен в mixin
или class
потому , что HexColor
имя должно быть явно указано для того , чтобы использовать его, но расширение полезно для toHex
метода, который может быть использован в неявном виде . Вот пример:
void main() {
final Color color = HexColor.fromHex('#aabbcc');
print(color.toHex());
print(const Color(0xffaabbcc).toHex());
}
Многие другие ответы здесь показывают, как вы можете динамически создать Color
из шестнадцатеричной строки, как я делал выше. Однако это означает, что цвет не может быть const
.
В идеале вы должны назначать свои цвета так, как я объяснил в первой части этого ответа, что более эффективно при многократном создании экземпляров цветов, что обычно имеет место для виджетов Flutter.
HexColor.fromHex
работает, ноColor.fromHex
не работает).0x
просто указывает, что следующие цифры будут проанализированы как шестнадцатеричные 🙃Color
Класс ожидает , что целое число ARGB. Поскольку вы пытаетесь использовать его соRGB
значением, представьте его как int и добавьте к нему префикс0xff
.Если вас это раздражает и вы все еще хотите использовать строки, вы можете расширить
Color
и добавить конструктор строкиспользование
источник
Если вы хотите использовать шестнадцатеричный код цвета в этом формате # 123456, тогда его очень легко использовать, создайте переменные типа Color и присвойте ему следующие значения.
используйте myhexcolor и вы готовы к работе.
если вы хотите изменить непрозрачность цвета непосредственно из шестнадцатеричного кода, тогда измените значение ff в 0xff на значение соответственно из таблицы ниже.
Шестнадцатеричные значения непрозрачности
100% - FF
95% - F2
90% - E6
85% - D9
80% - СС
75% - BF
70% - B3
65% - А6
60% - 99
55% - 8C
50% - 80
45% - 73
40% - 66
35% - 59
30% - 4D
25% - 40
20% - 33
15% - 26
10% - 1А
5% - 0D
0% - 00
источник
Чтобы преобразовать шестнадцатеричную строку в int, выполните:
Пример звонка:
источник
Простая функция без использования класса:
Вы можете использовать это так:
источник
Color(int.parse('#000000'.replaceAll('#', '0xff')))
Простой способ :
Использование:
источник
Есть другое решение. Если вы сохраняете свой цвет как обычную шестнадцатеричную строку и не хотите добавлять к ней непрозрачность (начиная с FF): 1) Преобразуйте вашу шестнадцатеричную строку в int. Чтобы преобразовать шестнадцатеричную строку в целое число, выполните одно из следующих действий:
или
в качестве префикса 0x (или -0x) по умолчанию для int.parse устанавливается основание 16.
2) Добавьте непрозрачность к вашему цвету через код
источник
ThemeData
.Во Flutter создайте цвет из RGB с альфа, используйте
Как использовать hex-цвет:
Hex-цвет с непрозрачностью:
// или изменить значение "FF"
Для получения дополнительной информации перейдите по официальной ссылке https://api.flutter.dev/flutter/dart-ui/Color-class.html.
источник
utils.dart
пример использования
источник
Для общего ознакомления. Существует более простой способ использования библиотеки Supercharged . Несмотря на то, что вы можете использовать методы расширения со всеми упомянутыми решениями, вы найдете практический набор пользовательских библиотек.
Проще, правда?
Перегруженный
источник
"#b74093"
? ХОРОШО...К HEX рецепту
источник
Импортируйте новый класс и используйте его следующим образом
HexToColor('#F2A03D')
источник
Я пропустил очевидный ответ, используя шестнадцатеричные числа для конструктора fromRGB:
источник
Вы можете нажать на Color Widget, и он расскажет вам гораздо глубже о том, как эти буквы обозначают. Вы также можете использовать метод Color.fromARGB () для создания пользовательских цветов, что намного проще для меня. Используйте веб-сайт Flutter Doctor Color Picker, чтобы выбрать любой цвет, который вы хотите для своего приложения флаттера.
источник
Не знаю, почему это сбито, это было решением для меня.
Единственный способ, который не требует дополнительных шагов
источник
Вы можете использовать этот пакет from_css_color, чтобы выйти
Color
из шестнадцатеричной строки. Он поддерживает как трех-, так и шестизначную шестнадцатеричную запись RGB.Для оптимизации создайте экземпляр Color один раз для каждого цвета и сохраните его где-нибудь для дальнейшего использования.
источник