我们的数据库颜色保存为String
,如“#AABBCC”,所以我基本上寻找这样的函数:Color.parseColor("#AABBCC");
for Flutter
Color类需要像这样的Color(0xFF42A5F5)
所以我需要将"#AABBCC"
转换为0xFFAABBCC
/// Construct a color from a hex code string, of the format #RRGGBB.
Color hexToColor(String code) {
return new Color(int.parse(code.substring(1, 7), radix: 16) + 0xFF000000);
}
一个简单的字符串替换将使用正确的语法:
String html_colour = '#AAABBCC';
String fixed_colour = html_colour.replace(new RegExp(r'#'), '0xFF');
应该这样做。
我最终这样做了:
hexStringToHexInt(String hex) {
hex = hex.replaceFirst('#', '');
hex = hex.length == 6 ? 'ff' + hex : hex;
int val = int.parse(hex, radix: 16);
return val;
}
我在我的项目中使用此函数,该函数处理将十六进制字符串转换为颜色。
Color hexToColor(String hexString, {String alphaChannel = 'FF'}) {
return Color(int.parse(hexString.replaceFirst('#', '0x$alphaChannel')));
}
这里的想法是,现在你可以传递这个函数一个十六进制字符串,除了你可以通过一个alpha通道之外,这个'#ffffff'。 alpha通道的作用是处理颜色的不透明度,您可以直接将其传递给Color。
关于alpha通道,FF部分是0-100的十六进制表示,如:
0 = 00 1 = 03 2 = 05 ... 9 = 17 ... 10 = 1A 11 = 1C 12 = 1F ... 99 = FC 100 = FF
假设你想将#000000转换为一个颜色,并且它具有0.1不透明度。您可以像这样简单地调用此函数:
hexToColor('#000000', alphaChannel: '1A');
如果你这样称呼它:
hexToColor('#000000');
然后它只会返回一个不透明度的黑色。希望这将有助于任何想知道如何进一步处理不透明度和颜色处理的人。