發表日期:2018-09 文章編輯:小燈 瀏覽次數:2167
擼完hello world 頓時世界都清凈了,瞬時感覺已經精通flutter的安裝了。
言歸正傳,在整個flutter框架里萬事萬物都是widget,那就從StatefulWidget 和?StatelessWidget入手,兩者之間到底有什么差異,以及在什么場景下如何使用。
在flutter中所有控件都是以樹狀結構進行渲染,在main方法中會初始化頂端節點并裝載,該節點會成為我們app的根結點,后續的節點將被嵌套或者直接掛載到該節點下,Widget初始化的時候會調用Widget.createElement 方法生成Element,緊接著框架會調用mount方法將element插入到父級節點下,mount方法主要是負責填充子節點或者子樹同時還會調用attachRenderObject方法來渲染需要進行渲染的renderObject。渲染成功后父節點會根據state的狀態決定是否修改子節點或者子樹,如果需要修改則會調用update方法,當然如果子樹中有控件調用了deactivateChild 父節點將會移除該子樹或節點,這時會出發系統的deactive方法,當新的控件被修改后同樣會出發系統的activate方法,如果控件的轉臺為inactive則會調用unmount方法
控件渲染的過程中同步讀取State的數據,在控件的整個生命周期中可能會被多次改變,如果想要State的數據變化能夠被控件知曉需要調用State.setState方法
StatefullWidget使用場景:UI需要動態改變或者要依賴內部的時鐘狀態或者要依賴其他的系統狀態才能完成控件的渲染
StatelessWidget適用于只需要依賴控件的配置信息就能完成控件的渲染
StatelessWidget->build()方法是在widget被插入到控件樹或者依賴的其他控件發生變化的時候才會被調用。
StatefullWidget沒有build方法,在框架設計的時候build方法被放到了State中,有多種情況可以出發build方法:
?1.initState 方法被調用后會觸發?
2.didUpdateWidget被執行后會觸發?
3.依賴的子樹的State發生改變同樣會觸發
?4.deactivate方法被調用后重新將控件插入到控件樹的其他位置也會被觸發
日期:2018-10 瀏覽次數:7251
日期:2018-12 瀏覽次數:4325
日期:2018-07 瀏覽次數:4872
日期:2018-12 瀏覽次數:4172
日期:2018-09 瀏覽次數:5499
日期:2018-12 瀏覽次數:9919
日期:2018-11 瀏覽次數:4802
日期:2018-07 瀏覽次數:4576
日期:2018-05 瀏覽次數:4856
日期:2018-12 瀏覽次數:4324
日期:2018-10 瀏覽次數:5136
日期:2018-12 瀏覽次數:6210
日期:2018-11 瀏覽次數:4460
日期:2018-08 瀏覽次數:4590
日期:2018-11 瀏覽次數:12629
日期:2018-09 瀏覽次數:5578
日期:2018-12 瀏覽次數:4829
日期:2018-10 瀏覽次數:4185
日期:2018-11 瀏覽次數:4526
日期:2018-12 瀏覽次數:6061
日期:2018-06 瀏覽次數:4006
日期:2018-08 瀏覽次數:5434
日期:2018-10 瀏覽次數:4456
日期:2018-12 瀏覽次數:4522
日期:2018-07 瀏覽次數:4360
日期:2018-12 瀏覽次數:4499
日期:2018-06 瀏覽次數:4381
日期:2018-11 瀏覽次數:4373
日期:2018-12 瀏覽次數:4248
日期:2018-12 瀏覽次數:5279
Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.