hex2rgb static method

List<num> hex2rgb(
  1. dynamic arg
)

Implementation

static List<num> hex2rgb(dynamic arg) {
  if (arg is int) {
    return [(arg >> 16) & 0xFF, (arg >> 8) & 0xFF, arg & 0xFF];
  }
  if (arg is num) {
    int intval = arg.floor();
    return [(intval >> 16) & 0xFF, (intval >> 8) & 0xFF, intval & 0xFF];
  }
  final str = arg.toString();
  final len = str.length;
  // Skip '#' prefix if present
  final start = (len > 0 && str.codeUnitAt(0) == 0x23) ? 1 : 0;
  final hexLen = len - start;

  if (hexLen == 6) {
    final r1 = _hexVal(str.codeUnitAt(start));
    final r2 = _hexVal(str.codeUnitAt(start + 1));
    final g1 = _hexVal(str.codeUnitAt(start + 2));
    final g2 = _hexVal(str.codeUnitAt(start + 3));
    final b1 = _hexVal(str.codeUnitAt(start + 4));
    final b2 = _hexVal(str.codeUnitAt(start + 5));
    if (r1 < 0 || r2 < 0 || g1 < 0 || g2 < 0 || b1 < 0 || b2 < 0) {
      return [0, 0, 0];
    }
    return [(r1 << 4) | r2, (g1 << 4) | g2, (b1 << 4) | b2];
  }

  if (hexLen == 3) {
    final r = _hexVal(str.codeUnitAt(start));
    final g = _hexVal(str.codeUnitAt(start + 1));
    final b = _hexVal(str.codeUnitAt(start + 2));
    if (r < 0 || g < 0 || b < 0) return [0, 0, 0];
    return [(r << 4) | r, (g << 4) | g, (b << 4) | b];
  }

  return [0, 0, 0];
}