Flutter-AnimatedWidget组件源码分析

源代码 2024-10-1 18:05:28 38 0 来自 中国
在一样平常的开发当中,大概会出现Flutter SDK自带的动画组件不能满意我们实际的开发需求;遇到这种情况,我们可以通过AnimatedWidget组件来自界说动画组件,这篇博客分享AnimatedWidget组件相干的内容,记载一次AnimatedWidget组件的源码解读。
AnimatedWidget组件源码

abstract class AnimatedWidget extends StatefulWidget {  const AnimatedWidget({    Key? key,    required this.listenable,  }) : assert(listenable != null),       super(key: key);  final Listenable listenable;  @protected  Widget build(BuildContext context);   @override  State<AnimatedWidget> createState() => _AnimatedState();  @override  void debugFillProperties(DiagnosticPropertiesBuilder properties) {    super.debugFillProperties(properties);    properties.add(DiagnosticsProperty<Listenable>('animation', listenable));  }}class _AnimatedState extends State<AnimatedWidget> {  @override  void initState() {    super.initState();    widget.listenable.addListener(_handleChange);  }  @override  void didUpdateWidget(AnimatedWidget oldWidget) {    super.didUpdateWidget(oldWidget);    if (widget.listenable != oldWidget.listenable) {      oldWidget.listenable.removeListener(_handleChange);      widget.listenable.addListener(_handleChange);    }  }  @override  void dispose() {    widget.listenable.removeListener(_handleChange);    super.dispose();  }  void _handleChange() {    setState(() {      // The listenable's state is our build state, and it changed already.    });  }  @override  Widget build(BuildContext context) => widget.build(context);}上面是AnimatedWidget组件的源码,解读如下:

  • AnimatedWidget组件,是一个有状态的组件,它内里就封装是了实现动画的模板;
  • 构造方法中的listenable对象,指的是Animation对象;
  • 重写build方法,传入一个利用动画的组件;
  • _AnimatedState.initState(),给动画设置监听器,在动画实行的过程中主动调用setState()更新状态;
  • _AnimatedState.dispose(),开释动画监听器,防止出现内存走漏。
通过源码的解读,我们可以发实际现自己的自界说动画照旧相对简单的,只须要继续AnimatedWidget组件,然后重写build()方法。盼望这篇文章对小同伴有所资助。
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-18 16:53, Processed in 0.157867 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表