lerp method
Return the value this variable has at the given animation clock value t.
If begin and end are gradients of the same type or if either is
null, employs Gradient.lerp; which itself is a step up from the
standard behavior.
- Gradient.lerp will fade to
nullbetween gradients of dissimilar types which gives a fad-out/fade-in tween
In all other circumstances, however, this method can generated an IntermediateGradient.
This is done by comparing the runtimeType of begin & end
against t, providing the first type before 0.5 and the second after;
creating a GradientPacket containing both gradients and passing t
which can provide any requested potential gradient property using lerp;
and interpolating the colors and stops of begin & end by creating
and passing along a PrimitiveGradient.
If needed, consider overriding IntermediateGradient._copyWith by
providing a custom GradientCopyWith during construction as
overrideCopyWith.
Implementation
@override
Gradient lerp(double t) {
if (begin == null ||
end == null ||
(begin.runtimeType == end.runtimeType)) {
return Gradient.lerp(begin, end, t)!;
}
final resolvedBegin = begin is IntermediateGradient
? (begin as IntermediateGradient).resolved
// : begin is Steps
// ? (begin as Steps).asGradient
: begin!;
final resolvedEnd = end is IntermediateGradient
? (end as IntermediateGradient).resolved
// : end is Steps
// ? (end as Steps).asGradient
: end!;
if (resolvedBegin.runtimeType == resolvedEnd.runtimeType) {
return Gradient.lerp(resolvedBegin, resolvedEnd, t)!;
}
if (isAgressive) {
final interpolated =
PrimitiveGradient.fromStretchLerp(resolvedBegin, resolvedEnd, t);
return IntermediateGradient(
PrimitiveGradient.byProgressiveMerge(
t < 0.5 ? PrimitiveGradient.from(resolvedBegin) : interpolated,
t < 0.5 ? interpolated : PrimitiveGradient.from(resolvedEnd),
t < 0.5 ? t * 2 : (t - 0.5) * 2),
GradientPacket(resolvedBegin, resolvedEnd, t),
overrideCopyWith: _copyWith,
);
}
return IntermediateGradient(
PrimitiveGradient.byCombination(resolvedBegin, resolvedEnd, t),
GradientPacket(resolvedBegin, resolvedEnd, t),
overrideCopyWith: _copyWith,
);
}