狀態(tài)管理
狀態(tài)
Flutter是聲明式編程买置,Widget定義的UI都是在build()函數(shù)中實現(xiàn)的瘫寝,這個函數(shù)的功能就是將狀態(tài)轉(zhuǎn)換成UI后控。
UI = f(state)
官方對狀態(tài)的定義如下:
whatever data you need in order to rebuild your UI at any moment in time
翻譯過來就是:狀態(tài)就是任何時間任何場景下重構(gòu)UI所需要的數(shù)據(jù)扮碧。
這里面至少可以看到兩層含義:
狀態(tài)就是數(shù)據(jù)白华;
狀態(tài)的改變驅(qū)動了UI的改變走越。
狀態(tài)的分類
我們可以把狀態(tài)分為局部狀態(tài)和全局狀態(tài)椭豫。
局部狀態(tài)就是Widget中內(nèi)部持有的狀態(tài),典型代表就是StatefuleWidget和它對應的State旨指。局部狀態(tài)只會影響單個Widget的UI呈現(xiàn)赏酥。
當某個狀態(tài)需要在多個Widget使用,或者在整個APP中使用谆构,那它就是全局狀態(tài)了裸扶。全局狀態(tài)的典型代表就是InheritedWidget。
我們在InheritedWidget的使用和源碼分析這篇文章中已經(jīng)詳細介紹過了InheritedWidget的相關內(nèi)容搬素,當然我們也提到過它的一些不是太完善的地方呵晨。
狀態(tài)管理庫
我們這里所說的狀態(tài)管理庫主要是指對全局狀態(tài)的一些處理庫,除了InheritedWidget外蔗蹋,還有一些最近非常流行的庫:
它目前是評分最高的庫何荚,適合大型的項目。但是它有一個缺點就是理解起來比較困難猪杭,編寫代碼方式也很獨特餐塘,需要編寫一些重復的代碼模板。
它是Flutter官方團隊共同維護的一個項目皂吮,由于有官方背景戒傻,所以不用擔心后期的維護升級問題。
getx是目前上升趨勢最快的一個庫蜂筹,使用非常簡單需纳,代碼也很簡介,功能很多艺挪。
當然還有其他一些庫不翩,譬如mobx,flutter_redux等,當然你很大可能也不會用到。