toHex method

  1. @override
String toHex()

Implementation

@override
String toHex() {
  double _y = (l + 16) / 116,
      _x = a / 500 + _y,
      _z = _y - b / 200,
      _r,
      _g,
      _b;

  _x = 0.95047 *
      ((_x * _x * _x > 0.008856) ? _x * _x * _x : (_x - 16 / 116) / 7.787);
  _y = 1.00000 *
      ((_y * _y * _y > 0.008856) ? _y * _y * _y : (_y - 16 / 116) / 7.787);
  _z = 1.08883 *
      ((_z * _z * _z > 0.008856) ? _z * _z * _z : (_z - 16 / 116) / 7.787);

  _r = _x * 3.2406 + _y * -1.5372 + _z * -0.4986;
  _g = _x * -0.9689 + _y * 1.8758 + _z * 0.0415;
  _b = _x * 0.0557 + _y * -0.2040 + _z * 1.0570;

  _r = (_r > 0.0031308) ? (1.055 * pow(_r, 1 / 2.4) - 0.055) : 12.92 * _r;
  _g = (_g > 0.0031308) ? (1.055 * pow(_g, 1 / 2.4) - 0.055) : 12.92 * _g;
  _b = (_b > 0.0031308) ? (1.055 * pow(_b, 1 / 2.4) - 0.055) : 12.92 * _b;

  Function toHex = (double x) {
    var hex = (x * 255).round().toRadixString(16);
    return hex.length == 1 ? '0' + hex : hex;
  };
  return "#" +
      toHex(max(0, min(1, _r)).toDouble()) +
      toHex(max(0, min(1, _g)).toDouble()) +
      toHex(max(0, min(1, _b)).toDouble());
}