Get遇到的坑
StatefulWidget沒(méi)有刷新問(wèn)題
- 時(shí)間:2021年05月26日09:43:31
最近寫了一個(gè)LoadingView用于頁(yè)面的網(wǎng)絡(luò)加載扰付,使用的是StatefulWidget。由于項(xiàng)目是使用的Get對(duì)狀態(tài)進(jìn)行控制的睹欲,所以在GetBuild中對(duì)Loading進(jìn)行刷新蠢护。但在使用中發(fā)現(xiàn)rebuild LoadingView沒(méi)有刷新?tīng)顟B(tài)担扑,看參數(shù)是在Widget中更新了的旬陡。
后續(xù)定位發(fā)現(xiàn)凫佛,StatefulWidget在rebuild的時(shí)候,并不會(huì)重新執(zhí)行initState方法借跪,而只會(huì)執(zhí)行build方法政己,這也符合state和widget的一對(duì)多原則。知道問(wèn)題所在垦梆,修改也非常簡(jiǎn)單匹颤。去掉state中的status變量,使用widget中的initStatus值即可托猩。
在此記錄印蓖,對(duì)于Get的一些注意點(diǎn)。
繼承基類BaseWidget無(wú)法update()的問(wèn)題
- 時(shí)間:2021年07月06日11:06:12
目前項(xiàng)目中對(duì)Widget進(jìn)行了內(nèi)嵌LoadingView的BaseWidget封裝京腥,對(duì)GetxController進(jìn)行了LoadingStatus狀態(tài)操作的BaseController封裝赦肃。發(fā)現(xiàn)在第二個(gè)繼承了BaseWidget的頁(yè)面中,對(duì)綁定的Controller進(jìn)行update操作無(wú)效公浪。
閱讀源碼后發(fā)現(xiàn)他宛,GetBuilder的global參數(shù)默認(rèn)是true,在沒(méi)有指定tag的情況下欠气,會(huì)根據(jù)controller作為key進(jìn)行全局map厅各,若第二次調(diào)用時(shí),會(huì)先通過(guò)Controller進(jìn)行g(shù)et预柒,正好我們的BaseWidget使用的是BaseController導(dǎo)致全局只有一個(gè)Controller從而導(dǎo)致第二個(gè)頁(yè)面無(wú)法刷新問(wèn)題队塘。我們只需要在基類中將global改為false,直接使用init的controller即可宜鸯。
主題色切換導(dǎo)致Appbar的標(biāo)題和Action的Icon顏色變化問(wèn)題
- 時(shí)間:2021年06月15日19:25:43
目前在做App的主題色切換功能憔古,發(fā)現(xiàn)在部分主題色下,Appbar的標(biāo)題和Action自動(dòng)變成深色淋袖,查閱資料后得知鸿市,由于色值的computeLuminance值過(guò)大導(dǎo)致Brightness自動(dòng)為Brightness.light。
知道原因后就好辦了即碗,通過(guò)設(shè)置ThemeData里面的Brightness類型的參數(shù)為Brightness.dark(注意我們只需要Appbar為深色焰情,brightness參數(shù)控制的是整個(gè)頁(yè)面,不修改)剥懒。經(jīng)驗(yàn)證烙样,primaryColorBrightness控制Appbar的標(biāo)題和action,修改即可蕊肥。