Flutter生命周期

? ? ? ? ? ? ? ? ? ? ? ? ? ?Flutter生命周期? :

和其他框架中視圖比如Android的Activity一樣南蓬,flutter中的視圖Widget也存在生命周期汗唱,生命周期的回調(diào)函數(shù)體現(xiàn)在了State上面献起,理解flutter的生命周期顾稀,對(duì)我們寫一個(gè)合理的控件至關(guān)重要歧胁。組件State生命周期整理如下:

?initState,? ?didChangeDependencies,? ?bulid,? ?reassemble,? ?didUpdateWidget,? ?deactivate,? ?dispose舟肉,

其實(shí)總結(jié)下來大致可以分為三個(gè)階段,初始化(插入渲染樹)曙求,狀態(tài)改變(在渲染樹中存在)碍庵,銷毀(從渲染樹中移除)

生命周期

initstate:

其實(shí)這個(gè)函數(shù)不屬于生命周期,因?yàn)檫@個(gè)時(shí)候state的widget屬性還是空的悟狱,如果在構(gòu)造函數(shù)中訪問widget屬性是行不通的,但是構(gòu)造函數(shù)必然是第一個(gè)要調(diào)用的堰氓。當(dāng)插入渲染樹的時(shí)候調(diào)用挤渐,這個(gè)函數(shù)在生命周期中值調(diào)用一次,這里可以做一些初始化工作双絮,比如初始化state的變量浴麻。

didChangeDependencies:

這個(gè)函數(shù)會(huì)緊跟在initState之后調(diào)用,并且可以調(diào)用BuildContext.inherFromWidgetOfExactType,那么BuildContext.inheritFromWidgetOfExactType的使用場(chǎng)景是什么呢囤攀?最經(jīng)典的應(yīng)用場(chǎng)景是软免?

跨組件拿到數(shù)據(jù)

didUpdateWidget

當(dāng)組件狀態(tài)改變的時(shí)候回調(diào)用didUpdateWidget,比如調(diào)用了setState,實(shí)現(xiàn)上這里flutter框架回創(chuàng)建一個(gè)新的Widget,綁定State焚挠,并在這個(gè)函數(shù)中傳遞老的Widget膏萧,這個(gè)函數(shù)一般用于比較新、老Widget,看看那些屬性改變了蝌衔,并對(duì)State做出一些調(diào)整榛泛。需要注意的是,涉及controller的變更噩斟,需要在這個(gè)函數(shù)中移除老的controller的監(jiān)聽曹锨,并才創(chuàng)建新的controller監(jiān)聽。比如tabbar:

deactivate

在dispose之前剃允,會(huì)調(diào)用這個(gè)函數(shù)沛简。

dispose

一旦到這個(gè)階段,組件就要被銷毀了斥废,這個(gè)函數(shù)一般是移除監(jiān)聽椒楣,清理環(huán)境。??

概念認(rèn)識(shí)

1营袜,State

1撒顿,widget build時(shí)被讀取

2,在widget生命周期中被改變荚板,當(dāng)state被改變時(shí)凤壁,可以手動(dòng)調(diào)用setstate方法通知flutter狀態(tài)發(fā)生改變吩屹,fromework在收到消息后,會(huì)重新調(diào)用build方法重新構(gòu)建widget樹拧抖,從而達(dá)到更新UI的目的煤搜。

兩個(gè)常用屬性:

1,widget state只會(huì)在第一次插入到樹種時(shí)被創(chuàng)建唧席。,

2擦盾,Context它是buildcontext 一個(gè)實(shí)例,每個(gè)widget都有自己的context對(duì)象淌哟。

2迹卢,Text

maxLines、overflow:指定文本顯示的最大行數(shù)徒仓,默認(rèn)情況下腐碱,文本是自動(dòng)折行的,如果指定此參數(shù)掉弛,則文本最多不會(huì)超過指定的行症见。如果有多余的文本,可以通過overflow來指定截?cái)喾绞窖甓觯J(rèn)是直接截?cái)嗄弊鳎纠兄付ǖ慕財(cái)喾绞絋extOverflow.ellipsis,它會(huì)將多余文本截?cái)嗪笠允÷苑?..”表示乎芳;TextOverflow的其它截?cái)喾绞秸?qǐng)參考SDK文檔遵蚜。

