哥哥教你最簡單的Flutter狀態(tài)管理三步走

什么是狀態(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推薦的。官方推薦最致命!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容