Flutter-AnimatedWidget组件源码示例解析
作者:阿博的梦呓
这篇文章主要为大家介绍了Flutter-AnimatedWidget组件源码示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
AnimatedWidget组件
在日常的开发当中,可能会出现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()
方法。希望这篇文章对小伙伴有所帮助。
以上就是Flutter-AnimatedWidget组件源码示例解析的详细内容,更多关于Flutter-AnimatedWidget组件的资料请关注脚本之家其它相关文章!