textScaleFactor:代表文本相對(duì)于當(dāng)前字體大小的縮放因子,相對(duì)于去設(shè)置文本的樣式style屬性的fontSize秒咐,它是調(diào)整字體大小的一個(gè)快捷方式谬晕。該屬性的默認(rèn)值可以通過MediaQueryData.textScaleFactor獲得,如果沒有MediaQuery携取,那么會(huì)默認(rèn)值將為1.0攒钳。

TextSpan : Text其實(shí)就是RichText的一個(gè)包裝,而RichText是可以顯示多種樣式(富文本)的widget雷滋。_tapRecognizer不撑,它是點(diǎn)擊鏈接后的一個(gè)處理器(代碼已省略),關(guān)于手勢(shì)識(shí)別的更多內(nèi)容我們將在后面單獨(dú)介紹晤斩。

3,Button

通過定義的屬性自定義按鈕
注意material design中配有很多陰影

4,圖片和Icon

ImageProvider?是一個(gè)抽象類焕檬,主要定義了圖片數(shù)據(jù)獲取的接口load(),從不同的數(shù)據(jù)源獲取圖片需要實(shí)現(xiàn)不同的ImageProvider?澳泵,如AssetImage是實(shí)現(xiàn)了從Asset中加載圖片的ImageProvider实愚,而NetworkImage實(shí)現(xiàn)了從網(wǎng)絡(luò)加載圖片ImageProvider

注意Fit選項(xiàng)
Material Design所有圖標(biāo)可以在其官網(wǎng)查看:https://material.io/tools/icons/??
字體圖標(biāo)

5,單選框和復(fù)選框

無法自定義腊敲,其他沒有什么

6击喂,輸入框和表單

其他屬性
textfield獲取輸入內(nèi)容
表單驗(yàn)證

7,線性布局Row碰辅、Colum

注意一下排列順序

8懂昂,彈性布局Flex

Flex是row和column的父類
spacer的功能是制定比例的空間
實(shí)際上它是一個(gè)expanded一個(gè)包裝

9,流式布局 wrap ,Flow

wrap流式布局
很少使用没宾,一般注意Wrap是否可以

10凌彬,層疊布局 Stack Postioned? 就像安卓中的Framelayout 允許堆疊

注意positioned屬性報(bào)錯(cuò)

11,Padding

注意edgeinset屬性

12循衰,布局限制類容器ConstrainedBox和SizedBox


注意限制條件
取較大值

13铲敛,DecoratedBox

繪制一個(gè)裝飾的decoration

14,Transform變換

Marix變換
rotate變換會(huì)影響子widget的位置和大小

15,container

組合大雜燴

16会钝,Scaffold 原探,tabBar,底部導(dǎo)航

注意Physice

17,SingleChildScrollview

注意primary

18顽素,Listview

listview 無限加載

19,Gridview

注意gridDelegate
Pub上有一個(gè)包“flutter_staggered_grid_view” 徒蟆,它實(shí)現(xiàn)了一個(gè)交錯(cuò)GridView的布局模型胁出,可以很輕松的實(shí)現(xiàn)這種布局,詳情讀者可以自行了解段审。

20,滾動(dòng)監(jiān)聽以及控制ScrollController

滾動(dòng)監(jiān)聽
位置恢復(fù)
滾動(dòng)監(jiān)聽發(fā)送通知

21全蝶,導(dǎo)航返回WillPopScope

導(dǎo)航

22,數(shù)據(jù)共享

注意和nitification相反

23寺枉,主題

熟悉themedata數(shù)據(jù)
局部主題可以替換全局主題

23抑淫,Pointer事件處理

flutter中使用listener監(jiān)聽原始觸摸事件
枚舉類
absorb和ignore不同點(diǎn)

24,手勢(shì)識(shí)別

點(diǎn)擊姥闪,雙擊始苇,長(zhǎng)按
同時(shí)監(jiān)聽ontap和ondoubletap會(huì)有延時(shí),只有ontap沒有延時(shí)

