欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

移除flutter,移除粉絲

flutter實踐 - flutter中的生命周期

與iOS的ViewController、Android的Activity一樣,F(xiàn)lutter中的Widget也存在生命周期,并且通過State來提現(xiàn)。而App則是一個特殊的Widget,除了需要處理視圖顯示的各個階段,還需要應對應用從啟動到退出所經(jīng)歷的各個狀態(tài)。

網(wǎng)站建設哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、重慶小程序開發(fā)公司、集團企業(yè)網(wǎng)站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了遂溪免費建站歡迎大家使用!

State的生命周期,指的是在用戶參與的情況查下,其關聯(lián)的Widget所經(jīng)歷的從創(chuàng)建到顯示再到更新最后到停止,直至銷毀的各個過程階段。

這些不同的階段涉及到的特定的任務處理,正確理解State的生命周期至關重要,State的生命周期流程圖圖,如下所示:

從圖中可以看到,State的生命周期可以分為3個階段:創(chuàng)建、更新、銷毀。下面將介紹每一個階段的具體流程

State初始化時會依次執(zhí)行:構造方法 - initState - didChangeDependencies - build,隨后完成頁面渲染

Widget的狀態(tài)更新,主要由3個方法觸發(fā):setState、didChangeDependencies與didUpdateWidget。

一旦這三個方法被調(diào)用,F(xiàn)lutter就回銷毀舊的Widget,并調(diào)用build方法重建Widget

組件銷毀相對比較簡單,組件被移除,或者頁面銷毀的時候,系統(tǒng)會調(diào)用deactivate和dispose這兩個方法來移除或銷毀組件

下面這張表格也可以幫助我們理解記憶這些調(diào)用實際

視圖的生命周期,定義了視圖的加載到構建的全過程,其回調(diào)機制能夠確保我們可以更具視圖的狀態(tài)選擇合適的時間做恰當?shù)氖虑椋鳤pp的生命周期,則定義了App從啟動到退出的全過程

在原生Android、iOS開發(fā)中,有時我們需要再對應的App生命周期事件中做相應的處理,比如App從后臺進入前臺,從前臺退出后臺,或者在UI繪制完成后做一些處理。

這樣的需求,在原生開發(fā)中,可以通過重寫Activity、ViewController生命周期回調(diào)方法,或者是注冊應用程序的相關通知來兼容App的生命周期并做相應的處理。而在Flutter中,我們可以利用WidgetsBindingObserver類,來實現(xiàn)同樣的需求。

下面我們看看WidgetsBindingObserver中具體有哪些回調(diào)函數(shù):

didChangeAppLifecycleState回調(diào)函數(shù)中,有一個參數(shù)類型為AppLifecycleState的枚舉類型,這個枚舉類型是Flutter對App生命周期狀態(tài)的封裝,它的常用狀態(tài)包括:

可以將App切前后臺,控制臺輸出的App狀態(tài),可以發(fā)現(xiàn):

我們可以通過下面的這張圖直觀的了解狀態(tài)切換過程

除了需要監(jiān)聽App的生命周期回調(diào)做相應處理外,根據(jù)不同的需求,我們需要再組件宣講之后做一些與顯示安全相關的操作,在iOS中,可以通過GCD的方法,讓操作在下一個RunLoop執(zhí)行,在Android中,可以通過View.post()插入消息隊列,來保證在組件渲染后進行相關操作。在Flutter中實現(xiàn)同樣的需求會更簡單:使用WidgetsBinding來實現(xiàn)即可

WidgetsBinding提供了單詞Frame繪制回調(diào)和實時Frame繪制回調(diào)兩種機制來滿足不同的需求場景:

flutter生命周期

Flutter跟安卓的Activity、iOS的ViewController一樣擁有自己的生命周期, Flutter中一切都是Widget,渲染方式有點像H5的DOM樹。

Flutter生命周期可以分為3個階段:

1、實例化組件并添加到樹, 即Navigator.push;

2、狀態(tài)變化,即打開新的widget或者依賴的上級widget發(fā)生變化;

3、從樹中移除, 即Navigator.pop。

在Flutter中Widget都是不可變的, 但實際上需要根據(jù)對應的狀態(tài)刷新Widget。 從而產(chǎn)生了StatelessWidget和StatefulWdiget, StatefulWidget是由2個對象Widget和State組成的。

為什么將State和Widget分開呢?

