How do I use hexadecimal color strings in Flutter? How do I use hexadecimal color strings in Flutter? dart dart

How do I use hexadecimal color strings in Flutter?


In Flutter the Color class only accepts integers as parameters, or there is the possibility to use the named constructors fromARGB and fromRGBO.

So we only need to convert the string #b74093 to an integer value. Also we need to respect that opacity always needs to be specified.
255 (full) opacity is represented by the hexadecimal value FF. This already leaves us with 0xFF. Now, we just need to append our color string like this:

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

The letters can by choice be capitalized or not:

const color = const Color(0xFFB74093);

If you want to use percentage opacity values, you can replace the first FF with the values from this table (also works for the other color channels).

Extension class

Starting with Dart 2.6.0, you can create an extension for the Color class that lets you use hexadecimal color strings to create a Color object:

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

The fromHex method could also be declared in a mixin or class because the HexColor name needs to be explicitly specified in order to use it, but the extension is useful for the toHex method, which can be used implicitly. Here is an example:

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

Disadvantage of using hex strings

Many of the other answers here show how you can dynamically create a Color from a hex string, like I did above. However, doing this means that the color cannot be a const.
Ideally, you would assign your colors the way I explained in the first part of this answer, which is more efficient when instantiating colors a lot, which is usually the case for Flutter widgets.


The Color class expects an ARGB integer. Since you try to use it with an RGB value, represent it as int and prefix it with 0xff.

Color mainColor = Color(0xffb74093);

If you get annoyed by this and still wish to use strings, you can extend Color and add a string constructor

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

Usage

Color color1 = HexColor("b74093");Color color2 = HexColor("#b74093");Color color3 = HexColor("#88b74093"); // If you wish to use ARGB format


If you want to use the hexadecimal code of a color which is in the format #123456, then it is very easy to do. Create a variable of type Color and assign the following values to it.

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.

Use myhexcolor and you are ready to go.

If you want to change the opacity of color direct from the hexadecimal code, then change the ff value in 0xff to the respective value from the table below.

Hexadecimal opacity values

100% — FF95% — F290% — E685% — D980% — CC75% — BF70% — B365% — A660% — 9955% — 8C50% — 8045% — 7340% — 6635% — 5930% — 4D25% — 4020% — 3315% — 2610% — 1A5% — 0D0% — 00