25筐喳,事件總線

事件總線
全局事件總線使用

26催式,Notification

Notification 會(huì)沿著當(dāng)前節(jié)點(diǎn)向上傳遞,多有父節(jié)點(diǎn)都可以通過NotificationListener來監(jiān)聽通知避归。這種由子向父的傳遞為通知冒泡荣月。

dispatch

27,通過組合現(xiàn)有Widget實(shí)現(xiàn)自定義

require標(biāo)注

28梳毙,CustomPaint與Canvas

custompaint屬性
注意
兩個(gè)參數(shù)
配置畫筆屬性
自繪性能

29哺窄,Http請(qǐng)求

五步請(qǐng)求
注意生效的區(qū)域
安全問題
認(rèn)證
代理
證書驗(yàn)證

30,網(wǎng)絡(luò)操作 Dio http庫

dio是一個(gè)強(qiáng)大的Dart Http請(qǐng)求庫,支持Restful API萌业、FormData坷襟、攔截器、請(qǐng)求取消咽白、Cookie管理啤握、文件上傳/下載、超時(shí)等晶框。

dio
dio內(nèi)部
分塊下載

31排抬,WebScoket

websockert


webxocket


Flutter中有socket

32,Json Model

轉(zhuǎn)化model

33授段,Package

dart插件

34蹲蒲,Dart線程模型以及異常捕獲

report錯(cuò)誤
最終異常上報(bào)機(jī)制

35,調(diào)試Flutter應(yīng)用

debugger聲明
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末侵贵,一起剝皮案震驚了整個(gè)濱河市届搁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌窍育,老刑警劉巖卡睦,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異漱抓,居然都是意外死亡表锻,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門乞娄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瞬逊,“玉大人,你說我怎么就攤上這事仪或∪纺鳎” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵范删,是天一觀的道長(zhǎng)蕾域。 經(jīng)常有香客問我,道長(zhǎng)瓶逃,這世上最難降的妖魔是什么束铭? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮厢绝,結(jié)果婚禮上契沫,老公的妹妹穿的比我還像新娘。我一直安慰自己昔汉,他們只是感情好懈万,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布拴清。 她就那樣靜靜地躺著,像睡著了一般会通。 火紅的嫁衣襯著肌膚如雪口予。 梳的紋絲不亂的頭發(fā)上疲牵,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天啄糙,我揣著相機(jī)與錄音矾克,去河邊找鬼竣况。 笑死,一個(gè)胖子當(dāng)著我的面吹牛涮较,可吹牛的內(nèi)容都是我干的吹缔。 我是一名探鬼主播煤蚌,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼端三,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼舷礼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起郊闯,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤妻献,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后团赁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體育拨,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年欢摄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了至朗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡剧浸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出矗钟,到底是詐尸還是另有隱情唆香,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布吨艇,位于F島的核電站躬它,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏东涡。R本人自食惡果不足惜冯吓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望疮跑。 院中可真熱鬧组贺,春花似錦、人聲如沸祖娘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至掀潮,卻和暖如春菇夸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背仪吧。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工庄新, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人薯鼠。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓择诈,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親人断。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吭从,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 常見操作:http://www.runoob.com/go/go-map.html 創(chuàng)建Map 賦值 遍歷Map ...
    tonyemail_st閱讀 366評(píng)論 0 0
  • 麥片和酸奶組合有那么難么,新西蘭做到了恶迈,跟咖啡伴侶一個(gè)道理涩金,想得到就做得到∠局伲可能中國(guó)人這方面需求不迫切步做,也可能新西...
    欣爺論產(chǎn)品閱讀 349評(píng)論 0 0
  • 恨己今生不得屑, 未嘗共進(jìn)一燭傾奈附。 春風(fēng)只潤(rùn)塵間物全度, 秋月不照天際流。 彼時(shí)長(zhǎng)卷難孝義斥滤, 懶于虛幻惰于習(xí)将鸵。 我縱殞...
    劉斬之閱讀 383評(píng)論 0 0