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

Flutter的生命週期的更多相关文章

  1. vue生命週期

    https://www.cnblogs.com/fly_dragon/p/6220273.html https://www.cnblogs.com/fly_dragon/p/6220273.html

  2. 【Flutter学习】之 Flutter 的生命周期

    一,概述 Flutter 的生命周期分为两个部分: Widget 的生命周期 App 的生命周期 二,Widget 的生命周期 Flutter 里的 Widget 分为 StatelessWidget ...

  3. flutter的生命周期

    大致可以看成三个阶段 初始化(插入渲染树) 状态改变(在渲染树中存在) 销毁(从渲染树种移除) initState 当插入渲染树的时候调用,这个函数在生命周期中只调用一次.这里可以做一些初始化工作,比 ...

  4. 【不懂】spring bean生命周期

    完整的生命周期(牢记): 1.spring容器准备 2.实例化bean 3.注入依赖关系 4.初始化bean 5.使用bean 6.销毁bean Bean的完整生命週期可以認為是從容器建立初始化Bea ...

  5. J2EE学习(2)--何謂容器【良葛格学习笔记搬】

    何謂容器 對於Java程式而言,JVM(Java Virtual Machine)是其作業系統,.java編譯為.class檔案,.class對於JVM而言,就是其可執行檔,你的Java程式基本上只認 ...

  6. device host global 函数要求

    转自:https://kheresy.wordpress.com/2007/11/05/nvidia-cuda-api%EF%BC%88%E4%B8%8A%EF%BC%89/ Function typ ...

  7. 入門必學NO.1 Android 初學特訓班(第四版) 目錄

    第 01 章 敲開 Android 的開發大門工欲善其事,必先利其器,要學習 Android 應用程式,先取得功能強大的開發工具,就可讓學習事半功倍. 1.1 Android 是啥米?1.2 建構 A ...

  8. ebj笔记

    所有EJB3.0开发商都必须提供一个JMS provider的实现,JMS provider对于message-driven bean而言绝对是必须的.JMS是一套用于访问企业消息系统的开发商中立的A ...

  9. POD数据了解

    Plain old data (普通旧的数据); POD 是Plain Old Data的簡寫,是指一些系統的int, char, float.指標.array之類的資料型別,這應該蠻好想像的,就是C ...

随机推荐

  1. windows系统如何查看物理cpu核数,内存型号等

    首先,我们需要打开命令行模式,利用win+r键打开运行,输入cmd回车即会出现   然后在命令行界面输入wmic进入命令行系统管理执行脚本界面     然后我们通过cpu get *可以查看cpu的具 ...

  2. C#通过文件头判断文件的类型(不是后缀名)

    FileStream fs=new FileStream(@"D:\6",FileMode.Open,FileAccess.Read); BinaryReader reader= ...

  3. RxJava学习总结

    1. 概念 Rx是微软.NET的一个响应式扩展.Rx借助可观测的序列提供一种简单的方式来创建异步的,基于事件驱动的程序.Rx就是一种响应式编程,来创建基于事件的异步程序RxJava是一个在 Java ...

  4. ::before和::after的详细介绍

    原文传送门: https://www.cnblogs.com/staro... 一.介绍 css3为了区分伪类和伪元素,伪元素采用双冒号写法. 常见伪类--:hover,:link,:active,: ...

  5. js里面常用的正则表达式

    在工作中经常碰到关于表单的验证,一般采取正则表达是比较简洁,代码量少,但是却经常忘记一些正则的用法.下面记录工作中经常用到的正则表达式. * 代表0次或者多次   +代表1次或者多次  ?代表0次或者 ...

  6. scrapy之Request对象

    我们在使用scrapy框架的时候,会经常疑惑,数据流是怎么样在各个组件中间传递的.最近经常用scrapy+selenium爬取淘宝,又因为今天周五心情好,本宝宝决定梳理一下这方面知识. scrapy中 ...

  7. poj3744 (概率DP+矩阵快速幂)

    http://poj.org/problem?id=3744 题意:在一条铺满地雷的路上,你现在的起点在1处.在N个点处布有地雷,1<=N<=10.地雷点的坐标范围:[1,10000000 ...

  8. HDU6415 Rikka with Nash Equilibrium

    HDU6415 Rikka with Nash Equilibrium 找规律 + 大数 由于规律会被取模破坏,所以用了java 找出规律的思路是: 对于一个n*m的矩阵构造,我先考虑n*1的构造,很 ...

  9. 用PHP实现一些常见的排序算法

    1.冒泡排序: 两两相比,每循环一轮就不用再比较最后一个元素了,因为最后一个元素已经是最大或者最小. function maopaoSort ($list) { $len = count($list) ...

  10. Git错误总结

    1.error: failed to push some refs to ‘git@github.com:XXXX/XXXX‘ hint: Updates were rejected because ...