SpringDescription.withDurationAndBounce constructor

SpringDescription.withDurationAndBounce({
  1. Duration duration = const Duration(milliseconds: 500),
  2. double bounce = 0.0,
})

Creates a SpringDescription based on a desired animation duration and bounce.

This provides an intuitive way to define a spring based on its visual properties, duration and bounce. Check the properties' documentation for their definition.

This constructor produces the same result as SwiftUI's spring(duration:bounce:blendDuration:) animation.

link
final SpringDescription spring = SpringDescription.withDurationAndBounce(
  duration: const Duration(milliseconds: 300),
  bounce: 0.3,
);

See also:

Implementation

factory SpringDescription.withDurationAndBounce({
  Duration duration = const Duration(milliseconds: 500),
  double bounce = 0.0,
}) {
  assert(duration.inMilliseconds > 0, 'Duration must be positive');
  final double durationInSeconds = duration.inMilliseconds / Duration.millisecondsPerSecond;
  const double mass = 1.0;
  final double stiffness = (4 * math.pi * math.pi * mass) / math.pow(durationInSeconds, 2);
  final double dampingRatio = bounce > 0 ? (1.0 - bounce) : (1 / (bounce + 1));
  final double damping = dampingRatio * 2.0 * math.sqrt(mass * stiffness);

  return SpringDescription(mass: mass, stiffness: stiffness, damping: damping);
}