Flutter采用聲明式UI布局方式
- 為什么是聲明式UI
從win32到web再到Android和iOS的框架通常使用命名式UI編輯風(fēng)格,手動(dòng)構(gòu)建UI實(shí)體演侯,在需要變更時(shí)通過(guò)實(shí)體方法對(duì)其進(jìn)行改變遥赚。為減輕開發(fā)人員在各種UI狀態(tài)直接變更的編程負(fù)擔(dān)伺通,flutter讓開發(fā)人員描述當(dāng)前的UI狀態(tài)狂秦,并且不需要關(guān)心它是如何過(guò)渡到框架的关带。
- 如何在聲明性框架中更改布局
在聲明式UI细溅,視圖配置(如Flutter中的widget)是不可變的褥傍,并且只是輕量級(jí)的'藍(lán)圖',類似于iOS的UIView,Widget會(huì)在自身上觸發(fā)重建(類似iOS中的drawreact)喇聊,最常見的是通過(guò)Flutter中StatefulWidgets上調(diào)用setState(),并構(gòu)建一個(gè)新的Widget樹
return View {
color: red,
child: ViewChild(...)
}
在這里恍风,F(xiàn)lutter構(gòu)建新的Widget實(shí)例,而不是改變舊實(shí)例誓篱。該框架使用RenderObjects管理傳統(tǒng)對(duì)象的許多職責(zé)(例如維護(hù)布局狀態(tài))朋贬。RenderObjects在幀之間保持不變,F(xiàn)lutter的輕量級(jí)Widget告訴框架在狀態(tài)之間改變RenderObjects窜骄,接下來(lái)Flutter框架會(huì)處理其他部分锦募。