Flutter生命周期

272 阅读2分钟

1、生命周期

1.1、生命周期的基本概念 

  • 说白了就是 回调方法(函数)
  • 让用户知道封装好的这个Widget它处于什么样的状态了 

1.2、作用

  • 监听Widget的事件
  • 初始化数据
    • 创建数据
    • 发送网络请求
  • 内存管理 
    • 销毁数据、销毁监听者 
    • 销毁Timer等等

1.3、Widget的生命周期

  • Stateless 
    • 1、构造方法 
    • 2、build方法 
  • Stateful(包含两个对象Widget和State) 
    • 1、Widget构造方法 
    • 2、Widget的CreateState 
    • 3、State的构造方法 
    • 4、State的initState方法 
    • 5、didChangeDependencies方法(改变依赖关系) 
      • 依赖的InheritedWidget发生变化之后,方法也会调用! 
    • 6、State的build
      • 当调用setState方法。会重新调用build进行渲染! 
    • 7、当Widget销毁的时候,调用State的dispose 

2、Widget的渲染原理

  • 并不是所有的Widget都会被独立渲染!只有继承RenderObjectWidget的才会创建RenderObject对象!
  • 在Flutter渲染的流程中,Flutter引擎是针对Render树进行渲染!
  • Widget树Element树Render树 

2.1、渲染流程

  1. Widget创建Widget树
  2. 每个Widget创建一个Element对象(一一对应),Element加入Element树
    • 隐式调用createElement方法。(它能创建三种类型Element)
    • RenderElement:继承于RenderObjectWidget的Widget会创建该类型Element image.png image.png image.png
    • StatelessElement:继承于ComponentElement,StatelessWidget创建该类型Element
      1. mount调用Widget的build方法,并将自己(Element)传出(Widget build(BuildContext context){}) image.png
    • StatefulElement:继承于ComponentElement,StatefulWidget创建该类型Element
      1. 调用createState方法,创建State 
      2. 将Widget赋值给state 
      3. 调用state的build方法 并且将自己(Element)传出去 (build里面的context 就是Widget的Element !image.png image.png
  3. createElement后调用mount方法,通过一层层buildrebuild,根据Element类型创建Object,如果是RenderObjectElement类型则调用CreateRenderObject方法,创建RenderObject

3、子组件共享数据(重要*)

  • 数据类继承于InheritedWidget

  • 构造方法:super(child:)

  • 子组件中widget获取共享数据:return context.dependOnInheritedWidgetOfExactType<数据类名>()

    • data改变是否通知依赖data的子组件widget:updateShouldNotify(数据类名 oldWidget){return true/false}; image.png