| // 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<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(), |
| ), |
| ); |
| } |
| } |