How To Create Engaging Page Transitions inYour Flutter App

Ajiyemi Michael
3 min readMar 23, 2023

--

Animations are a vital part of modern app design. They can make your app feel more polished, improve the user experience, and help communicate what’s happening in your app to your users. In Flutter, you can use PageRouteBuilder and AnimatedWidget to create custom animated transitions between pages in your app.

In this post, we will take a deep dive into a few essential Flutter widgets that can help you achieve your goal of creating seamless animated transitions between pages in your app. To create these dynamic page transitions, you need to familiarize yourself with some of the built-in properties of Flutter, including the PageRouteBuilder` and AnimatedWidget`

PageRouteBuilder creates a route similar to the regular Navigator.push or Navigator.pushNamed method, it a widget that builds a custom transition between two pages. It’s called a “route builder” because it builds a route to a new page in your app. but it takes in two callbacks as parameters: PageBuilder and TransitionBuilder. The PageBuilder builds the route and takes in three parameters: context, animation, and secondaryAnimation. The TransitionBuilder builds the transition between pages and takes in four parameters: context, animation, secondaryAnimation, and child.

Navigator.push(
context,
PageRouteBuilder(
pageBuilder: (context, animation, secondaryAnimation) => SecondPage(),
transitionsBuilder: (context, animation, secondaryAnimation, child) {
);
},
),
);

The most important parameters to take note of from these parameters are the context, animation, and child parameter. The context refers to the BuildContext, which is a way of letting Flutter know where exactly the widget is in the widget tree. The animation parameter is used as a listener for the AnimatedWidget, and the child is the widget returned from the PageBuilder.

Inside the TransitionBuilder callback, you can make use of the animation object by creating a Tween and passing it to the animation object. A Tween is mostly assigned to an animation that just takes in two parameters which specify the start and the end of the animation.

final tween = Tween(begin: Offset(1.0, 0.0), end: Offset.zero);

Once that is done, the TransitionBuilder returns an AnimatedWidget.

So, what is an AnimatedWidget? These are simply the animated or animatable version of a StatelessWidget that are mostly used with animation objects, which use listeners to rebuild themselves and notify the client anytime a change occurs. They are also called listenables. These animation widgets take in some parameters, but two very important parameters to take note of are:

  • A listenable, which notifies the client that there was a change or an update to the object that then rebuilds the widget to reflect this update. This listenable takes in an animation derived from the animation parameter. Once the animation value changes, the widget gets rebuilt.
  • A child, which is usually of type widget. In this case, the child parameter refers to the output of the PageRouteBuilder callback rendering the animated page.
return SlideTransition(
position: tween.animate(curvedAnimation),
child: child,
);

Now putting everything together and it looks like this, note SlideTransiton is a type of AnimatedWidget.

Navigator.push(
context,
PageRouteBuilder(
pageBuilder: (context, animation, secondaryAnimation) => SecondPage(),
transitionsBuilder: (context, animation, secondaryAnimation, child) {
final tween = Tween(begin: Offset(1.0, 0.0), end: Offset.zero);
final offsetAnimation = animation.drive(tween);
);
return SlideTransition(
position: offsetAnimation,
child: child,
);
},
),
);

In conclusion, animations are very important when developing applications. It cannot be emphasized enough because it is what makes our application alive and gives our users a memorable experience interacting with our software. Therefore, invest heavily in animations, and your users will thank you for it.

--

--

Ajiyemi Michael
Ajiyemi Michael

Written by Ajiyemi Michael

i AM a flutter developer, i write because it is my way of giving back to the community, to share my knowledge and experiences with others

No responses yet