乐闻世界logo
搜索文章和话题

如何在 Flutter 中使用十六进制颜色字符串?

9 个月前提问
5 个月前修改
浏览次数207

6个答案

1
2
3
4
5
6

在 Flutter 中,您通常会使用 Color 类来表示颜色,它接受一个 ARGB 整数作为参数。十六进制颜色字符串通常表示为 RGB 或 ARGB 格式,例如 "#RRGGBB""#AARRGGBB",这里的 AA 是可选的,并表示透明度(alpha channel)。

为了使用十六进制颜色字符串,您需要将它转换成 Flutter 的 Color 对象。下面是如何做到这一点的步骤:

  1. 如果字符串不包含透明度(即长度为 6 个字符,如 "#RRGGBB"),您需要在字符串前面添加 "0xFF" 表示完全不透明。
  2. 使用 Dart 的 int.parse 函数将十六进制字符串转换为整数。
  3. 创建一个 Color 对象并传入转换后的整数值。

下面是一个例子:

dart
String hexColorStr = "#34A853"; // 一个示例颜色字符串,不带透明度 String hexColorStrWithAlpha = "#FF34A853"; // 这个字符串包括透明度(FF 表示完全不透明) // 如果不包含透明度值,添加“0xFF”来使用完全不透明的颜色 hexColorStr = "0xFF" + hexColorStr.substring(1); // 将颜色字符串转换成十六进制整数并创建 Color 对象 Color color = Color(int.parse(hexColorStr)); // 如果包括透明度值,直接解析 Color colorWithAlpha = Color(int.parse(hexColorStrWithAlpha.substring(1), radix: 16)); // 现在可以在 Flutter 中使用这个颜色了,例如: Container( color: color, // 或者用 colorWithAlpha child: ... );

请注意,在 Dart 中,十六进制数是以 "0x" 开头的,因此我们在解析时需要去掉字符串中的 "#" 并替换为 "0x"(或者直接添加 "0xFF" 作为不透明度前缀)。

以上就是在 Flutter 中使用十六进制颜色字符串的一种方法。

2024年6月29日 12:07 回复

在 Flutter 中,Color只接受_整数作为参数_,或者可以使用命名构造函数fromARGBfromRGBO

所以我们只需要将字符串转换#b74093为整数值即可。此外,我们还需要尊重始终需要指定的不透明度。
255(完全)不透明度由十六进制值表示FF。这已经给我们留下了**0xFF**。现在,我们只需要像这样附加颜色字符串:

shell
const color = const Color(0xffb74093); // Second `const` is optional in assignments.

字母可以选择大写或不大写:

shell
const color = const Color(0xFFB74093);

如果您想使用_不透明度百分比值,您可以_用此表FF中的值替换第一个值(也适用于其他颜色通道)。

扩展类

从 Dart 开始2.6.0,您可以为该类创建一个extensionColor允许您使用十六进制颜色字符串来创建对象的for类Color

shell
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')}'; }

该方法也可以在orfromHex中声明,因为需要显式指定名称才能使用它,但扩展对于该方法很有用,可以隐式使用。这是一个例子:mixin``class``HexColor``toHex

shell
void main() { final Color color = HexColor.fromHex('#aabbcc'); print(color.toHex()); print(const Color(0xffaabbcc).toHex()); }

使用十六进制字符串的缺点

这里的许多其他答案都展示了如何Color从十六进制字符串动态创建 a ,就像我上面所做的那样。然而,这样做意味着颜色不能是const.
理想情况下,您可以按照我在本答案第一部分中解释的方式分配颜色,这在大量实例化颜色时更有效,这通常是 Flutter 小部件的情况。

2024年6月29日 12:07 回复

该类Color需要一个 ARGB 整数。_由于您尝试将其与RGB_值一起使用,因此请将其表示为_int_并添加前缀0xff.

shell
Color mainColor = Color(0xffb74093);

如果您对此感到烦恼并且仍然希望使用字符串,您可以扩展Color并添加一个字符串构造函数

shell
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)); }

用法

shell
Color color1 = HexColor("b74093"); Color color2 = HexColor("#b74093"); Color color3 = HexColor("#88b74093"); // If you wish to use ARGB format
2024年6月29日 12:07 回复

如果你想使用格式为#123456的颜色的十六进制代码,那么这很容易做到。创建一个 Color 类型的变量并为其分配以下值。

shell
Color myHexColor = Color(0xff123456) // Here you notice I use the 0xff and that is the opacity or transparency // of the color and you can also change these values.

使用 myHexColor 就可以开始了。

如果要直接从十六进制代码更改颜色的不透明度,请将_0xff中的__ff_值更改为下表中的相应值。(或者你可以使用

shell
myHexColor.withOpacity(0.2)

这是更简单的方法。0.2 是平均 20% 不透明度)

十六进制不透明度值

shell
100% — FF 95% — F2 90% — E6 85% — D9 80% — CC 75% — BF 70% — B3 65% — A6 60% — 99 55% — 8C 50% — 80 45% — 73 40% — 66 35% — 59 30% — 4D 25% — 40 20% — 33 15% — 26 10% — 1A 5% — 0D 0% — 00
2024年6月29日 12:07 回复

如何在 Flutter 中使用十六进制颜色代码#B74093

只需从十六进制颜色代码中删除该#符号,并在 Color 类中添加 0xFF 和颜色代码:

#b74093``Color(0xffb74093)在 Flutter 中将会变成

#B74093``Color(0xFFB74093)在 Flutter 中将会变成

inff or FF定义Color(0xFFB74093)不透明度。

Dartpad 中所有不透明度类型的十六进制颜色示例

在此输入图像描述

2024年6月29日 12:07 回复

简单的方法:

shell
String color = yourHexColor.replaceAll('#', '0xff');

用法:

shell
Container( color: Color(int.parse(color)), )
2024年6月29日 12:07 回复

你的答案