Flutter › Flutter Animations Basics

How can you properly coordinate several separate, related animations together, such as a fade combined with a scale effect, ensuring they all play in perfect sync using a single shared underlying AnimationController?

Advanced

Answer

Coordinating multiple related animations together typically means driving each of those separate individual animations, such as one Tween controlling opacity and a completely separate Tween controlling scale, from exactly the same single shared underlying AnimationController, optionally using Intervals to have each specific individual animation only actually become active during a specific particular portion of that overall shared animation's total timeline, letting you build genuinely complex, carefully choreographed multi part animation sequences that all still remain perfectly synchronized together, since they are all fundamentally driven by that exact same single shared underlying progress value.
final fadeAnimation = Tween<double>(begin: 0, end: 1).animate(
  CurvedAnimation(parent: controller, curve: Interval(0.0, 0.5)),
);
final scaleAnimation = Tween<double>(begin: 0.8, end: 1).animate(
  CurvedAnimation(parent: controller, curve: Interval(0.3, 1.0)),
);
Real-world example An onboarding screen's entrance animation coordinates a fade in effect during the first half of the overall animation timeline together with a slightly overlapping scale up effect during the latter portion, both driven by exactly the same single shared AnimationController to guarantee they remain perfectly synchronized together.

Common follow-ups: How do you determine an appropriate overlap between two separate animation intervals for the most visually pleasing combined result?;What happens if two separate animations driven by the exact same controller genuinely need entirely different total durations?