為您解碼網(wǎng)站建設(shè)的點點滴滴
發(fā)表日期:2018-09 文章編輯:小燈 瀏覽次數(shù):1995
flutter 和Android 有所不一樣,android包含 布局(各種layout),組件(button,textview 等等);flutter的一切都是widget,包括最頂層的頁面布局都是一個widget,包含許多其他的widget,一個頁面則有多個widget組合而成.
widget 根據(jù)不同的功能可以分為:
...
事實上可以理解成,一個flutter的頁面是有一棵樹型的widget組成,包括根節(jié)點,和樹枝,樹葉都是 一個widget, widget嵌套其他的widget而已.對于一些Android中的屬性值,例如 對齊方式,居中,padding,在flutter中都是一個widget.
通常我們app中會使用到兩種 widget, statelessWidget 和statefulWidget 表示無狀態(tài)widget和有狀態(tài)widget.
StatefulWidget,如果在構(gòu)造器鐘使用了GlobalKey 表示key的時候,在進行移動到另一顆樹的時候,會保持狀態(tài)對象不會改變.因為擁有GlobalKey的widget在整個樹形結(jié)構(gòu)中只會放在一個位置,使用GlobalKey的widget則會關(guān)聯(lián)這個元素.
State.initState
準(zhǔn)備使用的時候調(diào)用State.dispose
,但是它不依賴與InheritedWidget
也不需要調(diào)用State.setState
.這些widget廣泛使用在app或者一個頁面的root,通過ChangeNotifier
,Stream
或者其他對象和他的子widget通訊.有狀態(tài)的widget遵循這樣的模式相對來說比較低耗(根據(jù)cpu和gpu的周期講)因為他們只需要編譯一次后面就不需要更新.因此他們可以做一些復(fù)雜深層的構(gòu)建方法.State.setState
或者依賴InheritedWidget
的widget.這些widget典型的會在app的生命周期中重新構(gòu)建多次,因此對widget重新構(gòu)建最小化影響顯得尤為重要.(也可以使用State.initState
或者State.didChangeDependencies
分配資源,但是最重要的還是重新構(gòu)建渲染)有一些可以減少statefulwidget重新構(gòu)建的技術(shù)手段:
const
widget.(作用和使用緩存widget并且重用它的一樣)IgnorePointer
來包裝widget,并且控制IgnorePointer.ignoring
.這是因為,改變子樹的深度需要進行widget的重構(gòu),重新布局,并且重繪子樹的實體,而改變屬性只需要盡小可能的改變樹的渲染(例如IgnorePointer
,不需要重新布局,和重繪子樹的實體)GlobalKey
statelesswidget是一個小部件,具體地說是用于描述用戶界面的一部分構(gòu)建描述用戶界面的其他小部件的宿主。 構(gòu)建過程以遞歸方式繼續(xù),直到用戶界面的描述是完全具體的(例如,包含完全是RenderObjectWidget
,它描述了具體的RenderObject
)
當(dāng)您是用戶界面的一部分時,statelesswidget非常有用描述不依賴于配置以外的任何其他內(nèi)容對象本身的信息和widget inflate的BuildContext
。 對于可以動態(tài)改變的組合物,例如 由于具有內(nèi)部時鐘驅(qū)動狀態(tài),或取決于某些系統(tǒng)狀態(tài),考慮使用StatefulWidget
statelesswidget 的build
方法通常僅在三個中調(diào)用情況:第一次將widget插入樹中,當(dāng)時widget的父級更改其配置,當(dāng)[InheritedWidget]依賴于更改時。
如果widget的父級將定期更改widget的配置,或者如果它取決于經(jīng)常改變的繼承widget,這樣優(yōu)化[build]方法的性能以維持流暢渲染性能就變得很重要。
Align
或CustomSingleChildLayout
而不是精心安排 Row
,Column
,Padding
和SizedBox
來以特別花哨的方式定義child。 考慮一個CustomPaint
小部件而不是復(fù)雜的多層次 Container
和Decoration
用于繪制正確的圖形效果。const
widget.StatefulWidget
中描述的一些技術(shù),例如緩存子樹的公共部分并在更改時使用GlobalKey
樹的結(jié)構(gòu)。class GreenFrog extends StatelessWidget {const GreenFrog({ Key key }) : super(key: key);@override Widget build(BuildContext context) { return new Container(color: const Color(0xFF2DBD3A)); } }
class Frog extends StatelessWidget { const Frog({Key key,this.color: const Color(0xFF2DBD3A),this.child,}) : super(key: key); final Color color; final Widget child;@override Widget build(BuildContext context) { return new Container(color: color, child: child);} }
按照慣例,widget構(gòu)造函數(shù)僅使用命名參數(shù)。 命名參數(shù)可以使用@required
標(biāo)記為必需。 按照慣例,第一個參數(shù)是key
,最后一個參數(shù)是child
,children
或者相似的。
日期:2018-10 瀏覽次數(shù):7341
日期:2018-12 瀏覽次數(shù):4410
日期:2018-07 瀏覽次數(shù):4945
日期:2018-12 瀏覽次數(shù):4245
日期:2018-09 瀏覽次數(shù):5582
日期:2018-12 瀏覽次數(shù):9998
日期:2018-11 瀏覽次數(shù):4881
日期:2018-07 瀏覽次數(shù):4650
日期:2018-05 瀏覽次數(shù):4933
日期:2018-12 瀏覽次數(shù):4389
日期:2018-10 瀏覽次數(shù):5213
日期:2018-12 瀏覽次數(shù):6284
日期:2018-11 瀏覽次數(shù):4542
日期:2018-08 瀏覽次數(shù):4664
日期:2018-11 瀏覽次數(shù):12722
日期:2018-09 瀏覽次數(shù):5647
日期:2018-12 瀏覽次數(shù):4914
日期:2018-10 瀏覽次數(shù):4255
日期:2018-11 瀏覽次數(shù):4599
日期:2018-12 瀏覽次數(shù):6135
日期:2018-06 瀏覽次數(shù):4077
日期:2018-08 瀏覽次數(shù):5520
日期:2018-10 瀏覽次數(shù):4524
日期:2018-12 瀏覽次數(shù):4611
日期:2018-07 瀏覽次數(shù):4437
日期:2018-12 瀏覽次數(shù):4579
日期:2018-06 瀏覽次數(shù):4468
日期:2018-11 瀏覽次數(shù):4447
日期:2018-12 瀏覽次數(shù):4324
日期:2018-12 瀏覽次數(shù):5350
Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.