// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. /// Flutter code sample for [AnimatedIcon]. import 'package:flutter/material.dart'; final Map<String, AnimatedIconData> iconsList = <String, AnimatedIconData>{ 'add_event': AnimatedIcons.add_event, 'arrow_menu': AnimatedIcons.arrow_menu, 'close_menu': AnimatedIcons.close_menu, 'ellipsis_search': AnimatedIcons.ellipsis_search, 'event_add': AnimatedIcons.event_add, 'home_menu': AnimatedIcons.home_menu, 'list_view': AnimatedIcons.list_view, 'menu_arrow': AnimatedIcons.menu_arrow, 'menu_close': AnimatedIcons.menu_close, 'menu_home': AnimatedIcons.menu_home, 'pause_play': AnimatedIcons.pause_play, 'play_pause': AnimatedIcons.play_pause, 'search_ellipsis': AnimatedIcons.search_ellipsis, 'view_list': AnimatedIcons.view_list, }; void main() { runApp(const AnimatedIconApp()); } class AnimatedIconApp extends StatelessWidget { const AnimatedIconApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( theme: ThemeData( colorSchemeSeed: const Color(0xff6750a4), useMaterial3: true, ), home: const Scaffold( body: AnimatedIconExample(), ), ); } } class AnimatedIconExample extends StatefulWidget { const AnimatedIconExample({super.key}); @override State<AnimatedIconExample> createState() => _AnimatedIconExampleState(); } class _AnimatedIconExampleState extends State<AnimatedIconExample> with SingleTickerProviderStateMixin { late AnimationController controller; late Animation<double> animation; @override void initState() { super.initState(); controller = AnimationController( vsync: this, duration: const Duration(seconds: 2), )..forward() ..repeat(reverse: true); animation = Tween<double>(begin: 0.0, end: 1.0).animate(controller); } @override void dispose() { controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( body: GridView( gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 4, ), children: iconsList.entries.map((MapEntry<String, AnimatedIconData> entry) { return Card( child: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ AnimatedIcon( icon: entry.value, progress: animation, size: 72.0, semanticLabel: entry.key, ), const SizedBox(height: 8.0), Text(entry.key), ], ), ), ); }).toList(), ), ); } }