问题
flutter中 一个本来就带透明度的Color cl,原来透明度是30%。我现在cl.withValues(alpha: 0.7)后。原来的透明度失效了
原因
是的,withValues(以及旧版的 withOpacity)的行为是 “替换” 而不是 “叠加” 。
当你调用
cl.withValues(alpha: 0.7)
时,你告诉 Flutter:“不管这个颜色原来多透明,现在把它变成 0.7(70%)不透明”。所以原来的 30% 就被丢弃了。
如果你想在原有 30% 的基础再乘以 0.7(即叠加透明度),你需要取出原来的 alpha 值进行相乘。
解决方法
在 Flutter 新版 API(支持 withValues 的版本)中,应该这样写:
dart
// 假设 cl 原本透明度是 0.3
Color newColor = cl.withValues(alpha: cl.a * 0.7);
-
cl.a: 获取当前颜色的透明度(0.0 ~ 1.0)。 -
cl.a * 0.7:0.3 * 0.7 = 0.21。
-
结果: 最终颜色透明度变成 21% (即 30% 的 70%)。