Saltar al contenido

Aclarar u oscurecer programáticamente un color hexadecimal en dardo

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'));
¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 4)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *