image

01 Mar 2026

9K

35K

Flutter Slide & Rotate Animations for Creative Page Transitions

In the world of mobile application development, a smooth and engaging user experience is paramount. Animations play a crucial role in achieving this, providing visual feedback, guiding user attention, and making interactions feel more intuitive and delightful. Flutter, with its powerful and flexible animation framework, empowers developers to craft stunning UIs and sophisticated transitions with relative ease.

This article delves into creating dynamic and creative page transitions in Flutter, specifically leveraging "Slide" and "Rotate" animations. By combining these two fundamental animation types, developers can move beyond standard fades and simple slides to produce unique and memorable navigation experiences.

The Power of Page Transitions

Page transitions are not just cosmetic; they serve several critical UX functions:

  • Context: They help users understand the relationship between the old and new screens.
  • Engagement: Well-designed transitions make an app feel alive and responsive.
  • Branding: Custom transitions can reinforce an app's unique visual identity.

Flutter offers a robust way to define custom page transitions using PageRouteBuilder, which allows developers to specify how a new route should enter and exit the screen.

Implementing Basic Slide Transitions

A slide transition moves a widget from one position to another. In Flutter, this is typically achieved using the SlideTransition widget in conjunction with an AnimationController and a Tween.

Example: Slide from Right to Left


import 'package:flutter/material.dart';

class SlideFromRightPageRoute extends PageRouteBuilder {
  final Widget child;

  SlideFromRightPageRoute(this.child)
      : super(
          pageBuilder: (context, animation, secondaryAnimation) => child,
          transitionsBuilder: (context, animation, secondaryAnimation, child) {
            var begin = Offset(1.0, 0.0); // Start from right
            var end = Offset.zero;       // End at current position
            var curve = Curves.easeOut;

            var tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve));

            return SlideTransition(
              position: animation.drive(tween),
              child: child,
            );
          },
        );
}

// To use it:
// Navigator.of(context).push(SlideFromRightPageRoute(NextPage()));

In this example, Offset(1.0, 0.0) represents the screen's right edge (1.0 is full width, 0.0 is top/left). Offset.zero is the default position. The .drive(tween) method connects the animation controller's progress to the tween, applying the transformation.

Implementing Basic Rotate Transitions

Rotation transitions add a dynamic spin to elements. Flutter's RotationTransition widget is ideal for this, using a Tween to define the start and end angles of rotation.

Example: Rotate from 0 to 360 degrees


import 'package:flutter/material.dart';

class RotatePageRoute extends PageRouteBuilder {
  final Widget child;

  RotatePageRoute(this.child)
      : super(
          pageBuilder: (context, animation, secondaryAnimation) => child,
          transitionsBuilder: (context, animation, secondaryAnimation, child) {
            var begin = 0.0; // Start angle in turns (0 degrees)
            var end = 1.0;   // End angle (1.0 represents 360 degrees)
            var curve = Curves.easeOut;

            var tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve));

            return RotationTransition(
              turns: animation.drive(tween),
              child: child,
            );
          },
        );
}

// To use it:
// Navigator.of(context).push(RotatePageRoute(NextPage()));

The turns property expects a value between 0.0 and 1.0, where 1.0 completes a full 360-degree rotation. For more specific angles, you can map 1.0 to your desired angle (e.g., 0.25 for 90 degrees).

Combining Slide and Rotate for Creative Transitions

The real magic happens when you combine multiple transitions. Flutter allows you to nest transition widgets, applying multiple transformations simultaneously or sequentially to achieve complex effects. A common pattern is to wrap a SlideTransition around a RotationTransition (or vice versa), allowing the inner widget to rotate while it slides into view.

Full Example: Slide In from Right while Rotating

Let's create a custom page transition that slides the new page in from the right while simultaneously rotating it into its final orientation.


import 'package:flutter/material.dart';

// A simple destination page
class NextPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Next Page')),
      body: Center(
        child: Text(
          'Welcome to the Next Page!',
          style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
        ),
      ),
    );
  }
}

// Our creative Slide & Rotate page transition
class SlideRotatePageRoute extends PageRouteBuilder {
  final Widget child;

