什么是狀態(tài)管理?
狀態(tài)管理的目的就是為了讓界面與業(yè)務(wù)分離。界面根據(jù)狀態(tài)來顯示,有操作時發(fā)出Action或者Event,而不處理實際 的業(yè)務(wù),業(yè)務(wù)交給上層處理。bloc在界面中有操作發(fā)生時使用dispatch發(fā)出Event事件,fish-redux也是類似使用dispatch,只不過發(fā)出的叫Action動作而已。當dispatch發(fā)出事件時mapEventToState即可收到事件,此時將event根據(jù)業(yè)務(wù)轉(zhuǎn)換為狀態(tài),狀態(tài)會傳遞回給界面進行顯示。bloc模塊其實就是類似mvvm中的ViewModel,負責所有業(yè)務(wù)的處理。
換句話說,在flutter中,Statelesswidget都是沒有狀態(tài)的,沒有提供刷新方法,但是如果全用statefulwidget的話又感覺很煩,每次刷新都要先判斷一下是否更改過然后再調(diào)用一次setstate()方法,有時候想刷新一小塊數(shù)據(jù),這個時候就要用到狀態(tài)管理來改變這些數(shù)據(jù)。
接下來哥哥帶你一步一步走:
第一步:狀態(tài)管理,你要管理的是什么,要做什么操作?
回答:我要我操作的數(shù)據(jù)++,實現(xiàn)一個計數(shù)器。

第二步,你要改變哪里的數(shù)據(jù),你要在哪里操作?
回答:我想在全局的任何地方都可以改變那個數(shù)據(jù),那么我最好把狀態(tài)管理的providers放到應(yīng)用頂層。

這里我要講一下Google出品的兩款Provider和Provide的區(qū)別,注意,他們只差一個r。
provider是最近才出現(xiàn)的比較新的,目前版本provider: ^3.0.0+1。而provide停留在provide: ^1.0.2。
使用Provide的話頂層處理要如上圖……
沒錯,如果使用provider就不用這樣了,而是如下:

Provide在具體方法中的使用:
Provide.value(context).increment(調(diào)用一下里面的方法。這里也可以傳參數(shù)進去只需要在Counter里面的increment里面寫兩個接受參數(shù)的就好);
Provider這樣寫:
Provider.of(context,listen:false).increment(這里也可以傳參數(shù));
再來個實際的例子:

但是有時候我們需要的是一個data之類的,比較多的值。那我們可以這樣做:
provide中:

provider中:

重要提示:在使用?provider的時候我們要注意了一定要設(shè)置listen的Bool值就是這樣.
awaitProvider.of(context,listen:false).getGoodsInfo(goodsId);
附上Github地址:https://github.com/ryanranya/flutter_BXSH
第三步:建造Provide,調(diào)用Provide


看了那么多狀態(tài)管理的,個人感覺Provider還是屬于簡單易用的,并且是google推薦的。官方推薦最致命!