4.Flutter生命周期與路由管理

1.Flutter中生命周期:

flutter也有自己的生命周期,不像Android中Application、Activity汽抚、Fragment生命周期分得這么明細(xì)精算,flutter中只在StatefulWidget維護(hù)的State中維護(hù)了5個(gè)生命周期函數(shù)(可用于App中的頁(yè)面跳轉(zhuǎn),相當(dāng)于Android中View的生命周期)柜候。而Activity中的生命周期可以通過(guò)實(shí)現(xiàn)WidgetsBindingObserver 接口搞动,在didChangeAppLifecycleState()中獲取狀態(tài)回調(diào)。

1.1StatefulWidget:

initState()-->didChangeDependencies()-->deactivate()-->dispose() didUpdateWidge()

  • initState(): 表示當(dāng)前 State 將和一個(gè) BuildContext 產(chǎn)生關(guān)聯(lián)改橘,但是此時(shí)BuildContext
    沒(méi)有完全裝載完成滋尉,如果你需要在該方法中獲取 BuildContext ,可以 new Future.delayed(const Duration(seconds: 0, (){//context}); 一下飞主。

  • didChangeDependencies(): 在 initState() 之后調(diào)用狮惜,當(dāng) State 對(duì)象的依賴(lài)關(guān)系發(fā)生變化時(shí)高诺,該方法被調(diào)用,初始化時(shí)也會(huì)調(diào)用碾篡。

  • deactivate(): 當(dāng) State 被暫時(shí)從視圖樹(shù)中移除時(shí)虱而,會(huì)調(diào)用這個(gè)方法,同時(shí)頁(yè)面切換時(shí)开泽,也會(huì)調(diào)用牡拇。頁(yè)面路由切換的時(shí)候push()、pop()都會(huì)回調(diào)這個(gè)函數(shù)穆律。

  • dispose(): Widget 銷(xiāo)毀了惠呼,在調(diào)用這個(gè)方法之前,總會(huì)先調(diào)用 deactivate()峦耘。

  • didUpdateWidget(): 當(dāng) widget 狀態(tài)發(fā)生變化時(shí)剔蹋,會(huì)調(diào)用。

1.2常見(jiàn)業(yè)務(wù)場(chǎng)景:

1.Widget A打開(kāi)Widget B: 調(diào)用 Navigator.push(B)

  • B構(gòu)造函數(shù)--->B initState()--->B didChangeDependencies()--->B build()--->A deactivate()--->A didChangeDependencies().

2.Widget B從Widget A退出: 調(diào)用Navigator.pop()

  • A deactivate()--->A didChangeDependencies()--->A build()--->B deactivate()--->B dispose()

可以看出辅髓, Flutter打開(kāi)泣崩、關(guān)閉Widget時(shí)跟安卓、iOS的時(shí)序一樣洛口, 都是先處理即將顯示的界面矫付。

1.3Activity生命周期和Flutter的對(duì)應(yīng)關(guān)系(主要依賴(lài)WidgetsBindingObserver 接口):

Flutter提供了WidgetsBindingObserver來(lái)監(jiān)聽(tīng)AppLifecycleState, 而AppLifecycleState有4種狀態(tài):

1第焰、 resumed 界面可見(jiàn)买优, 同安卓的onResume。

2樟遣、inactive界面退到后臺(tái)或彈出對(duì)話(huà)框情況下而叼, 即失去了焦點(diǎn)但仍可以執(zhí)行drawframe回調(diào);同安卓的onPause豹悬;

3葵陵、paused應(yīng)用掛起,比如退到后臺(tái)瞻佛,失去了焦點(diǎn)且不會(huì)收到 drawframe 回調(diào)脱篙;同安卓的onStop;

4伤柄、suspending绊困, iOS中沒(méi)用,安卓里就是掛起适刀,不會(huì)再執(zhí)行 drawframe 回調(diào)秤朗;

5、關(guān)于drawframe回調(diào):Vsync信號(hào)到來(lái)之后笔喉,Engin會(huì)按順序回調(diào)window的兩個(gè)回調(diào)函數(shù):onBeginFrame()onDrawFrame()取视。這兩個(gè)回調(diào)是SchedulerBinding初始化的時(shí)候設(shè)置給window的硝皂。對(duì)應(yīng)的是SchedulerBinding.handleBeginFrame()SchedulerBinding.handleDrawFrame()

應(yīng)用場(chǎng)景:
1作谭、初次打開(kāi)widget時(shí)稽物,不執(zhí)行AppLifecycleState的回調(diào);

2折欠、按home鍵或Power鍵贝或, AppLifecycleState inactive---->AppLifecycleState pause

3、從后臺(tái)到前臺(tái):AppLifecycleState inactive--->ApplifecycleState resumed

4锐秦、back鍵退出應(yīng)用: AppLifecycleState inactive--->AppLifecycleState paused

class _TabBarState extends State<TabBarPage> with TickerProviderStateMixin ,WidgetsBindingObserver{
  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    // state對(duì)應(yīng)生命周期回調(diào)
    print('AsyncSnapshotLifeCycle:' + state.toString());
    super.didChangeAppLifecycleState(state);
  }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末咪奖,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子酱床,更是在濱河造成了極大的恐慌赡艰,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斤葱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡揖闸,警方通過(guò)查閱死者的電腦和手機(jī)揍堕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)汤纸,“玉大人衩茸,你說(shuō)我怎么就攤上這事≈ⅲ” “怎么了楞慈?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)啃擦。 經(jīng)常有香客問(wèn)我囊蓝,道長(zhǎng),這世上最難降的妖魔是什么令蛉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任聚霜,我火速辦了婚禮,結(jié)果婚禮上珠叔,老公的妹妹穿的比我還像新娘蝎宇。我一直安慰自己,他們只是感情好祷安,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布姥芥。 她就那樣靜靜地躺著,像睡著了一般汇鞭。 火紅的嫁衣襯著肌膚如雪凉唐。 梳的紋絲不亂的頭發(fā)上庸追,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音熊榛,去河邊找鬼锚国。 笑死,一個(gè)胖子當(dāng)著我的面吹牛玄坦,可吹牛的內(nèi)容都是我干的血筑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼煎楣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼豺总!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起择懂,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤喻喳,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后困曙,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體表伦,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年慷丽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蹦哼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡要糊,死狀恐怖纲熏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锄俄,我是刑警寧澤局劲,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站奶赠,受9級(jí)特大地震影響鱼填,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜毅戈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一剔氏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧竹祷,春花似錦谈跛、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春阻桅,著一層夾襖步出監(jiān)牢的瞬間凉倚,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工嫂沉, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留稽寒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓趟章,卻偏偏與公主長(zhǎng)得像杏糙,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蚓土,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345