私はまだ状態管理手法に頭を抱えており、Provider.of<X>
vs Consumer<X>
. をいつどのように使用するかについて少し混乱しています。これらの2つを選択すると、データにアクセスするときにProvider.ofを使用するが、UIを変更する必要がないことをドキュメントから理解しています(私はそう思います)。したがって、以下は(ドキュメントから取得)データにアクセスし、新しいイベントでUIを更新します。
return HumongousWidget(
// ...
child: AnotherMonstrousWidget(// <- This widget will rebuild on new data events
// ...
child: Consumer<CartModel>(
builder: (context, cart, child) {
return Text('Total price: ${cart.totalPrice}');
},
),
),
);
一方、データのみが必要な場合は、UIで再構築したくないので、次のようにパラメーターをに設定して使用Provider.of<X>
します。listen
false
Provider.of<CartModel>(context, listen: false).add(item); \\Widget won't rebuild
ただし、listen
必須ではないため、以下も実行されます。
Provider.of<CartModel>(context).add(item); \\listener optional
だから、これは私にいくつかの質問をもたらします:
- これは、区別するための正しい方法である
Provider.of<X>
とConsumer<X>
。元はUIを更新しませんが、後者は更新しますか? - に
listen
設定されていない場合false
、ウィジェットはデフォルトで再構築されるか、再構築されませんか?にlisten
設定されている場合はどうなりtrue
ますか? - なぜ
Provider.of
UIを再構築するオプションがあるのConsumer
ですか?