介面開發語言使用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 ...