フラッタ状態管理を使用しての提供を提供するとの間の差

彼は、状態管理は、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)。

 

おすすめ

転載: www.cnblogs.com/joe235/p/11971945.html