无插件的色彩准确解决方案
接受的答案在变暗时会改变色调(色调更饱和)。此外,它的增亮功能会产生纯白色,对于某些颜色而言,其数量为 0.3,尽管白色仅应达到 1。
以下两种方法产生基色的阴影,看起来“更暗”或“更亮”不改变色调。
import 'package:flutter/material.dart';
/// Darken a color by [percent] amount (100 = black)
// ........................................................
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()
);
}
/// Lighten a color by [percent] amount (100 = white)
// ........................................................
Color lighten(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()
);
}
示例:将颜色加深 15%。
final Color darkerGreen = darken(Color(0xFF159424), 15);
如果按照 OP 的要求从十六进制字符串值开始,请使用 J.M. Taylor 的解决方案:
Color hexToColor(String code) {
return Color(int.parse(code.substring(0, 6), radix: 16) + 0xFF000000);
}
final Color darkerGreen = darken(hexToColor('#159424'));
注意:它适用于 Flutter 项目,因为它使用材质的 Color 类。