Try   HackMD

Flutter state 一些筆記

什麼是state?

在了解之前要先從Widget的部分來講,在 Flutter 中,widget 有兩種類型:StatelessWidgetStatefulWidget

  • StatelessWidget 是不可變的 widget
  • StatefulWidget 則是可變的 widget,可以動態地更改其狀態。

所以為了更新 widget tree。所以為了讓 widget tree 可以感知到 StatefulWidget 的狀態改變,需要使用 state 物件來監聽、儲存這些狀態改變。一旦有改變State對象會通知Flutter框架重新繪製小部件,以便顯示新的狀態

State 是 StatefulWidget 中的一部分,也是一個存儲 widget 狀態的對象,只要widget狀態改變時,State 會更新並通知 Flutter 重新繪製該 widget。

只要使用到State的任何改動都會強制Widget進行重新建構

setState()

  • 簡單原理

    將新的狀態存儲到內部變數中,然後重新呼叫 build() 方法來構建畫面。

setState() 他的好處是他是把最新狀態直接儲存在內存中,而不是直接進行更新畫面。

相關狀態管理方法

以上提到的東西皆是狀態管理的一環,除了setState()之外也還有其他官方推薦的狀態管理方法

  1. setState() 最常見的管理widget state的方法。當widget的狀態發生改變的時候,可以通過調用setState()告訴Flutter要重新建構UI

setState() 這種方法適用於小型應用,但對於大型應用,由於它無法有效地管理狀態,因此可能會導致代碼混亂和難以維護的問題。

  1. InheritedWidget

  2. Provider

相關資料

https://juejin.cn/post/6844903784187953165

https://book.flutterchina.club/chapter2/flutter_widget_intro.html#_2-2-3-flutter中的四棵树

https://ithelp.ithome.com.tw/articles/10217200