これは、ややこしさが減るという意味で非常にいい話なのですが、Flutterにおける状態管理のデファクトスタンダードである「provider」パッケージですが、
これのバージョン4.1.0から従来の
Provider.of<T>(context, listen: false)
の拡張関数版である
context.read<T>()
が登場しましたが、これはbuildメソッド内では使えないという制約がありました。
これは安全上の方策とは言え、使う側からするとややこしさが残るものとなっていましたが、バージョン5.0以降はbuildメソッド内でも使えるようになり、そのややこしさが解消されました。
(providerの作者:Remiさんのコメント)
context.watch/context.readのアサーション(例外を投げること)は、多くの人にとって不満の種であり、ほとんど役に立たないようだ。
アサートの代わりに、カスタムリンターを実装することができる。つまり、readをbuild内で使用したり、アサーションで防がれている他のものは「動作する」が、リンターを使用している場合は警告が表示されるということ。
これは、人々がこの動作をオプトイン/オプトアウトできるので、おそらくより良い妥協点になるだろう。
It appears that the assertions in context.watch/context.read are a source of frustration for many, and of little help Instead of asserts, what we could do is implement a custom linter. That means u...
(詳しくは、以下の動画で解説していますので、よろしければご覧下さい)