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组件的资料请关注脚本之家其它相关文章!
相关文章
使用adb命令向Android模拟器中导入通讯录联系人的方法
这篇文章主要介绍了使用adb命令向Android模拟器中导入通讯录联系人的方法,实例分析了导入通讯录存储文件的技巧,需要的朋友可以参考下2015-01-01
Android 中通过ViewDragHelper实现ListView的Item的侧拉划出效果
这篇文章主要介绍了 Android 中通过ViewDragHelper实现ListView的Item的侧拉划出效果,需要的朋友可以参考下2017-08-08
Android TimePicker 直接输入的问题解决方案
这篇文章主要介绍了Android TimePicker 直接输入的问题解决方案的相关资料,需要的朋友可以参考下2017-04-04
Android 重写ViewGroup 分析onMeasure()和onLayout()方法
这篇文章主要介绍了Android 重写ViewGroup 分析onMeasure()和onLayout()方法的相关资料,需要的朋友可以参考下2017-06-06
Android App支付系列(一):微信支付接入详细指南(附官方支付demo)
这篇文章主要介绍了Android App支付系列(一):微信支付接入详细指南(附官方支付demo) ,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2016-11-11


最新评论