🍆

Riverpodの@とRefについて

2024/10/27に公開1

👤対象者

  • @マークのannotationについて知りたい
  • Refについて知りたい

記事の内容

こちらの最新バージョンが日本語翻訳された記事から引用しております。
https://riverpod.dev/ja/docs/essentials/first_request

補足情報

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