Flutter 获取LinearGradient中位置处的颜色

Flutter 获取LinearGradient中位置处的颜色,flutter,Flutter,有没有办法用LinearGradient创建渐变,然后在其停止点的某个位置访问其颜色 例如: LinearGradient gradient = LinearGradient( colors: [Colors.red, Colors.green, Colors.blue], stops: [0.0,100.0,200.0], ); 如果有像getColor(double)这样的方法,它可能会这样工作 gradient.getColor(100.0) // returns equival

有没有办法用LinearGradient创建渐变,然后在其停止点的某个位置访问其颜色

例如:

LinearGradient gradient = LinearGradient(
  colors: [Colors.red, Colors.green, Colors.blue],
  stops: [0.0,100.0,200.0],
);
如果有像
getColor(double)
这样的方法,它可能会这样工作

gradient.getColor(100.0) // returns equivalent to Colors.green
gradient.getColor(150.0) // returns interpolated color between green and blue
我正试图使用颤振的能力,生成梯度,给我插值的颜色在特定的值

编辑


允许您使用与渐变相同的逻辑混合颜色,但它不允许您混合颜色列表,我想使用
lerp
,颜色数组和数组如果停止,您可以轻松构建该函数。大概是这样的:

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;
}
Color-lerpgradent(列出颜色、列出停止、双t){
对于(var s=0;s如果(t)FYI-根据,您的停止不正确。它们应该在
0.0-->1.0
范围内。谢谢。我错过了这一点。我可能需要创建一个自定义类来处理这些更宽的范围。
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;
}