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的生命周期。