Solución:
Para personas que quieren oscurecer o aclarar Color
en lugar de cadena hexadecimal
// 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);
Puedes usar el paquete tinycolor:
TinyColor.fromString("#159424").darken(10).color
Editar:
Puedes convertir Color
de vuelta a la cadena hexadecimal como esta:
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")}";
}
o si quieres opacidad / alfa:
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")}";
}
Los siguientes métodos producen matices del color base que parecen ‘más oscuros’ o ‘más brillantes’ sin cambiar el tinte (es para proyectos de Flutter ya que usa el material Color
clase).
La solución NearHuscarl ‘cambia el tinte de los colores al oscurecer (el tinte está más saturado). Además, su función de aclarado produce un blanco puro con una cantidad de 0,3 para algunos colores, aunque el blanco solo debe alcanzarse con una cantidad de 1.
import 'package:flutter/material.dart';
Color darken(Color c, [int percent = 10]) {
assert(1 <= percent && percent <= 100);
var f = 1 - percent / 100;
return Color.fromARGB(
c.alpha,
(c.red * f).round(),
(c.green * f).round(),
(c.blue * f).round()
);
}
Color brighten(Color c, [int percent = 10]) {
assert(1 <= percent && percent <= 100);
var p = percent / 100;
return Color.fromARGB(
c.alpha,
c.red + ((255 - c.red) * p).round(),
c.green + ((255 - c.green) * p).round(),
c.blue + ((255 - c.blue) * p).round()
);
}
// Example: use a percent from 1 to 100,
// where 100 is the maximum darkening/brightening (i.e. black or white)
final Color darkerGreen = darken(Color(0xFF159424), 15);
Si comienza desde un valor de cadena hexadecimal como OP pidió, use la solución de JM Taylor:
Color hexToColor(String code) {
return Color(int.parse(code.substring(0, 6), radix: 16) + 0xFF000000);
}
final Color darkerGreen = darken(hexToColor('#159424'));