flutter中色值透明度的坑

53 阅读1分钟

问题

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%)。