Flutter狀態(tài)管理之provide和provider的使用區(qū)別

http://www.reibang.com/p/bea8e9c57666

2019.07.17?

E7BB7894-13E0-4857-B9AF-9037F4EE75A6.png

如圖所示解幽,我們要做的就是這個(gè)效果牵舵。首先我說(shuō)一下這個(gè)頁(yè)面的我理解的試圖拆分击奶。我首先把這個(gè)效果圖拆分成三部分,左側(cè)可滾動(dòng)的ListView,右側(cè)上不的ListView准脂,以及商品詳情的ListView饿悬,沒錯(cuò)就是分成了三個(gè)ListView。并且左側(cè)的ListView點(diǎn)擊右側(cè)的頭部ListView以及商品詳情都會(huì)跟著隨之變動(dòng)叽唱。

【好像扯遠(yuǎn)了G弧!9淄ぁ;⒄!!O庹K宰!F喔摇B狄薄!下面開始正題??】

首先我們要做的話肯定需要狀態(tài)管理贡未。我覺得狀態(tài)管理就有點(diǎn)像iOS里面的通知种樱。不知道理解的對(duì)不對(duì)蒙袍,反正我覺得類似吧。

說(shuō)道狀態(tài)管理不得不說(shuō)谷歌的親自開發(fā)的兩款狀態(tài)管理Widget嫩挤;第一個(gè)是provide害幅,第二個(gè)是provider。這兩個(gè)的區(qū)別就是一個(gè)出來(lái)的早岂昭,現(xiàn)在好像沒整么更新了以现。第二個(gè)是今年(2019)最近才出來(lái)的目前的版本是provider: ^3.0.0+1。上一個(gè)停留在了provide: ^1.0.2约啊,基本上GG了邑遏。但是有時(shí)候項(xiàng)目中可能用到了provide。所以現(xiàn)在我想說(shuō)的是這兩個(gè)的基本用法恰矩,或者說(shuō)是兩者使用的對(duì)比吧(控制多個(gè)界面的狀態(tài)记盒,項(xiàng)目中可能多個(gè)界面的狀態(tài)管理更多)。

0??

創(chuàng)建一個(gè)provide吧外傅,其實(shí)可以說(shuō)是一個(gè)model

import 'package:flutter/material.dart';


//混入

class Counter with ChangeNotifier{

? int value = 0;

increment(){

? value += 1;

??? //發(fā)送通知

??? NotificationListener();

? }

}


沒錯(cuò)就這樣搞一個(gè)簡(jiǎn)單的纪吮。

一、

頂層依賴管理

void main() {

?//頂層依賴

var counter = Counter();

var providers = Provider();

? providers

?? ?..(Provider<Counter>.value(counter))

?runApp(ProviderNode(child: MyApp(), providers: providers));

}


沒錯(cuò)就是這樣萎胰。如果使用provider的話就不用這樣寫了碾盟。我們需要做的是這樣

provider

class MyApp extends StatelessWidget {

var counter = Counter();

?@override

? Widgetbuild(BuildContext context) {

?? ?return MultiProvider(

?????providers: [

//這里是關(guān)鍵注冊(cè)通知吧

?????? ?ChangeNotifierProvider(builder: (_) => counter),

???? ?],

????? child: Container(

??????? child: MaterialApp(

????????? title: 'Test',

????????? onGenerateRoute: Application.router.generator,

???????? ?//去掉DEBUG字樣

?? ???????debugShowCheckedModeBanner: false,

???????? ?//設(shè)置主題

????????? theme: ThemeData(primaryColor: Colors.pink),

????????? home: IndexPage(),

?????? ?),

???? ?),

?? ?);

?}

}


上面兩個(gè)就是這兩種的頂層依賴。

使用:

provide在具體方法中的使用

Provide.value(context).increment(掉一下里面的方法技竟。冰肴。這里也可以傳參數(shù)進(jìn)去只需要在 Counter 里面的 increment 里面寫兩個(gè)接受參數(shù)的就好);

provider就這么寫

Provider.of(context,listen:false).increment(這里也可以傳參數(shù));

這樣我們基本完成了把參數(shù)保存起來(lái)的效果。

再來(lái)個(gè)實(shí)際的例子

#注釋掉的是我們”provide“ 的寫法榔组,這里主要是從我們建立的model里面取Id熙尉,因?yàn)镮d是變化的。var formData = {

???? ?"categoryId": Provider.of<ChildCategory>(context)

?????? ???.categoryId, //Provide.value<ChildCategory>(context).categoryId,

???? ?"categorySubId": categorySubId,

???? ?"page": 1

?? ?};


這樣獲取到值瓷患,但是有時(shí)候我們需要的是一個(gè)data之類的骡尽,比較多的值。那我們可以這樣做

provide中:

return Provide<CategoryGoodsListProvide>(builder: (context, child, data) {

data.//也能點(diǎn)出我們?cè)O(shè)置好值

}


provider中:

final counter = Provider.of<Counter>(context);

?? ?return Container(

????? counter.//點(diǎn)出我們?cè)趍odel里面設(shè)置的值了

);


重要提示:在使用?provider的時(shí)候我們要注意了一定要設(shè)置listen的Bool值就是這樣

await Provider.of<DetailsInfoProvide>(context, listen: false).getGoodsInfo(goodsId);


附上項(xiàng)目github地址BXSH喜歡的朋友給個(gè)star吧擅编!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末攀细,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子爱态,更是在濱河造成了極大的恐慌谭贪,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锦担,死亡現(xiàn)場(chǎng)離奇詭異俭识,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)洞渔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門套媚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)缚态,“玉大人,你說(shuō)我怎么就攤上這事堤瘤∶德” “怎么了?”我有些...
    開封第一講書人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵本辐,是天一觀的道長(zhǎng)桥帆。 經(jīng)常有香客問我,道長(zhǎng)慎皱,這世上最難降的妖魔是什么老虫? 我笑而不...
    開封第一講書人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮茫多,結(jié)果婚禮上祈匙,老公的妹妹穿的比我還像新娘。我一直安慰自己天揖,他們只是感情好菊卷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宝剖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪歉甚。 梳的紋絲不亂的頭發(fā)上万细,一...
    開封第一講書人閱讀 51,775評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音纸泄,去河邊找鬼赖钞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛聘裁,可吹牛的內(nèi)容都是我干的雪营。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼衡便,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼献起!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起镣陕,我...
    開封第一講書人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤谴餐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后呆抑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體岂嗓,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年鹊碍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了厌殉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片食绿。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖公罕,靈堂內(nèi)的尸體忽然破棺而出器紧,到底是詐尸還是另有隱情,我是刑警寧澤熏兄,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布品洛,位于F島的核電站,受9級(jí)特大地震影響摩桶,放射性物質(zhì)發(fā)生泄漏桥状。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一硝清、第九天 我趴在偏房一處隱蔽的房頂上張望辅斟。 院中可真熱鬧,春花似錦芦拿、人聲如沸士飒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)酵幕。三九已至,卻和暖如春缓苛,著一層夾襖步出監(jiān)牢的瞬間芳撒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工未桥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留笔刹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓冬耿,卻偏偏與公主長(zhǎng)得像舌菜,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子亦镶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

推薦閱讀更多精彩內(nèi)容