lerp static method
Copied from LinearGradient.
Linearly interpolate between two LinearSteps.
If either LinearSteps
is null
, this function linearly interpolates
from a LinearSteps
that matches the other in begin, end, stops and
tileMode and with the same colors but transparent (using scale).
If neither LinearSteps
is null
,
they must have the same number of colors.
The t
argument represents a 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
).
Values for t
are usually obtained from an Animation<double>,
such as an AnimationController
.
Implementation
static LinearSteps? lerp(LinearSteps? a, LinearSteps? b, double t) {
if (a == null && b == null) return null;
if (a == null) return b!.scale(t);
if (b == null) return a.scale(1.0 - t);
final interpolated = _interpolate(a, b, t);
return LinearSteps(
begin: AlignmentGeometry.lerp(a.begin, b.begin, t)!,
end: AlignmentGeometry.lerp(a.end, b.end, t)!,
colors: interpolated.colors,
stops: interpolated.stops,
// TODO: interpolate tile mode
tileMode: t < 0.5 ? a.tileMode : b.tileMode,
);
}