深入了解Flutter介面開發

2021-08-21 04:08:02 字數 2207 閱讀 9833

介面開發語言使用dart,底層渲染引擎使用c, c++

組合大於繼承,控制項本身通常由許多小型、單用途的控制項組成,結合起來產生強大的效果,類的層次結構是扁平的,以最大化可能的組合數量

element:存放上下文,通過element遍歷檢視樹,element同時持有widget和renderobject

renderobject:根據widget的布局屬性進行layout,paint widget傳人的內容

widget.build() == null, deactive element.child,刪除子樹,流程結束

element.child.widget == null, mount 的新子樹,流程結束

element.child.widget == widget.build() 無需重建,否則進入流程5

widget.canupdate(element.child.widget, newwidget) == true,更新child的slot,element.child.update(newwidget)(如果child還有子節點,則遞迴上面的流程進行子樹更新),流程結束,否則轉6

widget.canupdate(element.child.widget, newwidget) != true(widget的classtype 或者 key 不相等),deactivew element.child,mount 新子樹

子樹的深度變化,會引起子樹重建,如果子樹是乙個複雜度很高的樹,可以使用globalkey做為子樹widget的key。globalkey具有快取功能

區域性子樹更新, 將該子樹做statefullwidget的乙個子widget,並建立對應的state類例項,通過呼叫state.setstate() 觸發該子樹的重新整理

statefullwidget:存在中間狀態變化,那麼問題來了,widget不是都immutable的,狀態變化儲存在**?flutter 引入state的類用於存放中間態,通過呼叫state.setstate()進行此節點及以下的整個子樹更新

didupdatewidget(newwidget):祖先節點rebuild widget時呼叫

deactivate():widget被remove的時候呼叫,乙個widget從tree中remove掉,可以在dispose介面被呼叫前,重新instert到乙個新tree中

didchangedependencies():

build():

dispose():widget徹底銷毀時呼叫

reassemble(): hot reload呼叫

當listview中的item滾動出可顯示區域的時候,item會被從樹中remove掉,此item子樹中所有的state都會被dispose,state記錄的資料都會銷毀,item滾動回可顯示區域時,會重新建立全新的state、element、renderobject

class frogcolor extends inheritedwidget ) : assert(color != null),

assert(child != null),

super(key: key, child: child);

final color color;

static frogcolor of(buildcontext context)

@override

bool updateshouldnotify(frogcolor old) => color != old.color;

}

父節點使用notificationlistener 進行監聽捕獲通知

子節點有資料變更呼叫下面介面進行資料上報

notification(data).dispatch(context)

offset存放在每個child renderobject的boxparentdata中

當parent擁有mutil children時,boxparentdata還用來存children兄弟節點之間的遍歷順序

sizedbyparent == true

constraints.istight

子renderobject會對目標layer返回對應的offsetlayer, 目標compositing layer再根據offset合成乙個渲染的紋理buffer

>>>>閱讀全文

深入了解介面

介面是元件之間的協議,描述了元件對外提供的服務。從技術上講介面是一組包含了函式型方法的資料結構。通俗理解 就是飛機會飛,鳥會飛,他們都繼承了同乙個介面 飛 但是f22 屬於飛機抽象類,鴿子屬於鳥抽象類。介面就是為了約束方法的格式 引數和返回值型別 而存在 乙個介面最好只能做一件事 因為子類只有乙個直...

深入了解A

一 前言 在這裡我將對a 演算法的實際應用進行一定的 並且舉乙個有關a 演算法在最短路徑搜尋的例子。值得注意的是這裡並不對a 的基本的概念作介紹,如果你還對a 演算法不清楚的話,請看姊妹篇 初識a 演算法 這裡所舉的例子是參考amit主頁中的乙個源程式,使用這個源程式時,應該遵守一定的公約。二 a ...

深入了解A

一 前言 在這裡我將對a 演算法的實際應用進行一定的 並且舉乙個有關a 演算法在最短路徑搜尋的例子。值得注意的是這裡並不對a 的基本的概念作介紹,如果你還對a 演算法不清楚的話,請看姊妹篇 初識a 演算法 這裡所舉的例子是參考amit主頁中的乙個源程式,使用這個源程式時,應該遵守一定的公約。二 a ...