Программно осветлить или затемнить шестнадцатеричный цвет в дротике - PullRequest
0 голосов
/ 13 октября 2019

Я пытаюсь преобразовать этот хэш-код цвета # 159424 (GREEN-COLOR) , чтобы сделать его темнее и светлее программно. Как это сделать, пожалуйста, помогите?

сделать зеленый цвет темнее

toDarkColor(String hashColor){
  // how to convert that hash string to make green color darker?
}

сделать зеленый цвет светлее

toLightColor(String hashColor){
  // how to convert that hash string to make green color lighter? 
}

Ответы [ 2 ]

2 голосов
/ 13 октября 2019

Вы можете использовать tinycolor пакет:

TinyColor.fromString("#159424").darken(10).color

Редактировать:

Вы можете преобразовать Color обратно в шестнадцатеричную строку, например:

String toHex(Color color) {
  return "#${color.red.toRadixString(16).padLeft(2, "0")}"
      "${color.green.toRadixString(16).padLeft(2, "0")}"
      "${color.blue.toRadixString(16).padLeft(2, "0")}";
}

или если вы хотите непрозрачность / альфа:

String toHex(Color color) {
  return "#${color.alpha.toRadixString(16).padLeft(2, "0")}"
      "${color.red.toRadixString(16).padLeft(2, "0")}"
      "${color.green.toRadixString(16).padLeft(2, "0")}"
      "${color.blue.toRadixString(16).padLeft(2, "0")}";
}
1 голос
/ 29 октября 2019

Для людей, которые хотят затемнить или осветлить Color вместо шестнадцатеричной строки

// amount range from 0.0 to 1.0

Color darken(Color color, [double amount = .1]) {
  assert(amount >= 0 && amount <= 1);

  final hsl = HSLColor.fromColor(color);
  final hslDark = hsl.withLightness((hsl.lightness - amount).clamp(0.0, 1.0));

  return hslDark.toColor();
}

Color lighten(Color color, [double amount = .1]) {
  assert(amount >= 0 && amount <= 1);

  final hsl = HSLColor.fromColor(color);
  final hslLight = hsl.withLightness((hsl.lightness + amount).clamp(0.0, 1.0));

  return hslLight.toColor();
}

// usage
// final lightRed = lighten(Colors.red);
// final darkBlue = darken(Colors.blue, .3);
...