parseColor static method

Color? parseColor(
  1. dynamic value
)

Implementation

static Color? parseColor(dynamic value) {
  if (value == null) return null;
  if (value is Color) return value;
  if (value is int) {
    final a = (value >> 24) & 0xFF;
    final r = (value >> 16) & 0xFF;
    final g = (value >> 8) & 0xFF;
    final b = value & 0xFF;
    return Color.fromARGB(a, r, g, b);
  }

  if (value is String) {
    String hex = value.trim();
    if (hex.startsWith('#')) {
      hex = hex.substring(1);
      int a = 0xFF;
      int r = 0;
      int g = 0;
      int b = 0;

      if (hex.length == 8) {
        a = int.tryParse(hex.substring(0, 2), radix: 16) ?? 0xFF;
        r = int.tryParse(hex.substring(2, 4), radix: 16) ?? 0;
        g = int.tryParse(hex.substring(4, 6), radix: 16) ?? 0;
        b = int.tryParse(hex.substring(6, 8), radix: 16) ?? 0;
      } else if (hex.length == 6) {
        r = int.tryParse(hex.substring(0, 2), radix: 16) ?? 0;
        g = int.tryParse(hex.substring(2, 4), radix: 16) ?? 0;
        b = int.tryParse(hex.substring(4, 6), radix: 16) ?? 0;
      } else if (hex.length == 3) {
        r = int.tryParse('${hex[0]}${hex[0]}', radix: 16) ?? 0;
        g = int.tryParse('${hex[1]}${hex[1]}', radix: 16) ?? 0;
        b = int.tryParse('${hex[2]}${hex[2]}', radix: 16) ?? 0;
      } else {
        return null;
      }

      return Color.fromARGB(a, r, g, b);
    } else if (hex.startsWith('rgba(') || hex.startsWith('rgb(')) {
      final match = RegExp(r'\d+\.?\d*').allMatches(hex).toList();
      if (match.length >= 3) {
        final r = int.tryParse(match[0].group(0)!) ?? 0;
        final g = int.tryParse(match[1].group(0)!) ?? 0;
        final b = int.tryParse(match[2].group(0)!) ?? 0;
        double a = 1.0;
        if (match.length >= 4) {
          a = double.tryParse(match[3].group(0)!) ?? 1.0;
        }
        return Color.fromRGBO(r, g, b, a);
      }
    }
  }
  return null;
}