Make your animations feel natural with spring animations.

This package lets you easily create animation curves that are based on spring physics, and use them wherever you want.

Live demo:

Live demo 2:

Getting started

Add elegant_spring_animation as a dependency in your pubspec.yaml file:

dependencies:
  elegant_spring_animation: ^2.0.1

Usage

Basic usage

late AnimationController animationController;
final ElegantSpring curve = ElegantSpring.smooth;

@override
void initState() {
  super.initState();
  animationController = AnimationController(vsync: this, duration: curve.recommendedDuration);
}
ScaleTransition(
    scale: CurvedAnimation(parent: animationController, curve: curve, reverseCurve: curve.flipped),
    child: ...,
)
AnimatedScale(
    scale: condition ? 0.5 : 1.0,
    duration: curve.recommendedDuration,
    curve: curve,
    child: ...,
)

Customizing the bounciness

There is an optional bounce parameter, which has a default value of 0 (no bounce).

You can provide a value between 0 and 1. Higher the value, bouncier the animation.

final ElegantSpring curve = ElegantSpring(bounce: 0.25);

Predefined curves

There are five predefined curves:

  • ElegantSpring.smooth: Has no bounce, gracefully comes to rest.
  • ElegantSpring.gentleBounce: Has a very subtle bounce.
  • ElegantSpring.mediumBounce: Has a noticeable bounce, but not too distracting.
  • ElegantSpring.strongBounce: Has a strong bounce.
  • ElegantSpring.maximumBounce: Has the maximum bounce, ideal for playful UIs and games.

recommendedDuration property

You can use whatever duration you want for your animation. After all, ElegantSpring is just a Curve.

However, if you don't want your animation to feel too fast or too slow, it is recommended to use the recommendedDuration. It is calculated based on the bounce parameter, and it's approximately equal to the time it takes the spring to "settle" at the final point.

Credits

This package is inspired by sprung package and SwiftUI's Spring API.