获取 LinearGradient 中位置的颜色

Luk*_*tti 6 flutter

有没有什么方法可以使用 LinearGradient 构建渐变,然后在其停靠点的某个位置访问它的颜色?

例子:

LinearGradient gradient = LinearGradient(
  colors: [Colors.red, Colors.green, Colors.blue],
  stops: [0.0,100.0,200.0],
);
Run Code Online (Sandbox Code Playgroud)

如果有一种类似的方法getColor(double)可能会像这样工作

gradient.getColor(100.0) // returns equivalent to Colors.green
gradient.getColor(150.0) // returns interpolated color between green and blue
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用 Flutter 生成渐变的能力来为我提供特定值的插值颜色。

编辑

Color lerp(Color a, Color b, double t);
Run Code Online (Sandbox Code Playgroud)

允许您使用与渐变相同的逻辑来混合颜色,但它不允许您混合颜色列表

bof*_*mer 11

我想使用lerp、颜色数组和 if 停止数组,您可以轻松构建该函数。像这样的东西:

Color lerpGradient(List<Color> colors, List<double> stops, double t) {
  for (var s = 0; s < stops.length - 1; s++) {
    final leftStop = stops[s], rightStop = stops[s + 1];
    final leftColor = colors[s], rightColor = colors[s + 1];
    if (t <= leftStop) {
      return leftColor;
    } else if (t < rightStop) {
      final sectionT = (t - leftStop) / (rightStop - leftStop);
      return Color.lerp(leftColor, rightColor, sectionT);
    }
  }
  return colors.last;
}
Run Code Online (Sandbox Code Playgroud)