// 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'; class AnimatedIconsTestApp extends StatelessWidget { const AnimatedIconsTestApp({super.key}); @override Widget build(BuildContext context) { return const MaterialApp( title: 'Animated Icons Test', home: Scaffold( body: IconsList(), ), ); } } class IconsList extends StatelessWidget { const IconsList({super.key}); @override Widget build(BuildContext context) { return ListView( children: samples.map<IconSampleRow>((IconSample s) => IconSampleRow(s)).toList(), ); } } class IconSampleRow extends StatefulWidget { const IconSampleRow(this.sample, {super.key}); final IconSample sample; @override State createState() => IconSampleRowState(); } class IconSampleRowState extends State<IconSampleRow> with SingleTickerProviderStateMixin { late final AnimationController progress = AnimationController(vsync: this, duration: const Duration(milliseconds: 300)); @override Widget build(BuildContext context) { return ListTile( leading: InkWell( onTap: () { progress.forward(from: 0.0); }, child: AnimatedIcon( icon: widget.sample.icon, progress: progress, color: Colors.lightBlue, ), ), title: Text(widget.sample.description), subtitle: Slider( value: progress.value, onChanged: (double v) { progress.animateTo(v, duration: Duration.zero); }, ), ); } @override void initState() { super.initState(); progress.addListener(_handleChange); } @override void dispose() { progress.removeListener(_handleChange); super.dispose(); } void _handleChange() { setState(() {}); } } const List<IconSample> samples = <IconSample> [ IconSample(AnimatedIcons.arrow_menu, 'arrow_menu'), IconSample(AnimatedIcons.menu_arrow, 'menu_arrow'), IconSample(AnimatedIcons.close_menu, 'close_menu'), IconSample(AnimatedIcons.menu_close, 'menu_close'), IconSample(AnimatedIcons.home_menu, 'home_menu'), IconSample(AnimatedIcons.menu_home, 'menu_home'), IconSample(AnimatedIcons.play_pause, 'play_pause'), IconSample(AnimatedIcons.pause_play, 'pause_play'), IconSample(AnimatedIcons.list_view, 'list_view'), IconSample(AnimatedIcons.view_list, 'view_list'), IconSample(AnimatedIcons.add_event, 'add_event'), IconSample(AnimatedIcons.event_add, 'event_add'), IconSample(AnimatedIcons.ellipsis_search, 'ellipsis_search'), IconSample(AnimatedIcons.search_ellipsis, 'search_ellipsis'), ]; class IconSample { const IconSample(this.icon, this.description); final AnimatedIconData icon; final String description; } void main() => runApp(const AnimatedIconsTestApp());