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 01, 2026

Flutter Slide & Bounce Animations for Modal Dialogs & Cards

Learn to create dynamic slide and bounce animations in Flutter for engaging modal dialogs and smooth card transitions. Enhance your app's user experience with t

Aug 01, 2026

Build a Flutter Recipe Detail Widget: Checklist, Timer, Tips

Learn to build an interactive recipe detail widget in Flutter, complete with an ingredient checklist, cooking timer, and helpful tips. Enhance user experience f

Jul 31, 2026

Flutter Firebase Password Reset: Custom UI & Email Verification

Implement a robust password reset flow in Flutter using Firebase Authentication. Learn to build a custom UI, handle email verification, and secure user accounts