答案是性能, State管理狀態(tài)(可以理解為Controller),Widget是UI(即View)。 根據(jù)狀態(tài)變化每次生成Widget(即View)可以節(jié)省內(nèi)存,即不必每次創(chuàng)建狀態(tài)對象State。

構造函數(shù):

同其它高級語言, 只執(zhí)行一次;

initState:

插入到渲染樹時調(diào)用,只執(zhí)行一次。(類似Android Fragment的onCreateView函數(shù))

didChangeDependencies:

1、在初始化initState后執(zhí)行; 2、顯示/關閉其它widget。 3、可執(zhí)行多次;

didUpdateWidget:

上級節(jié)點rebuild widget時, 即上級組件狀態(tài)發(fā)生變化時會觸發(fā)子widget執(zhí)行didUpdateWidget;

deative:

有點像Android的onStop函數(shù), 在打開新的Widget或回到這個widget時會執(zhí)行; 可執(zhí)行多次;

dispose:

類似于Android的onDestroy, 在執(zhí)行Navigator.pop后會調(diào)用該辦法, 表示組件已銷毀;

reassemble:

點擊閃電會執(zhí)行,只用于調(diào)試時的hot reload。 release版本不會執(zhí)行該函數(shù)。

常見業(yè)務場景:

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

B構造函數(shù)---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的時序一樣, 都是先處理即將顯示的界面。

activity生命周期和Flutter對應關系:

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

1、 resumed 界面可見, 同安卓的onResume。

2、inactive界面退到后臺或彈出對話框情況下, 即失去了焦點但仍可以執(zhí)行drawframe回調(diào);同安卓的onPause;

3、paused應用掛起,比如退到后臺,失去了焦點且不會收到drawframe回調(diào);同安卓的onStop;

4、suspending, iOS中沒用,安卓里就是掛起,不會再執(zhí)行drawframe回調(diào);

下面是生命周期:

1、初次打開widget時,不執(zhí)行AppLifecycleState的回調(diào);

2、按home鍵或Power鍵, AppLifecycleState inactive----AppLifecycleState pause

3、從后臺到前臺:AppLifecycleState inactive---ApplifecycleState resumed

4、back鍵退出應用: AppLifecycleState inactive---AppLifecycleState paused

flutter 項目在華為手機上被風險管控

華為手機會檢測到部分應用存在的風險,并加入風險管控,如果需要將應用從風險中心移除,可在應用設置里將應用設置為信任軟件并移除風險管控。

不要使用Android studio4.1以上的版本打包,使用studio 3.5版本打包

Flutter進行本地緩存

get方法獲取數(shù)據(jù),封裝存儲和移除方法用于操作數(shù)據(jù)緩存列表(需要優(yōu)化,僅參考)

flutter webwiew銷毀時間

在Widget銷毀之前將WebView的監(jiān)聽和view銷毀掉。

flutter生命周期大體上可以分為三個階段:初始化、狀態(tài)變化、銷毀。

1、初始化階段

對應執(zhí)行構造方法和initState時候2、狀態(tài)變化階段

開新的widget或者調(diào)用setState方法的時候

3、銷毀階段

deactivate和dispose

二、生命周期階段執(zhí)行的函數(shù)

1、initState調(diào)用次數(shù):1次

插入渲染樹時調(diào)用,只調(diào)用一次,widget創(chuàng)建執(zhí)行的第一個方法,這里可以做一些初始化工作,比如初始化State的變量。2、didChangeDependencies調(diào)用次數(shù):多次

初始化時,在initState()之后立刻調(diào)用

當依賴的InheritedWidgetrebuild,會觸發(fā)此接口被調(diào)用。實測在組件可見狀態(tài)變化的時候會調(diào)用

3、build調(diào)用次數(shù):多次初始化之后開始繪制界面。setState觸發(fā)的時候會

4、didUpdateWidget調(diào)用次數(shù):多次組件狀態(tài)改變時候調(diào)用。

5、deactivate當State對象從樹中被移除時,會調(diào)用此回調(diào),會在dispose之前調(diào)用。頁面銷毀的時候會依次執(zhí)行:deactivatedispose

6、dispose調(diào)用次數(shù):1次當State對象從樹中被永久移除時調(diào)用;通常在此回調(diào)中釋放資源。

7、reassemble在熱重載(hotreload)時會被調(diào)用,此回調(diào)在Release模式下永遠不會被調(diào)用。

當前文章:移除flutter,移除粉絲
新聞來源:http://chinadenli.net/article6/dsdssog.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站虛擬主機網(wǎng)站設計面包屑導航外貿(mào)建站Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務器托管