使用AnimatedIcons的图标数据,可以根据一个动画控制器来使图标进行动画效果。可指定图标大小、颜色等。

相关组件

Icon

AnimatedIcon基本使用

【icon】 : 动画图标数据 【AnimatedIcons】
【size】 : 大小 【double】
【color】 : 颜色 【Color】
【progress】 : 动画 【Animation
45.gif

  1. import 'package:flutter/cupertino.dart';
  2. import 'package:flutter/material.dart';
  3. class CustomAnimatedIcon extends StatefulWidget {
  4. @override
  5. _CustomAnimatedIconState createState() => _CustomAnimatedIconState();
  6. }
  7. class _CustomAnimatedIconState extends State<CustomAnimatedIcon>
  8. with SingleTickerProviderStateMixin {
  9. AnimationController _ctrl;
  10. @override
  11. void initState() {
  12. _ctrl = AnimationController(vsync: this, duration: Duration(seconds: 1));
  13. _ctrl.forward();
  14. super.initState();
  15. }
  16. @override
  17. void dispose() {
  18. _ctrl.dispose();
  19. super.dispose();
  20. }
  21. @override
  22. Widget build(BuildContext context) {
  23. return GestureDetector(
  24. onTap: () {
  25. setState(() {
  26. _ctrl.reset();
  27. _ctrl.forward();
  28. });
  29. },
  30. child: Wrap(
  31. runSpacing: 30,
  32. children: _buildChildren(),
  33. ),
  34. );
  35. }
  36. final data = {
  37. Colors.orange: AnimatedIcons.menu_arrow,
  38. Colors.blue: AnimatedIcons.ellipsis_search,
  39. Colors.red: AnimatedIcons.close_menu,
  40. Colors.green: AnimatedIcons.arrow_menu,
  41. Colors.cyanAccent: AnimatedIcons.play_pause,
  42. Colors.purple: AnimatedIcons.pause_play,
  43. };
  44. List<Widget> _buildChildren() => data.keys
  45. .map((e) => AnimatedIcon(
  46. size: 50,
  47. color: e,
  48. icon: data[e],
  49. progress: _ctrl,
  50. ))
  51. .toList();
  52. }