  SlideRotatePageRoute(this.child)
      : super(
          transitionDuration: Duration(milliseconds: 700), // Adjust animation duration
          pageBuilder: (context, animation, secondaryAnimation) => child,
          transitionsBuilder: (context, animation, secondaryAnimation, child) {
            // Define Slide animation
            var slideBegin = Offset(1.0, 0.0); // Start from right edge
            var slideEnd = Offset.zero;         // End at its default position
            var slideTween = Tween(begin: slideBegin, end: slideEnd);
            var slideCurvedAnimation = CurvedAnimation(
              parent: animation,
              curve: Curves.easeOutCubic, // Smooth acceleration and deceleration
            );

            // Define Rotate animation
            var rotateBegin = 0.0;              // Start at 0 degrees
            var rotateEnd = 0.25;               // Rotate 90 degrees (0.25 turns)
            var rotateTween = Tween(begin: rotateBegin, end: rotateEnd);
            var rotateCurvedAnimation = CurvedAnimation(
              parent: animation,
              curve: Curves.decelerate, // Slightly different curve for rotation
            );

            return SlideTransition(
              position: slideTween.animate(slideCurvedAnimation),
              child: RotationTransition(
                turns: rotateTween.animate(rotateCurvedAnimation),
                child: child,
              ),
            );
          },
        );
}

// How to trigger this transition from a home page
class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Home Page')),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // Use our custom page route when navigating
            Navigator.of(context).push(SlideRotatePageRoute(NextPage()));
          },
          child: Text('Go to Next Page with Creative Transition'),
        ),
      ),
    );
  }
}

// Basic main function to run the app
void main() {
  runApp(MaterialApp(
    home: HomePage(),
    debugShowCheckedModeBanner: false, // Optional: remove debug banner
  ));
}

In this comprehensive example:

  • We define a simple NextPage as the target screen for the transition.
  • SlideRotatePageRoute extends PageRouteBuilder, allowing us to customize the transition logic.
  • Inside transitionsBuilder, separate Tween and CurvedAnimation instances are created for both sliding and rotating. This gives independent control over their curves and synchronization with the overall animation controller.
  • SlideTransition wraps RotationTransition, meaning the entire rotating child widget will slide. You could reverse this order depending on the desired visual effect.
  • Different Curves (Curves.easeOutCubic for slide, Curves.decelerate for rotate) are used to add more character to the animation, making it feel less linear and more organic.
  • The transitionDuration is set to 700 milliseconds for a noticeable, yet not overly slow, animation.

Refinement and Customization

The beauty of Flutter's animation system lies in its flexibility. You can further refine these transitions:

  • Curves: Experiment with various Curves provided by Flutter (e.g., Curves.bounceOut, Curves.elasticIn, Curves.fastLinearToSlowEaseIn) to dramatically alter the feel of the animation.
  • Duration: Adjust transitionDuration in PageRouteBuilder to control the speed of the transition.
  • Start/End Values: Change Offset values to make pages slide from different directions (top, bottom, left) or rotation double values to rotate by different amounts (e.g., 0.5 for 180 degrees).
  • Secondary Animation: The secondaryAnimation parameter in transitionsBuilder can be used to animate the *leaving* page, creating even more complex and synchronized transitions where both screens are actively moving.
  • Other Transitions: Integrate other transition widgets like FadeTransition, ScaleTransition, or SizeTransition for even richer and multi-faceted effects.

Conclusion

Flutter's animation framework provides a powerful toolkit for crafting highly customized and visually appealing page transitions. By understanding and combining fundamental animations like "Slide" and "Rotate," developers can elevate the user experience, making applications feel more polished, engaging, and unique. The PageRouteBuilder, combined with the flexibility of nesting transition widgets and exploring various curves, opens up a world of creative possibilities for app navigation. Experimentation is key to discovering the perfect blend of animations that resonate with your app's design and user flow.

Related Articles

May 14, 2026

Building a Multi-Event Countdown Timer Widget with Reminders, Notifications, Repeat, and Custom Labels in Flutter

Building a Multi-Event Countdown Timer Widget with Reminders, Notifications, Repeat, and Custom Labels in Flutter Countdown timers are essential in many applic

May 11, 2026

Unleashing Dynamic UIs: Flutter's Animation Prowess

Unleashing Dynamic UIs: Flutter's Animation Prowess for Slide & Scale Effects Flutter's declarative UI framework, combined with its powerful animation capabilit

May 11, 2026

Building a Product Detail Page Widget in Flutter with Related Items, Review Carousel, Promo Badges, and Quick Buy

Building a Product Detail Page Widget in Flutter with Related Items, Review Carousel, Promo Badges, and Quick Buy A well-designed Product Detail Page (PDP) is