Flutter 百分比透明度颜色转换

93 阅读3分钟

记录常用颜色透明度(0%-100%)对应表格 依据透明度int值,自动获取对应的16进制值,增加对String扩展

///增加String扩展
extension ToColor on String {
  Color toColor({int a = 100}) {
    return ColorUtils.toColor(this, a: a);
  }
}
//   100% : FF  75% : BF 50% : 80 25% : 40
//     99% : FC  74% : BD 49% : 7D 24% : 3D
//     98% : FA  73% : BA 48% : 7A 23% : 3B
//     97% : F7  72% : B8 47% : 78 22% : 38
//     96% : F5  71% : B5 46% : 75 21% : 36
//     95% : F2  70% : B3 45% : 73 20% : 33
//     94% : F0  69% : B0 44% : 70 19% : 30
//     93% : ED  68% : AD 43% : 6E 18% : 2E
//     92% : EB  67% : AB 42% : 6B 17% : 2B
//     91% : E8  66% : A8 41% : 69 16% : 29
//     90% : E6  65% : A6 40% : 66 15% : 26
//     89% : E3  64% : A3 39% : 63 14% : 24
//     88% : E0  63% : A1 38% : 61 13% : 21
//     87% : DE  62% : 9E 37% : 5E 12% : 1F
//     86% : DB  61% : 9C 36% : 5C 11% : 1C
//     85% : D9  60% : 99 35% : 59 10% : 1A
//     84% : D6  59% : 96 34% : 57 9% : 17
//     83% : D4  58% : 94 33% : 54 8% : 14
//     82% : D1  57% : 91 32% : 52 7% : 12
//     81% : CF  56% : 8F 31% : 4F 6% : 0F
//     80% : CC  55% : 8C 30% : 4D 5% : 0D
//     79% : C9  54% : 8A 29% : 4A 4% : 0A
//     78% : C7  53% : 87 28% : 47 3% : 08
//     77% : C4  52% : 85 27% : 45 2% : 05
//     76% : C2  51% : 82 26% : 42 1% : 03
//     0% : 00


  static Color toColor(String color, {int a = 100}) {
    if (color.isEmpty || !color.startsWith("#")) {
      throw Exception("color异常数据");
    }

    if (a < 0 || a > 100) {
      throw Exception("透明度必须在0-100之间");
    }
    var hexColor = color.replaceAll("#", "").trim();
    if (hexColor.length == 6) {
      hexColor = "0x${_percentageConvertString[a]}$hexColor";
      var color = Color(int.parse(hexColor));
      return color;
    } else {
      throw Exception("color长度必须为6位");
    }
  }

  static final Map<int, String> _percentageConvertString = {
    0: "00",
    1: "03",
    2: "05",
    3: "08",
    4: "0A",
    5: "0D",
    6: "0F",
    7: "12",
    8: "14",
    9: "17",
    10: "1A",
    11: "1C",
    12: "1F",
    13: "21",
    14: "24",
    15: "26",
    16: "29",
    17: "2B",
    18: "2E",
    19: "30",
    20: "33",
    21: "36",
    22: "38",
    23: "3B",
    24: "3D",
    25: "40",
    26: "42",
    27: "45",
    28: "47",
    29: "4A",
    30: "4D",
    31: "4F",
    32: "52",
    33: "54",
    34: "57",
    35: "59",
    36: "5C",
    37: "5E",
    38: "61",
    39: "63",
    40: "66",
    41: "69",
    42: "6B",
    43: "6E",
    44: "70",
    45: "73",
    46: "75",
    47: "78",
    48: "7A",
    49: "7D",
    50: "80",
    51: "82",
    52: "85",
    53: "87",
    54: "8A",
    55: "8C",
    56: "8F",
    57: "91",
    58: "94",
    59: "96",
    60: "99",
    61: "9C",
    62: "9E",
    63: "A1",
    64: "A3",
    65: "A6",
    66: "A8",
    67: "AB",
    68: "AD",
    69: "B0",
    70: "B3",
    71: "B5",
    72: "B8",
    73: "BA",
    74: "BD",
    75: "BF",
    76: "C2",
    77: "C4",
    78: "C7",
    79: "C9",
    80: "CC",
    81: "CF",
    82: "D1",
    83: "D4",
    84: "D6",
    85: "D9",
    86: "DB",
    87: "DE",
    88: "E0",
    89: "E3",
    90: "E6",
    91: "E8",
    92: "EB",
    93: "ED",
    94: "F0",
    95: "F2",
    96: "F5",
    97: "F7",
    98: "FA",
    99: "FC",
    100: "FF"
  };

`