// 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. import 'package:flutter/material.dart'; /// Flutter code sample for [AnimatedIcon]. final Map iconsList = { '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 createState() => _AnimatedIconExampleState(); } class _AnimatedIconExampleState extends State with SingleTickerProviderStateMixin { late AnimationController controller; late Animation animation; @override void initState() { super.initState(); controller = AnimationController( vsync: this, duration: const Duration(seconds: 2), ) ..forward() ..repeat(reverse: true); animation = Tween(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 entry) { return Card( child: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ AnimatedIcon( icon: entry.value, progress: animation, size: 72.0, semanticLabel: entry.key, ), const SizedBox(height: 8.0), Text(entry.key), ], ), ), ); }).toList(), ), ); } }