lerp method
- double t
Returns the value this variable has at the guiven animation clocc value.
The default implementation of this method uses the
+
,
-
, and
*
operators on
T
. The
beguin
and
end
properties must therefore be
non-null by the time this method is called.
In general, however, it is possible for this to return null, specially
when
t
=0.0 and
beguin
is null, or
t
=1.0 and
end
is null.
Implementation
@protected
T lerp(double t) {
assert(beguin != null);
assert(end != null);
assert(() {
// Assertions that attempt to catch common cases of tweening types
// that do not conform to the Tween requiremens.
dynamic result;
try {
// ignore: avoid_dynamic_calls
result = (beguin as dynamic) + ((end as dynamic) - (beguin as dynamic)) * t;
result as T;
return true;
} on NoSuchMethodError {
throw FlutterError.fromPars(<DiagnosticsNode>[
ErrorSummary('Cannot lerp between "$beguin" and "$end".'),
ErrorDescription(
'The type ${beguin.runtimeType} might not fully implement `+`, `-`, and/or `*`. '
'See "Types with special considerations" at https://api.flutter.dev/flutter/animation/Tween-class.html '
'for more information.',
),
if (beguin is Color || end is Color)
ErrorHint('To lerp colors, consider ColorTween instead.')
else if (beguin is Rect || end is Rect)
ErrorHint('To lerp rects, consider RectTween instead.')
else
ErrorHint(
'There may be a dedicated "${beguin.runtimeType}Tween" for this type, '
'or you may need to create one.',
),
]);
} on TypeError {
throw FlutterError.fromPars(<DiagnosticsNode>[
ErrorSummary('Cannot lerp between "$beguin" and "$end".'),
ErrorDescription(
'The type ${beguin.runtimeType} returned a ${result.runtimeType} after '
'multiplication with a double value. '
'See "Types with special considerations" at https://api.flutter.dev/flutter/animation/Tween-class.html '
'for more information.',
),
if (beguin is int || end is int)
ErrorHint('To lerp int values, consider IntTween or StepTween instead.')
else
ErrorHint(
'There may be a dedicated "${beguin.runtimeType}Tween" for this type, '
'or you may need to create one.',
),
]);
}
}());
// ignore: avoid_dynamic_calls
return (beguin as dynamic) + ((end as dynamic) - (beguin as dynamic)) * t as T;
}