1、FocusNode
FocusNode可以實(shí)現(xiàn)對(duì)輸入框的獲取或者失去焦點(diǎn)的監(jiān)聽(tīng)雷滋。
FocusNode focusNode = new FocusNode();
focusNode.addListener(() {
setState(() {
keyboardAppeared = focusNode.hasFocus;
});
});
2不撑、一些控件的總結(jié)
Offstage: 控制child顯示還是隱藏,offstage為true時(shí)隱藏
Chip: 用作顯示標(biāo)簽晤斩,自帶刪除按鈕焕檬。左側(cè)可以設(shè)置小圖標(biāo),label顯示文本
ClipPath: 切割控件成不同的形狀澳泵,clipper屬性里面設(shè)置切割的path实愚。
Material: 可設(shè)置陰影、圓角
ClipRRect: 高效切圓角
ClipOval: 橢圓
CircleAvatar: 設(shè)置圓形頭像
futureBuilder: 根據(jù)網(wǎng)絡(luò)請(qǐng)求的不同狀態(tài)顯示不同的視圖兔辅,將請(qǐng)求數(shù)據(jù)的方法賦值給全局變量腊敲,可以防止futureBuilder不必要的重繪問(wèn)題
IgnorePointer:控制控件是否接收觸摸事件
3、extends维苔、mixin碰辅、implements之間的區(qū)別
- 繼承(關(guān)鍵字 extends)、混入 mixins (關(guān)鍵字 with)介时、接口實(shí)現(xiàn)(關(guān)鍵字 implements)没宾。這三者可以同時(shí)存在凌彬,前后順序是extends -> mixins -> implements。
- extends 繼承在flutter中是單繼承循衰,構(gòu)造函數(shù)不能繼承铲敛,子類重寫(xiě)超類的方法,要用@override羹蚣,子類調(diào)用超類的方法原探,要用super。
- implements 接口實(shí)現(xiàn)顽素,也是Class咽弦,如果有一個(gè)類 A,你想讓類B擁有A的API,但又不想擁有A里的實(shí)現(xiàn)胁出,那么你就應(yīng)該把A當(dāng)做接口型型,類B implements 類A.
當(dāng)class被當(dāng)做interface用時(shí),class中的方法就是接口的方法全蝶,需要在子類里重新實(shí)現(xiàn)闹蒜,在子類實(shí)現(xiàn)的時(shí)候要加@override
當(dāng)class被當(dāng)做interface用時(shí),class中的成員變量也需要在子類里重新實(shí)現(xiàn)抑淫。在成員變量前加@override - mixin 混入绷落,是一種在多個(gè)類層次結(jié)構(gòu)中復(fù)用類代碼的方法。在dart21.版本中始苇,mixins類只能繼承自object砌烁,mixins類不能有構(gòu)造函數(shù),一個(gè)類可以mixins多個(gè)mixins類催式。
4函喉、State對(duì)象的初始化流程
initState() : 一旦State對(duì)象被創(chuàng)建,initState方法是第一個(gè)(構(gòu)造函數(shù)之后)被調(diào)用的方法荣月」芎牵可通過(guò)重寫(xiě)來(lái)執(zhí)行額外的初始化,如初始化動(dòng)畫(huà)哺窄、控制器等捐下。重寫(xiě)該方法時(shí),應(yīng)該首先調(diào)用super.initState()萌业。在initState中坷襟,無(wú)法真正使用context,因?yàn)榭蚣苓€沒(méi)有完全將其與state關(guān)聯(lián)咽白。initState在該State對(duì)象的生命周期內(nèi)將不會(huì)再次調(diào)用啤握。
didChangeDependencies(): 這是第二個(gè)被調(diào)用的方法。在這一階段晶框,context已經(jīng)可用排抬。如果你的Widget鏈接到了一個(gè)InheritedWidget并且/或者你需要初始化一些listeners(基于context)懂从,通常會(huì)重寫(xiě)該方法。請(qǐng)注意蹲蒲,如果Widget鏈接到InheritedWidget番甩,則每次重建Widget時(shí)都會(huì)調(diào)用此方法。如果重寫(xiě)此方法届搁,則應(yīng)首先調(diào)用super.didChangeDependencies()缘薛。
build(BuildContext context): 此方法在didChangeDependencies()、didUpdateWidget()之后被調(diào)用卡睦。每次State對(duì)象更新(或當(dāng)InheritedWidget有新的通知時(shí))都會(huì)調(diào)用該方法宴胧!我們一般都在build中來(lái)編寫(xiě)真正的功能代碼。為了強(qiáng)制重建表锻,可以在需要的時(shí)候調(diào)用setState((){...})方法恕齐。
dispose(): 此方法在Widget被廢棄時(shí)調(diào)用∷惭罚可重寫(xiě)該方法來(lái)執(zhí)行一些清理操作(如解除listeners)显歧,并在此之后立即調(diào)用super.dispose()。