Flutter-AnimatedWidget组件源码示例解析

 更新时间:2023年06月29日 11:01:15   作者:阿博的梦呓  
这篇文章主要为大家介绍了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组件的资料请关注脚本之家其它相关文章!

相关文章

  • Android开发笔记 最好使用eclipse

    Android开发笔记 最好使用eclipse

    值得注意一点的是,虽然Myeclipse比eclipse功能更强大,但是在具体的安卓开发过程当中,最好还是选用eclipse,sdk跟eclipse的兼容性更好
    2012-11-11
  • 很实用的Android日期计算类

    很实用的Android日期计算类

    这篇文章主要为大家详细介绍了很实用的Android日期计算类,一个是获取与今天时间差,另一个是日期格式化工具类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • Android实战教程第五篇之一键锁屏应用

    Android实战教程第五篇之一键锁屏应用

    这篇文章主要为大家详细介绍了Android实战教程第五篇之一键锁屏应用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • android studio集成unity导出工程的实现

    android studio集成unity导出工程的实现

    本文主要介绍了android studio集成unity导出工程的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • android ListView自动滚动方法

    android ListView自动滚动方法

    直接在Layout中写即可,注意下面的stackFromBottom以及transcriptMode这两个属性
    2013-01-01
  • 详解Android使用CoordinatorLayout+AppBarLayout实现拉伸顶部图片功能

    详解Android使用CoordinatorLayout+AppBarLayout实现拉伸顶部图片功能

    这篇文章主要介绍了Android使用CoordinatorLayout+AppBarLayout实现拉伸顶部图片功能,本文实例文字相结合给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • Android PickerView实现三级联动效果

    Android PickerView实现三级联动效果

    这篇文章主要为大家详细介绍了Android PickerView实现三级联动效果,PickerView实现全国地址的选择,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Flutter自定义实现神奇动效的卡片切换视图的示例代码

    Flutter自定义实现神奇动效的卡片切换视图的示例代码

    这篇文章主要介绍了Flutter自定义实现神奇动效的卡片切换视图的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • 哔哩哔哩Android项目编译优化

    哔哩哔哩Android项目编译优化

    这篇文章主要为大家介绍了哔哩哔哩Android项目编译优化详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Android用MVP实现一个简单的类淘宝订单页面的示例

    Android用MVP实现一个简单的类淘宝订单页面的示例

    本篇文章主要介绍了Android用MVP实现一个简单的类淘宝订单页面的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11

最新评论