The AnimatedIcon
widget in Flutter allows us to create and animate icons using predefined icon animations easily. It's a convenient way to add engaging and dynamic visual effects to our Flutter app. In this answer, we'll walk through the steps of using the AnimatedIcon
widget, from importing the necessary packages to implementing the animation.
The AnimatedIcon
widget provides a constructor with various parameters to customize its behavior and layout.
const AnimatedIcon({
Key? key,
required AnimatedIconData icon,
required Animation<double> progress,
Color? color,
double? size,
String? semanticLabel,
TextDirection? textDirection
})
Let's take a closer look at each parameter and its purpose:
key
: An optional key that uniquely identifies the widget.
icon
: The specific animated icon to display and animate.
progress
: The animation progress is controlled by an animation controller.
color
: The color to apply to the icon.
size
: The size of the icon.
semanticLabel
: An optional label for accessibility.
textDirection
: The text direction for the semantic label, if provided.
The progress
and icon
variable can't be null.
Before using the AnimatedIcon
widget, make sure to import the required libraries in our Dart file:
import 'package:flutter/material.dart';
Flutter provides a set of predefined animated icons that we can choose from. We can find the complete list of available icons in the official Flutter documentation. For this Answer, let's use the AnimatedIcons.play_pause
icon.
AnimatedIcon
widgetTo create an AnimatedIcon
widget, use the following code:
AnimatedIcon(icon: AnimatedIcons.play_pause,progress: _animationController, // Replace with your animation controller)
We need to replace _animationController
with our own animation controller. The progress
property should be linked to an animation controller, allowing us to control the animation's progress.
Before using the AnimatedIcon
, we need to set up an animation controller. Here's an example of how we can create an animation controller:
AnimationController _animationController;@overridevoid initState() {super.initState();_animationController = AnimationController(vsync: this,duration: Duration(milliseconds: 300),); // Adjust duration as needed}
Make sure your class extends StatefulWidget
and implements the TickerProviderStateMixin
.
We can toggle the animation by changing the animation controller's value. For example, we can use a GestureDetector
to toggle the animation when a user taps on a widget:
GestureDetector(onTap: () {if (_animationController.isDismissed) {_animationController.forward();} else {_animationController.reverse();}},child: AnimatedIcon(icon: AnimatedIcons.play_pause,progress: _animationController,),)
This code snippet will play the animation when the user taps the widget and pause it when tapped again.
Don't forget to dispose of the animation controller to prevent memory leaks:
@overridevoid dispose() {_animationController.dispose();super.dispose();}
After running the above code, we can see the following output:
We get the following output by putting together the code explained above.
import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'AnimatedIcon Example', theme: ThemeData( primarySwatch: Colors.blue, ), home: MyHomePage(), ); } } class MyHomePage extends StatefulWidget { @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin { late AnimationController _animationController; @override void initState() { super.initState(); _animationController = AnimationController( vsync: this, duration: Duration(milliseconds: 300), ); } @override void dispose() { _animationController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Educative AnimatedIcon Answer'), ), body: Center( child: GestureDetector( onTap: () { if (_animationController.isDismissed) { _animationController.forward(); } else { _animationController.reverse(); } }, child: AnimatedIcon( icon: AnimatedIcons.play_pause, progress: _animationController, size: 50.0, color: Colors.blue, semanticLabel: 'Play/Pause', ), ), ), ); } }
The AnimatedIcon
widget in Flutter provides a powerful and efficient way to incorporate animated icons into our app's user interface. Leveraging the provided animation controller, customizable parameters such as color and size, and seamless toggling functionality, we can create dynamic and interactive icon animations that contribute to a polished and captivating user experience.