StatefulWidget 應對有交互、須要動態變化視覺效果的場景,而 StatelessWidget 則用於處理靜態的、無狀態的視圖展現。編程
Flutter 中,如何調整一個控件(Widget)的展現樣式,即 UI 編程範式。瀏覽器
原生系統(Android、iOS)或原生 JavaScript話,視圖開發是命令式的,須要精確地告訴操做系統或瀏覽器用何種方式去作事情。好比,若是咱們想要變動界面的某個文案,則須要找到具體的文本控件並調用它的控件方法命令,才能完成文字變動。less
與此不一樣的是,Flutter 的視圖開發是聲明式的,其核心設計思想就是將視圖和數據分離,這與 React 的設計思路徹底一致。和Android的MVVM相似,就是用數據驅動視圖的變化。組件化
在 Flutter 中,Widget 採用由父到子、自頂向下的方式進行構建,父 Widget 控制着子 Widget 的顯示樣式,其樣式配置由父 Widget 在構建時提供。性能
Widget 是不可變的,更新則意味着銷燬 + 重建(build)。StatelessWidget 是靜態的,一旦建立則無需更新;而對於 StatefulWidget 來講,在 State 類中調用 setState 方法更新數據,會觸發視圖的銷燬和重建,也將間接地觸發其每一個子 Widget 的銷燬和重建。優化
基於上面的描述,咱們知道,StatelessWidget在性能上優於StatefulWidget,那麼在構建一個複雜的Widget時,能夠考慮組件化的方案,即將變化的和不變化的Widget單獨處理,再封裝在StatelessWidget中,這樣只改變某個子組件,而不更改整個Widget。由於子Widget的setState並不會影響整個Widget。ui