Flutter中State的生命周期

顺序解释

initState

Widget第一次插入到Widget时会被调用,对于每一个State对象,Flutter framework只会调用一次该回调,所以,通常在该回调中做一些一次性的动作.如状态初始化,订阅子树的事件通知等.

didChangeDependencies

initState后立刻调用,State依赖的对象发生变化时调用.

build

构建Widget时调用,调用后控件会显示

reassemble

此回调是专门为了开发调式而提供的,在热重载时会被调用,此回调在Release模式下永远不会被调用.

didUpdateWidget

组件状态改变时调用,可能会调用多次

deactivate

当State对象从树中被移除时,会调用此回调

dispose

当State对象从树中永久移除时调用,通常在此回调中释放资源.

什么是生命周期呢?

  • 客户端开发:iOS开发中我们需要知道UIViewController从创建到销毁的整个过程,Android开发中我们需要知道Activity从创建到销毁的整个过程。以便在不同的生命周期方法中完成不同的操作;

  • 前端开发中:Vue、React开发中组件也都有自己的生命周期,在不同的生命周期中我们可以做不同的操作;

Flutter小部件的生命周期:

  • StatelessWidget可以由父Widget直接传入值,调用build方法来构建,整个过程非常简单;

  • 而StatefulWidget需要通过State来管理其数据,并且还要监控状态的改变决定是否重新build整个Widget;

  • 所以,我们主要讨论StatefulWidget的生命周期,也就是它从创建到销毁的整个过程;

那么StatefulWidget有哪些生命周期的回调呢?它们分别在什么情况下执行呢?

  • 在下图中,灰色部分的内容是Flutter内部操作的,我们并不需要手动去设置它们;

  • 白色部分表示我们可以去监听到或者可以手动调用的方法;

我们知道StatefulWidget本身由两个类组成的:StatefulWidgetState,我们分开进行分析 

1.首先,执行StatefulWidget中相关的方法:

  • 1、执行StatefulWidget的构造函数(Constructor)来创建出StatefulWidget;

  • 2、执行StatefulWidget的createState方法,来创建一个维护StatefulWidget的State对象;

2.其次,调用createState创建State对象时,执行State类的相关方法:

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

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

 

  • 注意:这个方法是重写父类的方法,必须调用super,因为父类中会进行一些其他操作;

  • 并且如果你阅读源码,你会发现这里有一个注解(annotation):@mustCallSuper

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

  • 情况一:调用initState会调用;

  • 情况二:从其他对象中依赖一些数据发生改变时,比如前面我们提到的InheritedWidget

4. Flutter执行build方法,来看一下我们当前的Widget需要渲染哪些Widget;

5.当前的Widget不再使用时,会调用dispose进行销毁;

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值