Published on

|

3 mins

Creating magic - Animations in Flutter

Prithviraj Kapil
Prithviraj Kapil

This article delves into two key animation tools in Flutter: Hero Animations and the Animate() widget. Hero Animations enable smooth transitions between screens by animating widgets with the same tag. The Animate() widget simplifies complex animations creation with customizable features. Use cases include seamless screen transitions and dynamic UI elements. Overall, mastering these tools can greatly enhance user experience in Flutter applications.
Cover Image for Creating magic - Animations in Flutter

Introduction:

Flutter, Google's UI toolkit, has gained immense popularity among developers for its expressive and flexible design capabilities. A standout feature contributing to Flutter's acclaim is its robust support for animations. In this article, we embark on a journey to explore two powerful animation tools in Flutter: Hero Animations and the Animate() widget.

Hero Animations:

Hero animations stand out as a delightful way to transition elements between screens, providing a seamless and visually appealing user experience. The primary concept behind Hero animations is the smooth transition of a widget from one screen to another, creating an engaging and polished feel for your app.

How Hero Animations Work:

Source and Destination Widgets:
  • Begin by selecting a widget in the source screen that you want to transition.

  • Create a corresponding widget in the destination screen.

Tagging Widgets:
  • Assign the same tag to both the source and destination widgets.

  • This tag serves as a unique identifier, enabling Flutter to seamlessly animate the transition between the tagged widgets.

Navigating Between Screens:
  • As the user navigates between screens, Flutter automatically orchestrates the transition of the tagged widgets.

Code Example - Hero Animation:

Source Screen

class SourceScreen extends StatelessWidget {
@override
 Widget build(BuildContext context) {
   return GestureDetector(
     onTap: () {
       Navigator.push(
       context,
       MaterialPageRoute(
          builder: (context) => DestinationScreen(),
         ),
       );
     },
   child: Hero(
     tag: 'hero-tag',
       child: Container(
         width: 100,
         height: 100,
         color: Colors.blue,
         ),
       ),
     );
   }
}

Destination Screen

class DestinationScreen extends StatelessWidget {
 @override
   Widget build(BuildContext context) {
     return Scaffold(
       body: Center(
         child: Hero(
           tag: 'hero-tag',
           child: Container(
             width: 200,
             height: 200,
             color: Colors.blue,
             ),
           ),
         ),
       );
    }
}

The provided code creates a simple Hero animation, where a blue square transitions from a smaller size on the source screen to a larger size on the destination screen.

The Animate() Widget:

Flutter's Animate() widget emerges as a powerful tool for crafting complex animations with ease. This widget simplifies the animation creation process, allowing developers to focus on the desired outcome rather than the intricate details of animation controllers and tweens.

Key Features of Animate() Widget:

Ease to use:
  • Requires minimal boilerplate code.

  • Requires minimal boilerplate code.

Supports Various Types of Animations:

  • Opacity, rotation, scale, and more.

  • Customize animation duration, curve, and delay

Example - Scaling Animation with Animate():
Animate(
 duration: Duration(seconds: 1),
 curve: Curves.easeInOut,
 builder: (context, animate, child) {
   return Transform.scale(
     scale: animate,
     child: Container(
       width: 100,
       height: 100,
       color: Colors.green,
       ),
     );
   },
);

In this example, the Animate() widget is utilized to create a scaling animation. The container begins with a scale of 0 and gradually scales up to 1 over the specified duration with an ease-in-out curve.

Use Cases:

  1.  Smooth Screen Transitions:

    Hero animations prove ideal for transitioning complex widgets or images between screens, providing a visually appealing flow to your app.

  2. Hero animations prove ideal for transitioning complex widgets or images between screens, providing a visually appealing flow to your app.

  3. Microinteractions and Feedback:

    The Animate() widget excels in creating microinteractions, such as button press animations or feedback animations, enhancing the overall user experience.

  4.  Dynamic UI Elements:

    Combine Hero animations with Animate() to fashion dynamic and engaging UI elements that respond to user interactions, elevating your app's overall user interface.

Conclusion:

In Flutter, animations play a pivotal role in elevating the user experience. Hero animations simplify screen transitions, while the Animate() widget provides a streamlined approach to creating various animations. Whether you're aiming for seamless transitions or dynamic UI elements, mastering these tools will undoubtedly add a touch of magic to your Flutter applications. So, dive in, experiment, and bring your app to life with captivating animations!