Madea-K Dev

プログラムのメモや日々思ったことなど

< 35歳迄に起業し1000万円以上稼ぐ >

次の誕生日まで残りfunction Number() { [native code] }

Consumer in Provider

CartModelが上部のChangeNotifierProvider宣言を介してアプリのウィジェットに提供されたので、使用を開始できます。
Consumerウィジェットの唯一の必須引数は、ビルダーです。

Builderは、ChangeNotifierが変更されるたびに呼び出される関数です。
(つまり、モデルでnotifyListeners()を呼び出すと、対応するすべてのConsumerウィジェットのすべてのビルダーメソッドが呼び出されます。)
ビルダーは3つの引数で呼び出されます。

最初の引数はコンテキストであり、すべてのビルドメソッドでも取得できます。

ビルダー関数の2番目の引数は、ChangeNotifierのインスタンスです。
そもそも私たちが求めていたものです。モデル内のデータを使用して、任意の時点でUIをどのように表示するかを定義できます。

3番目の引数は子であり、最適化のためにあります。
コンシューマの下にモデルが変更されても変わらない大きなウィジェットサブツリーがある場合は、一度構築してからビルダーで取得できます。

コンシューマウィジェットをできるだけツリーの奥深くに配置するのがベストプラクティスです。
どこかで詳細が変更されたという理由だけで、UIの大部分を再構築する必要はありません。

場合によっては、UIを変更するためにモデルのデータは実際には必要ないが、それでもアクセスする必要があります。
たとえば、ClearCartボタンは、ユーザーがカートからすべてを削除できるようにします。カートの内容を表示する必要はなく、clear()メソッドを呼び出すだけです。

これにはConsumer を使用できますが、それは無駄です。フレームワークに、再構築する必要のないウィジェットを再構築するよう依頼します。

この使用例では、listenパラメーターをfalseに設定してProvider.ofを使用できます。

参考 : https://flutter.dev/docs/development/data-and-backend/state-mgmt/simple#consumer

/ Dart-FlutterPackages

×