生命周期的基本概念

什么是生命周期

本质是:回调方法(函数) - 实现这个方法去监听它的生命周期
—让你知道我封装好的这个Widget它处于什么样的状态了!

生命周期有什么作用

监听Widget的事件

初始化数据
  • 创建数据
  • 发送网络请求

    内存管理
  • 销毁数据、销毁监听者 销毁Timer等等

    Widget的生命周期

    Stateless
  • 构造方法

  • build方法
    Stateful(包含两个对象Widget、State)

    为什么将State和Widget分开呢?

答案是性能, State管理状态(可以理解为Controller),Widget是UI(即View)。 根据状态变化每次生成Widget(即View)可以节省内存,即不必每次创建状态对象State。

image.png

  • Widget构造方法
  • Widget的CreateState
  • State的构造方法
  • State的initState方法
  • didChangeDependencies方法(改变依赖关系)
    • 依赖的InheritedWidget发生变化之后,方法也会调用!
  • didUpdateWidget

当组件的状态改变的时候就会调用didUpdateWidget,比如调用了setState.
实际上这里flutter框架会创建一个新的Widget,绑定本State,并在这个函数中传递老的Widget。

  • State的build
    • 当调用setState方法。会重新调用build进行渲染!
    • setState 等价于StatefulElement element = context; element.markNeedsBuild();
  • deactivate 当State对象从渲染树中移除的时候,就会调用,即将销毁
  • 当Widget销毁的时候,调用State的dispose

    在dispose后仍异步调用setState报错

    This error happens if you call setState() on a State object for a widget that no longer appears in the widget tree
    定义页面状态异常管理类
    image.png
    使用时,定义的state继承自HiState
    image.png