Flutter生命周期超详细讲解

 更新时间:2023年04月13日 09:52:36   作者:iOS_Apple  
和其他的视图框架比如android的Activity一样,flutter中的视图Widget也存在生命周期,生命周期的回调函数提现在了State上面。理解flutter的生命周期,对我们写出一个合理的控件至关重要

一 这里看一下StatefulWidget的生命周期

其本身是由两个类组成的,StatefulWidget 和 State 组成的。

class DemoWidget extends StatefulWidget {
  const DemoWidget({super.key});
  @override
  State<DemoWidget> createState() => _DemoWidgetState();
}
class _DemoWidgetState extends State<DemoWidget> {
  @override
  Widget build(BuildContext context) {
    return Container();
  }
}

首先

会执行StatefulWidget 中相关的方法

* 1 执行StatefulWidget的构造函数(Constructor)来创建StatefuleWidget

* 2 执行StateWidget的createState 方法,来创建一个维护StatefulWidget 的State对象

其次

调用createState 创建State对象时候,执行State类相关的方法

* 1 执行State 类的构造方法(Constructor)来创建State 对象

* 2 执行initState,我们通常会在这个方法中执行一些数据初始化的操作或者也可能发送数据请求

   @override
  void initState() {
    super.initState();
    
  }

* 3 执行didChangeDependencies 方法,这个方法会在两种情况下调用

  • 调用initState 会调用
  • 从其他对象依赖一些数据发生改变的时候,会调用

* 4 执行build 方法,来看一下当前的widget 需要渲染哪些Widget,构建对应的widgets

* 5 当前的widget 不再使用的时候,会调用dispose 进行销毁

* 6 手动调用setState方法,会根据最新的状态(数据) 开重新调用build 方法,构建对应的Widgets

* 7 执行didUpdateWidget 方法是当父Widget 触发重建(rebuild)时,系统会调用didUpdateWidget方法

二 SetState

 /// Marks the element as dirty and adds it to the global list of widgets to
  /// rebuild in the next frame.
  ///
  /// Since it is inefficient to build an element twice in one frame,
  /// applications and widgets should be structured so as to only mark
  /// widgets dirty during event handlers before the frame begins, not during
  /// the build itself.
  void markNeedsBuild() {
void scheduleBuildFor(Element element) 
    if (_dirty) {
      owner!.scheduleBuildFor(this);
    }
    if (hadDependencies) {
      didChangeDependencies();
    }
 }
 /// Adds an element to the dirty elements list so that it will be rebuilt
  /// when [WidgetsBinding.drawFrame] calls [buildScope].
  void scheduleBuildFor(Element element) {
}

setState的调用 其实是element 会调用 markNeedsBuild 这个方法,标记当前的element 需要更新。dirty 设置为true.

方法的最后会调用一个BuildOwner类中的

scheduleBuildFor 方法,这个方法注释写的很清楚,就是吧这个element 添加到dirty elements list 中去,当WidgetsBinding.drawFrame 去走更新的流程

when [WidgetsBinding.drawFrame] calls [buildScope].

到此这篇关于Flutter生命周期超详细讲解的文章就介绍到这了,更多相关Flutter生命周期内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android MediaPlayer 播放音频的方式

    Android MediaPlayer 播放音频的方式

    这篇文章主要介绍了Android MediaPlayer 播放音频的方式,本文给大家详细介绍了MediaPlayer的使用方式,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • 使用android studio导入模块的两种方法(超详细)

    使用android studio导入模块的两种方法(超详细)

    这篇文章主要介绍了使用android studio导入模块的两种方法,本文通过图文并茂的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • android全局监控click事件的四种方式(小结)

    android全局监控click事件的四种方式(小结)

    本篇文章主要介绍了android全局监控click事件的四种方式(小结),详细介绍如何在全局上去监听 click 点击事件,并做些通用处理或是拦截,有兴趣的可以了解一下
    2017-08-08
  • Android仿QQ好友详情页下拉顶部图片缩放效果

    Android仿QQ好友详情页下拉顶部图片缩放效果

    这篇文章主要为大家详细介绍了Android仿QQ好友详情页下拉顶部图片缩放效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • 浅谈EventBus

    浅谈EventBus

    EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service。本文对其实现原理进行系统介绍,有需要的朋友可以看下
    2016-12-12
  • HorizontalScrollView水平滚动控件使用方法详解

    HorizontalScrollView水平滚动控件使用方法详解

    这篇文章主要为大家详细介绍了HorizontalScrollView水平滚动控件的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Android Studio多渠道打包套路

    Android Studio多渠道打包套路

    最近有好多朋友向小编咨询Android Studio多渠道的打包方法,今天小编给大家分享Android Studio多渠道打包套路,需要的朋友参考下吧
    2017-11-11
  • Android编程应用风格和主题详解

    Android编程应用风格和主题详解

    这篇文章主要介绍了Android编程应用风格和主题,较为详细的分析了Android应用风格和主题的概念、功能、使用方法与注意事项,需要的朋友可以参考下
    2016-10-10
  • Android实现带图标的列表对话框

    Android实现带图标的列表对话框

    这篇文章主要为大家详细介绍了Android实现带图标的列表对话框,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Android实现简易计算器小程序

    Android实现简易计算器小程序

    这篇文章主要为大家详细介绍了Android实现简易计算器小程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05

最新评论