Flutter/Dart:将HEX颜色字符串转换为Color?

Jus*_*s10 10 string colors dart flutter

我们的数据库保存的颜色String类似于"#AABBCC",所以我基本上都在寻找这样的函数:Color.parseColor("#AABBCC");for Flutter

Color类需要这样的东西,Color(0xFF42A5F5)所以我需要转换"#AABBCC"0xFFAABBCC

Ric*_*eap 28

/// 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);
}
Run Code Online (Sandbox Code Playgroud)

  • 如果我想添加像 #AARRGGBB 或 #RRGGBBAA 这样的不透明度/alpha 该怎么办? (2认同)

Mer*_*ken 9

我在我的项目中使用这个函数来处理将十六进制字符串转换为颜色。

Color hexToColor(String hexString, {String alphaChannel = 'FF'}) {
  return Color(int.parse(hexString.replaceFirst('#', '0x$alphaChannel')));
}
Run Code Online (Sandbox Code Playgroud)

这里的想法是,现在您可以向此函数传递一个十六进制字符串,它类似于“#ffffff”,此外您还可以传递一个 alpha 通道。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 转换为 Color 并在其上设置 0.1 的不透明度。你可以像这样简单地调用这个函数:

hexToColor('#000000', alphaChannel: '1A');
Run Code Online (Sandbox Code Playgroud)

如果你只是这样称呼它:

hexToColor('#000000');
Run Code Online (Sandbox Code Playgroud)

然后它只会返回一个不透明度为 1 的黑色。希望这对想知道如何进一步处理不透明度和颜色处理的人有所帮助。


Jus*_*s10 5

我最终这样做了:

hexStringToHexInt(String hex) {
  hex = hex.replaceFirst('#', '');
  hex = hex.length == 6 ? 'ff' + hex : hex;
  int val = int.parse(hex, radix: 16);
  return val;
}
Run Code Online (Sandbox Code Playgroud)