1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Flutter】Providerを利用したときStatelessWidget、StatefulWidget、ConsumerWidget、ConsumerStatefulWidgetのそれぞれの使い方

Posted at

結論から書くとこんな感じです

StatelessWidget                   →    表示 or provider変数のみ変更
StatefulWidget           →    いらん
ConsumerWidget                      →    部品
ConsumerStatefulWidget    →  変数 + provider変数

なんで上記に至ったのかというところを簡単にそれぞれ解説します

StatelessWidgetを表示またはProvider変数のみ変更する場合に使用する理由

そもそもStatelessWidget単体では値の変更とかできないからですね

でもProviderはそんな値とか変更できないStatelessWidgetでも変更可能なんですよね

なので、文字や数字などは基本固定のものの表示&Provider変数のみ変更したいなみたいな感じの場合こちらを利用するのがいいのかなと

ぶっちゃけた話ConsumerStatefulWidgetがあればなんでも対応可能だと思うんですけど、パフォーマンスの最適化を考慮することとか考えると上記みたいな感じの場合はこちらを使用するのがいいかなって感じました

StatefulWidgetがいらん理由

ConsumerWidgetとConsumerStatefulWidgetはStatefulWidgetを拡張して作られているからですね

強いていうのであれば、Provider変数を全く使わない場合はこちらを利用するくらいの感じかなと

今回の内容で言えばProviderにフォーカスしてるのでいらんという回答になりました

ConsumerWidgetを部品の作成で利用する理由

provider変数のみ変更ならStatelessWidget使うし、変数 + provider変数ならConsumerStatefulWidget使うからこれいらなくね?

って思ってたんですけど、まぁよくよく考えてみてソースが大きすぎたり、共通化部品を作りたい場合のことを考えた時に「あーこれ使えばええんか」ってなりました

ただ慣れない人が作るとプロジェクトが大きくなった時に間違いなくバグると思うので、ある程度理解してからやるのが吉かなって個人には思います

ConsumerStatefulWidgetを変数&provider変数の場合に利用する理由

それ以外で使用する意味がないなと

Provider変数であればStatelessWidgetで変更できるし、わざわざこちらを利用する意味があるとしたらそれくらいかなと

全てProvider変数で管理しているなんて案件であれば必要ないですが、そんなプロジェクトはほぼないかなと思うんでこういう結論に至りました

まとめ

基本的にそんなに勉強したりとか好きじゃないんですけど、Providerは割といろんな案件で使われてるんで今回ちょっと勉強してよかったなって思いました

ただ個人的に言えば別にシングルトンパターンでも同じことはできるし、Providerに固執する必要もないかなって感じです

どなたかの参考になれば幸いです

ではまた

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?