Should I use code generation?
Code generation is optional in Riverpod. With that in mind, you may wonder if you should use it or not.
The answer is: Most likely Yes.
Code generation is optional in Riverpod. With that in mind, you may wonder if you should use it or not.
The answer is: Most likely Yes.
Using code generation is the recommended way to use Riverpod. It is the more future-proof approach and will allow you to use Riverpod to its full potential.
It is the more future-proof approach and will allow you to use Riverpod to its full potential.はriverpod_generatorのThis new syntax has all the power of Riverpod, but also:を指していると理解しています。
This new syntax has all the power of Riverpod, but also:
solves the problem of knowing "What provider should I use?".
With this new syntax, there is no such thing as Provider vs FutureProvider vs ...
enables stateful hot-reload for providers.
When modifying the source code of a provider, on hot-reload Riverpod will re-execute
that provider and only that provider.
fixes various flaws in the existing syntax.
For example, when passing parameters to providers by using [family], we are limited
to a single positional parameter. But with this project, we can pass multiple parameters,
and use all the features of function parameters. Including named parameters, optional
parameters, default values, ...
列挙されている課題は、Riverpodを学び始めた開発者が、特に混乱しやすい箇所です。またProviderを自前で定義した際には、hot-reloadに対応するためのコードを書くのが煩わしく、開発体験を下げている箇所があります。
これらが解消されることが、Riverpodエコシステムにとって大きなメリットであるので、 Most likely Yes. と推奨していると解釈しています。ただ、これらはあくまでもoptionの位置付けなため、riverpod_generatorを採用せずとも、まず不都合は生じないのではないかなと。
Discussion
@riverpodなどのannotationは単純に読みづらくなる&Command + クリックジャンプがしづらく追いづらくなるので、一つ前のバージョンがやはり私は好みです。FutureProviderが最高で属人化しがちなendpointなどのpromiseからModel変換までエラー、ローディングの記法が統一できるのが一番の強みだと思っています。hooksのuseEffectでendpointを呼び出しオレオレStateのような負債になるようなコードが防げる。Riverpodを正しく使っていればRead onlyの画面にStateはいらないということに気がつく(スクロールしてindexをインクリメントのcursorみたいな実装は除く)
riverpod_generatorは別ライブラリとして提供されており、現時点ではoptionの扱いになります。このため、riverpod v2でも各
Providerを手で記述することは可能です……!ファイルが分割される点は、ご指摘の通り、開発者が何を重視するかによって判断が別れますね。Static Metaprogrammingが導入されるまでは、トレードオフの関係に着目する必要があります。
FutureProviderは、素晴らしい仕組みだと思っています。特に、UIに非同期処理の状態や結果を反映させる実装を、一定以上の品質に均してくれる点が好きです。非同期処理が一切ないアプリは想定しにくいので、どの開発チームでもメリットになりうるのかなと。
FYIですが、APIや画面仕様にもよりますが、indexを
FutureProvider.familyのextra paramとして活用することもできます。私も実際に採用したことはないのですが、この実装ができるケースであれば、UIでindexを特別に管理する必要もなさそうです。それはそうなんですが、
ドキュメント見る限りかなり強い意志で入れたほうが良さそうなことが書いてありますね。入れないと不都合がおきそうな感じはします。
Scrollとindexインクリメント部分のみやはりStateなりどこかしらに管理する必要はあるものの(これぐらいviewにかいてもいいかという気持ちもある)
私にとって勉強になりました。しらなかった。Firestore使ってるとFirestoreUIを優先させて使用しているため外部のAPIやるとき役立ちそう。ありがとうございます。
"不都合がおきそう"は、2023〜24年の間であれば、杞憂ではないかなと思われます……!
下記に私がそう考えている理由を記載します。もしもGitHubのIssueなどで将来的な不都合の話が出ていましたら、ぜひ教えていただけますと🙏
前提として、riverpodは複数のライブラリに分割され、開発されています。このため「riverpodライブラリに対して、riverpod_generatorライブラリで機能を追加する」ことは考えづらく、riverpod_generatorを利用しない開発はサポートされ続けるはずです。
Most likely Yes. について。こちら、少し長めに引用します。
It is the more future-proof approach and will allow you to use Riverpod to its full potential.はriverpod_generatorのThis new syntax has all the power of Riverpod, but also:を指していると理解しています。列挙されている課題は、Riverpodを学び始めた開発者が、特に混乱しやすい箇所です。またProviderを自前で定義した際には、hot-reloadに対応するためのコードを書くのが煩わしく、開発体験を下げている箇所があります。
これらが解消されることが、Riverpodエコシステムにとって大きなメリットであるので、 Most likely Yes. と推奨していると解釈しています。ただ、これらはあくまでもoptionの位置付けなため、riverpod_generatorを採用せずとも、まず不都合は生じないのではないかなと。
なお、DartにStatic Metaprogrammingが導入されると、話が変わるかもしれません。導入後はriverpod_generatorが必須となったり、riverpodライブラリに統合される可能性はあると思います。
この後では、riverpod_generator相当の機能を利用していないときに、不都合が生じるかもしれません。。
なるほど!
コードを書く観点では現時点不都合が起きないにしろ
新しい方のドキュメントは
riverpod_generatorを入れる前提で書かれている為riverpod_generatorは入れるのが正しいというか合理的に見えます。