彼は、状態管理は、Googleが個人的に開発した2つの状態管理を言わなければならないと述べた
Widget
最初のものがある:
provide
秒1です
provider
。
この差は早いうち2で、それが更新され、全ていないようでした。第二は、今だけで出てきた2019年バージョンです
provider: ^3.2.0
。滞在には
provide: ^1.0.2
、基本的にGG。しかし、時には、あなたはプロジェクトのために必要がある場合があります
provide
。だから今、私が言いたいのこれら二つの基本的な使い方ということである、またはそれ(状態制御、複数のインタフェースを2回の使用の間のコントラストで、プロジェクトは複数のインタフェースを管理するために、より多くの状態かもしれません。
以前に問題が後からプロバイダを変更遭遇したプロジェクト、ビルドの再構築と提供。再構築しません提供し、プロバイダが再構築されます。
問題を解決するために:あなたは聞くしないことを選択することができ
聞く
:虚偽または変更がinitstateします。
まず、作成
1、作成provide,还用上次例子的counter
インポート' パッケージ:フラッタ/ material.dart ' ; クラスChangeNotifierとカウンタ{ int型値= 0 ; INCREMENT(){ 値 ++ ; notifyListeners(); // 変更通知リスナー } }
2、作成provider
インポート' パッケージ:フラッター/ material.dart ' ; クラスChangeNotifierとカウンタ{ INT _count = 0 。 取得回数=> _countを。 ボイドインクリメント(){ _count ++ 。 notifyListeners(); // 通知 } }
第二に、トップに依存
1、提供
ボイドメイン(){ // 顶层依赖 VARのカウンタ= カウンタ()。 VaRのプロバイダ= プロバイダ(); プロバイダ ..(プロバイダ <カウンタ> .VALUE(カウンタ)); runApp(ProviderNode(子:MyAppを()、プロバイダ:プロバイダ)); }
2、プロバイダ
空のmain(){ runApp( MultiProvider( プロバイダ:[ ChangeNotifierProvider.value(値:カウンター())、 // ChangeNotifierProvider(ビルダー:(_)=>カウンター())、 ]、 子供:MyAppの()、)、 ); }
第三に、使用
1、提供
Provide.value <カウンタ> (コンテキスト).increment(); // 方法オフインクリメント。。ここでは、単にのような2つのパラメータを受け入れる増分内のカウンターを書く口座にパラメータを渡すことができます
2、プロバイダ
Provider.of <カウンタ>(コンテキストは、聞く:falseに).increment(); // ここではまた、パラメータを渡すことができます
第四には、値を取得します
1、提供
戻り提供<ZxxxDetailsProvide> ( ビルダー:(文脈、子供、ヴァル){ VAR goodsInfo = Provide.value <ZxxxDetailsProvide> (コンテキスト).goodsInfo.data; } );
2、プロバイダ
リターン消費者<ZxxxListProvide> ( ビルダー:(コンテキスト、モデル、子){ ... } );
重要:使用して provider
、特定のセットに注意を払うに我々が持っている時間をブール値に耳を傾けるには、あります
await Provider.of <DetailsInfoProvide>(文脈、聞く:偽).getGoodsInfo(goodsId)。