# lerp method

Color lerp (Color a, Color b, double t)

Linearly interpolate between two colors.

This is intended to be fast but as a result may be ugly. Consider `HSVColor` or writing custom logic for interpolating colors.

If either color is null, this function linearly interpolates from a transparent instance of the other color. This is usually preferable to interpolating from `material.Colors.transparent` (`const Color(0x00000000)`), which is specifically transparent black.

The `t` argument represents position on the timeline, with 0.0 meaning that the interpolation has not started, returning `a` (or something equivalent to `a`), 1.0 meaning that the interpolation has finished, returning `b` (or something equivalent to `b`), and values in between meaning that the interpolation is at the relevant point on the timeline between `a` and `b`. The interpolation can be extrapolated beyond 0.0 and 1.0, so negative values and values greater than 1.0 are valid (and can easily be generated by curves such as `Curves.elasticInOut`). Each channel will be clamped to the range 0 to 255.

Values for `t` are usually obtained from an `Animation<double>`, such as an `AnimationController`.

## Implementation

    static Color lerp(Color a, Color b, double t) {
      assert(t != null);
      if (a == null && b == null)
        return null;
      if (a == null)
        return _scaleAlpha(b, t);
      if (b == null)
        return _scaleAlpha(a, 1.0 - t);
      return new Color.fromARGB(
        lerpDouble(a.alpha, b.alpha, t).toInt().clamp(0, 255),
        lerpDouble(a.red, b.red, t).toInt().clamp(0, 255),
        lerpDouble(a.green, b.green, t).toInt().clamp(0, 255),
        lerpDouble(a.blue, b.blue, t).toInt().clamp(0, 255),
      );
    }