Сначала давайте взглянем на источник ElasticOutCurve (из источника флаттера ):
class ElasticOutCurve extends Curve {
/// Creates an elastic-out curve.
///
/// Rather than creating a new instance, consider using [Curves.elasticOut].
const ElasticOutCurve([this.period = 0.4]);
/// The duration of the oscillation.
final double period;
@override
double transformInternal(double t) {
final double s = period / 4.0;
return math.pow(2.0, -10 * t) * math.sin((t - s) * (math.pi * 2.0) / period) + 1.0;
}
@override
String toString() {
return '$runtimeType($period)';
}
}
Мы видим, что все, что они делают, это какая-то базовая математика.
Вот график, показывающий кривую ослабления из алгоритма флютера:
А вот что произойдет, если вы умножите секцию (pow * sin) на 3:
Вся заслуга в Wolfram Alpha для чартов.
Если вы играли с разными константами, вы также можете настроить их другими способами, хотя вы должны быть уверены, что они всегда начинаются с 0 и заканчиваются на 1.
К сожалению, команда Flutter не сделала кривую немного более гибкой, но поскольку флаттер является открытым исходным кодом, достаточно легко скопировать их кривую, чтобы создать собственную.