Open3
Flutter Refを渡すかProvider丸ごと渡すか

依存性注入とは引数で必要な依存関係を渡すこと
疎結合で保守・テストしやすい

私はlocalizationの呼び出しなど軽い実装で①を使っていたんですが②の方がお行儀がいいなと思い自分用にまとめることにしました。
①Refを渡す
実装が楽 何も考えずにポイと渡しておいたらいい
どんなProviderでも呼び出せる
依存関係が曖昧になりやすくテスト時にRefを受け取った側の単体テストがしづらくなる
②Provider丸ごと渡す
同期処理
ProviderListenable<T>
非同期処理
ProviderListenable<Future<T>>
依存性注入でテストが楽 受け取りProviderをモックに差し替えたらOK
①より可読性が高い(どこで何を使ってるのかがわかりやすい、引数で受け取るので流れとしてイメージしやすい)
責務の分離も実現できる、UIとロジック層を分けられる。
コマンド(状態を変更する処理)クエリ(値を取得する処理)を分離しやすい

②で使用するProviderListenable型は全てのプロバイダーの基底クラス
rovider, FutureProvider, StreamProvider, NotifierProviderなど全てのProviderに対応するクラス