如何转换一个十六进制颜色字符串像#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);
该Color
班期望一个RGB
整数.由于您尝试将其与0xff
值一起使用,因此将其表示为int并为其添加前缀Color
.
Color mainColor = Color(0xffb74093);
如果您对此感到恼火并仍希望使用字符串,则可以扩展Color
并添加字符串构造函数
class HexColor extends Color { static int _getColorFromHex(String hexColor) { hexColor = hexColor.toUpperCase().replaceAll("#", ""); if (hexColor.length == 6) { hexColor = "FF" + hexColor; } return int.parse(hexColor, radix: 16); } HexColor(final String hexColor) : super(_getColorFromHex(hexColor)); }
用法
Color color1 = HexColor("b74093"); Color color2 = HexColor("#b74093"); Color color3 = HexColor("#88b74093"); // if you wish to use ARGB format
用0xff替换#
如果您的颜色是#e41749,则它将为0xffe41749
例
color : Color(0xffe41749);
要将十六进制字符串转换为int,请执行以下操作:
int hexToInt(String hex) { int val = 0; int len = hex.length; for (int i = 0; i < len; i++) { int hexDigit = hex.codeUnitAt(i); if (hexDigit >= 48 && hexDigit <= 57) { val += (hexDigit - 48) * (1 << (4 * (len - 1 - i))); } else if (hexDigit >= 65 && hexDigit <= 70) { // A..F val += (hexDigit - 55) * (1 << (4 * (len - 1 - i))); } else if (hexDigit >= 97 && hexDigit <= 102) { // a..f val += (hexDigit - 87) * (1 << (4 * (len - 1 - i))); } else { throw new FormatException("Invalid hexadecimal value"); } } return val; }
电话示例:
Color color=new Color(hexToInt("FFB74093"));
还有另一种解决方案.如果将颜色存储为普通十六进制字符串并且不想为其添加不透明度(前导FF):1)将十六进制字符串转换为int要将十六进制字符串转换为整数,请执行以下操作之一:
var myInt = int.parse(hexString, radix: 16);
要么
var myInt = int.parse("0x$hexString");
作为0x(或-0x)的前缀将使int.parse默认为16的基数.
2)通过代码为您的颜色添加不透明度
Color color = new Color(myInt).withOpacity(1.0);
一个不使用类的简单函数:
Color _colorFromHex(String hexColor) { hexColor = hexColor.replaceAll("#", ""); return Color(int.parse('FF' + hexColor, radix: 16)); }
和使用
Color color1 = _colorFromHex("b74093"); Color color2 = _colorFromHex("#b74093");