Riverpodの@とRefについて
👤対象者
- @マークのannotationについて知りたい
- Refについて知りたい
記事の内容
こちらの最新バージョンが日本語翻訳された記事から引用しております。
補足情報
Riverpodのコードを書ける人前提に紹介しております。
providerの作成
モデルができたので、API クエリを開始できます。 これを行うには、最初の provider を作成する必要があります。
provider を定義する構文は次のようになります:
Result myFunction(Ref ref) {
<your logic here>
}
annotation
すべての provider には @riverpod または @Riverpod()の annotation が必要です。
この annotation はグローバル関数またはクラスに付けることができます。
この annotation を通じて provider を構成することができます。
たとえば, @Riverpod(keepAlive: true)と書くことで "auto-dispose"を無効にすることができます(後で説明します)。
関数
関数 annotation の名前は、provider との対話方法を決定します。
annotation
例えばmyFunctionという関数の場合、 myFunctionProvider 変数が生成されます。
関数 annotation は、必ず最初のパラメーターにrefを指定する必要があります。
それに加えて、関数は任意の数のパラメーターを持つことができ、ジェネリクスも含めることができます。
関数はまた、Future/Streamを返すこともできます。
この関数は provider が最初に読み取られたときに呼び出されます。
その後の読み取りは関数を再度呼び出すのではなく、キャッシュされた値を返します。
Ref
他の provider と対話するために使用されるオブジェクトです。
すべての provider が持っています。provider 関数のパラメーターとして、または Notifier のプロパティとして存在します。
このオブジェクトのタイプは function/class の名前によって決定されます。
最後に
@(annotation)
とは、解説通りすべての provider には @riverpod または @Riverpod()の annotation が必要です。と書かれているのでつける。たまに忘れることある💦
この annotation はグローバル関数またはクラスに付けることができます。
この annotation を通じて provider を構成することができます。
myFunction
という関数の場合、 myFunctionProvider 変数が生成されます。これが自動生成されるファイルの内容ですね。
Ref
は、他の provider と対話するために使用されるオブジェクトです。
すべての provider が持っています。provider 関数のパラメーターとして、または Notifier のプロパティとして存在します。
このオブジェクトのタイプは function/class の名前によって決定されます。
Discussion
アンドレアさんによるとコマンドを使うと自動でやってくれる?