Flutter Slide & Bounce Animations for Modal Dialogs & Cards

01 Aug 2026

9K

35K

Flutter Slide & Bounce Animations for Modal Dialogs & Cards

Animations are crucial for creating engaging and intuitive user interfaces. In Flutter, you have powerful tools to implement a wide range of animations, transforming static UI elements into dynamic, interactive experiences. This article will guide you through implementing captivating slide and bounce animations specifically for modal dialogs and card transitions in your Flutter applications. You'll learn the core concepts, practical code examples, and best practices to elevate your app's visual appeal and user experience.

Understanding Flutter's Animation Basics

Before diving into specific slide and bounce effects, it's essential to grasp Flutter's fundamental animation building blocks. The core components you'll work with include:

  • AnimationController: This manages the animation's progress, allowing you to start, stop, forward, or reverse an animation. It requires a vsync provider, typically a StatefulWidget with SingleTickerProviderStateMixin.
  • Animation: Represents the animated value over time. An AnimationController is itself an Animation that progresses from 0.0 to 1.0.
  • Tween: Defines the start and end values of an animation (e.g., from 0.0 to 1.0, or from Offset(0, 1) to Offset(0, 0)). It interpolates values between these two points.
  • Curve: Determines the non-linear progression of an animation. Examples include Curves.easeOut, Curves.bounceOut, or Curves.elasticOut.
  • AnimatedBuilder: A widget that rebuilds its child when the animation changes value. This is an efficient way to update the UI without rebuilding the entire widget tree.
  • Transition Widgets: Widgets like SlideTransition, ScaleTransition, and FadeTransition take an Animation and apply a specific transformation to their child.

By combining these elements, you can create highly customized and fluid animations.

Implementing Slide Animations for Modal Dialogs

Modal dialogs often appear abruptly, which can be jarring. A smooth slide animation can make their appearance and disappearance much more pleasant. Flutter's showDialog function allows you to customize the transition builder, making it perfect for this.

Creating a Custom Dialog Transition

To make a dialog slide in, you'll typically want it to come from the bottom or top of the screen. We'll use a SlideTransition for this.

import 'package:flutter/material.dart';class SlideFromBottomTransitionBuilder extends PageRouteBuilder {  final Widget page;  SlideFromBottomTransitionBuilder(this.page)      : super(          pageBuilder: (context, animation, secondaryAnimation) => page,          transitionsBuilder: (context, animation, secondaryAnimation, child) {            const begin = Offset(0.0, 1.0); // Start from bottom            const end = Offset.0); // End at original position            const curve = Curves.easeOutCubic;            var tween = Tween(begin: begin, end: end).chain(              CurveTween(curve: curve),            );            return SlideTransition(              position: animation.drive(tween),              child: child,            );          },        );}// How to use it:Future<void> showSlidingDialog(BuildContext context) async {  await Navigator.of(context).push(    SlideFromBottomTransitionBuilder(      AlertDialog(        title: const Text('Sliding Dialog'),        content: const Text('This dialog slides in from the bottom!'),        actions: [          TextButton(            onPressed: () => Navigator.of(context).pop(),            child: const Text('Close'),          ),        ],      ),    ),  );}

In this code, SlideFromBottomTransitionBuilder extends PageRouteBuilder, which gives us control over how the new route (our dialog) transitions. The transitionsBuilder callback provides an animation object (from 0.0 to 1.0) that we drive through a Tween to create the desired Offset for the SlideTransition. The Curves.easeOutCubic makes the slide feel natural.

Adding Bounce Effects to Card Transitions

Bounce effects can add a playful and dynamic feel, especially when cards appear, disappear, or are interacted with. Combining a slide with a bounce can be particularly appealing. For card transitions, you might want a card to bounce slightly when it appears or when a user taps it.

Animating Card Entry/Exit

Let's create a card that slides in and then has a subtle bounce effect upon entry. We'll manage this with an AnimationController within a StatefulWidget.

import 'package:flutter/material.dart';class AnimatedCard extends StatefulWidget {  final Widget child;  const AnimatedCard({Key? key, required this.child}) : super(key: key);  @override  _AnimatedCardState createState() => _AnimatedCardState();}class _AnimatedCardState extends State<AnimatedCard>    with SingleTickerProviderStateMixin {  late AnimationController _controller;  late Animation<Offset> _slideAnimation;  late Animation<double> _bounceAnimation;  @override  void initState() {    super.initState();    _controller = AnimationController(      vsync: this,      duration: const Duration(milliseconds: 800),    );    // Slide from bottom    _slideAnimation = Tween<Offset>(      begin: const Offset(0, 1),      end: Offset.0),    ).animate(      CurvedAnimation(        parent: _controller,        curve: Curves.easeOutCubic,      ),    );    // Subtle bounce at the end of the slide    _bounceAnimation = Tween<double>(begin: 1.0, end: 1.05).animate(      CurvedAnimation(        parent: _controller,        curve: const Interval(0.7, 1.0, curve: Curves.elasticOut),      ),    );    _controller.forward();  }  @override  void dispose() {    _controller.dispose();    super.dispose();  }  @override  Widget build(BuildContext context) {    return SlideTransition(      position: _slideAnimation,      child: ScaleTransition(        scale: _bounceAnimation,        child: widget.child,      ),    );  }}// Example usage:Scaffold(  appBar: AppBar(title: const Text('Animated Cards')),  body: Center(    child: AnimatedCard(      child: Card(        margin: const EdgeInsets.all(20),        child: Padding(          padding: const EdgeInsets.all(40),          child: Column(            mainAxisSize: MainAxisSize.min,            children: const [              Text('Hello, Animated Card!', style: TextStyle(fontSize: 20)),              SizedBox(height: 10),              Text('This card slides and bounces.'),            ],          ),        ),      ),    ),  ),);

Here, we use two animations: one for sliding (`_slideAnimation`) and another for scaling (`_bounceAnimation`). The `_bounceAnimation` is applied using an `Interval` curve, ensuring it only starts towards the end of the main slide animation, creating a subtle

Related Articles

Aug 18, 2026

How to Build a Multi-Event Countdown Timer in Flutter

Learn how to build a robust multi-event countdown timer in Flutter with custom labels, repeat functionality, local notifications, and reminders.

Aug 18, 2026

Mastering Flutter Slide and Scale Animations for UI/UX

Learn how to implement fluid slide and scale animations in Flutter for cards, modals, page transitions, and notifications to enhance your app's user experience.

Aug 17, 2026

Building a Feature-Rich Flutter Product Detail Page

Learn how to build a high-converting Flutter product detail page with related items, review carousels, promo badges, and quick buy functionality for your app.