Flutter跟安卓的Activity、iOS的ViewController一样拥有自己的生命周期, Flutter中一切都是Widget,渲染方式有点像H5的DOM树。 

      先看生命周期图:

 

Flutter生命周期可以分为3个阶段:

1、实例化组件并添加到树, 即Navigator.push;

2、状态变化,即打开新的widget或者依赖的上级widget发生变化;

3、从树中移除,  即Navigator.pop。

 

构造函数:

同其它高级语言, 只执行一次;

 

initState:

插入到渲染树时调用,只执行一次。(类似Android Fragment的onCreateView函数)

 

didChangeDependencies:

1、在初始化initState后执行; 2、显示/关闭其它widget。 3、可执行多次;

 

didUpdateWidget:

上级节点rebuild widget时, 即上级组件状态发生变化时会触发子widget执行didUpdateWidget;

 

deative:

有点像Android的onStop函数, 在打开新的Widget或回到这个widget时会执行; 可执行多次;

 

dispose:

类似于Android的onDestroy, 在执行Navigator.pop后会调用该办法, 表示组件已销毁;

 

reassemble:

点击闪电会执行,只用于调试时的hot reload。 release版本不会执行该函数。

 

常见业务场景:

Widget A打开Widget B: Navigator.push(B)

B构造函数--->B initState--->B didChangeDependencies--->B build--->A deactive--->A didChangeDependencies.

 

Widget B退出: Navigator.pop

A deactive--->A didChangeDependencies--->A build--->B deactive--->B dispose

 

可以看出, Flutter打开、关闭Widget时跟安卓、iOS的时序一样, 都是先处理即将显示的界面。

Flutter不支持Home键、Power键等监听,  需要宿主(安卓/iOS)将事件发送给Flutter, 这时可以用EventChannel实现, 从而补全Flutter的生命周期。

posted on 2019-10-29 16:09  诉说静风  阅读(517)  评论(0编辑  收藏  举报

Live2D
快把你的小爪子拿开!