ミューテーションのオプション
Mutation と NoVariablesMutation のすべてのオプションを、型とデフォルトとともに示します。ミューテーションを実行するメソッド、MutateOptions、MutationPersist も示します。すべてのミューテーション、またはキーの配下にあるミューテーションに gcTime、retry、retryDelay、networkMode、meta を設定するには、MutationDefaults(デフォルト)を使ってください。オプションを使う例はミューテーションにあります。
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
mutationFn |
Future<TData> Function(TVariables variables) |
必須 | 変更をサーバーに送信します。パラメーターの型が TVariables を、戻り値の型が TData を決めます。 |
mutationKey |
List<Object?> |
なし | 実行を識別します。MutationState ウィジェット、useMutationState、MutationFilters、restore は、このキーで実行を見つけます。setMutationDefaults は、受け取ったキーで始まるキーを持つすべてのミューテーションにデフォルトを適用します。 |
gcTime |
Duration |
5 分 | 実行が完了し、どのオブザーバーも追跡していないときに、ミューテーションキャッシュに残る時間です。infiniteDuration にすると、clear() まで残ります。 |
retry |
RetryPolicy |
RetryPolicy.never() |
失敗した試行を再試行する回数です。.count(n)、.always()、.when((count, error) => ...) のいずれかを指定します。 |
retryDelay |
Duration Function(int failureCount, Object error) |
1 秒、2 秒、4 秒…(最大 30 秒) | 各再試行の前に待つ時間 |
networkMode |
NetworkMode |
NetworkMode.online |
online は、各試行の前にネットワークを待ちます。always はネットワークを無視します。offlineFirst は最初の試行を実行し、再試行の前にネットワークを待ちます。 |
scope |
MutationScope |
なし | スコープの id が同じ実行は、開始した順に 1 つずつ実行されます。順番を待っている実行は isPaused を報告します。 |
persist |
MutationPersist<TVariables> |
なし | 実行が pending 状態の間、変数を保存します。そのため、再起動後に restore(mutations:) で再び実行できます。mutationKey(アサートで検査します)と、storage を持つクライアントが必要です。MutationPersist を参照してください。 |
meta |
Map<String, Object?> |
なし | 任意の値です。MutationCacheConfig のコールバックと MutationFilters.predicate は、mutation.options.meta として読み取ります。 |
onMutate |
コールバックを参照 | なし | mutationFn の前に実行されます。戻り値が TContext を決め、context になります。 |
onSuccess |
コールバックを参照 | なし | mutationFn が成功した後に実行されます。 |
onError |
コールバックを参照 | なし | 最後の試行が失敗した後に実行されます。 |
onSettled |
コールバックを参照 | なし | 成功と失敗のどちらの後にも実行されます。 |
ミューテーションを実行する
Section titled “ミューテーションを実行する”定義は、次のメソッドで自身を実行します。client は省略可能で、デフォルトは呼び出し時点の Fuery.client です。
| メソッド | 戻り値 | 説明 |
|---|---|---|
mutate(variables, [client]) |
void |
実行を開始し、完了を待ちません。エラーは呼び出し元には届かず、実行の状態とコールバックに届きます。 |
mutateAsync(variables, [client]) |
Future<TData> |
実行を開始し、そのデータを返します。実行が失敗すると、エラーをスローします。 |
observe({client}) |
MutationObserver<TData, TVariables, TContext> |
ミューテーションを実行し、その最新の実行を報告する新しいオブザーバーを返します。1 つのオブザーバーを共有するを参照してください。 |
- 定義は状態を持ちません。
mutateやmutateAsyncで開始した実行は、クライアントのミューテーションキャッシュに属し、どのオブザーバーも保持しません。実行は、完了してからgcTimeが過ぎるとキャッシュから削除されます。 - MutationState ウィジェット、
useMutationState、isMutatingは、mutationKeyでその実行を見つけます。どのMutationResultにも、この実行は現れません。 - オブザーバーから開始した実行と同じく、この実行にもクライアントのデフォルト、
scope、persistが適用されます。 - どちらのメソッドも
MutateOptionsを受け取りません。1 回の呼び出しに対する処理は、mutateAsyncを await して書いてください。 - 独自のクライアントを持つ
FueryProviderの下では、context.queryClientを渡してください。
コールバック
Section titled “コールバック”| コールバック | 引数 | 戻り値 |
|---|---|---|
onMutate |
TVariables variables, QueryClient client |
FutureOr<TContext?>(context になる値) |
onSuccess |
TData data, TVariables variables, TContext? context, QueryClient client |
FutureOr<void> |
onError |
Object error, TVariables variables, TContext? context, QueryClient client |
FutureOr<void> |
onSettled |
TData? data, Object? error, TVariables variables, TContext? context, QueryClient client |
FutureOr<void> |
client は、ミューテーションを実行しているクライアントです。Fuery は、各コールバックを次の順序で実行します。
- クライアントの
MutationCacheConfigのコールバック(キャッシュのコールバック) - ミューテーション自身のコールバック
- 両方の
onSettledが終わった後、実行の状態が success か error に変わります。次に、ウィジェットが新しい状態を知る前に、呼び出しのMutateOptionsのコールバックが実行されます。
- 手順 1 と 2 で Future が返されると、Fuery はその Future を待ちます。そのため、Future が完了するまで、実行は pending 状態のままです。
onMutate、または成功後のonSuccessかonSettledがスローしたエラーは、実行を失敗させ、onErrorに届きます。- 失敗した実行の
onErrorかonSettledがスローしたエラーは、onUncaughtErrorに届きます。 restore(mutations:)が復元した実行はonMutateをスキップし、コールバックはcontextとしてnullを受け取ります。clear()が一時停止中の実行を破棄すると、その実行はCancelledErrorで失敗します。onMutateより後のコールバックは実行されず、その呼び出しのMutateOptionsのコールバックも実行されません。
NoVariablesMutation
Section titled “NoVariablesMutation”NoVariablesMutation<TData, TContext> は Mutation と同じオプションを受け取ります。ただし、mutationFn とコールバックには変数がありません。
| オプション | 引数 | 戻り値 |
|---|---|---|
mutationFn |
なし | Future<TData> |
onMutate |
QueryClient client |
FutureOr<TContext?> |
onSuccess |
TData data, TContext? context, QueryClient client |
FutureOr<void> |
onError |
Object error, TContext? context, QueryClient client |
FutureOr<void> |
onSettled |
TData? data, Object? error, TContext? context, QueryClient client |
FutureOr<void> |
定義は mutate() と mutateAsync() で実行します。クライアントを渡すには、mutate(null, client) のように最初に null を渡してください。
NoVariablesMutation は Mutation<TData, void, TContext> です。そのため、次のようになります。
- ウィジェットとフックは、
mutate(null)かmutateAsync(null)で実行します。 MutateOptionsのコールバックには変数の引数が残り、その値はnullです。observe()はNoVariablesMutationObserverを返します。このオブザーバーは、mutate()とmutateAsync()で実行します。MutateOptionsを渡すには、mutate(null, options)のように最初にnullを渡してください。
永続化するには、MutationPersist.noVariables を渡してください。
MutateOptions
Section titled “MutateOptions”MutateOptions は、1 回の呼び出しのためのコールバックを持ちます。結果やオブザーバーの mutate または mutateAsync の 2 番目の引数として渡します。定義の mutate は MutateOptions を受け取りません。
| フィールド | 引数 | 実行タイミング |
|---|---|---|
onSuccess |
TData data, TVariables variables, TContext? context, QueryClient client |
呼び出しが成功した後 |
onError |
Object error, TVariables variables, TContext? context, QueryClient client |
呼び出しが失敗した後 |
onSettled |
TData? data, Object? error, TVariables variables, TContext? context, QueryClient client |
成功または失敗の後 |
- ミューテーション自身のコールバックの後、実行が完了してから実行されます。Fuery は
MutateOptionsのコールバックを待ちません。 - 同じオブザーバーで新しく呼び出すと、コールバックが置き換わります。そのため、最新の呼び出しのコールバックだけが実行されます。
reset()はコールバックを破棄します。オブザーバーを所有するウィジェットをアンマウントしたときや、オブザーバーを所有するフックやスロットを破棄したときも同じです。- 共有したオブザーバーは、リッスンしているものがあるかどうかに関係なく、
MutateOptionsのコールバックを実行します。コールバックでBuildContextを使う前に、context.mountedを確認してください。 - コールバックがスローしたエラーは
onUncaughtErrorに届きます。
MutationPersist
Section titled “MutationPersist”MutationPersist<TVariables> は、ミューテーションの変数を JSON に変換し、JSON から元に戻します。そのため、restore(mutations:) は再起動後に保存された実行を実行できます。設定方法はミューテーションを永続化するにあります。
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
toJson |
Object? Function(TVariables variables) |
必須 | 変数を、jsonEncode が受け付ける値に変換します。エンコードできない変数は保存せず、実行はそのまま続きます。 |
fromJson |
TVariables Function(Object? json) |
必須 | jsonDecode が生成した値を変数に戻します。 |
version |
int |
1 |
Fuery は、バージョンが異なる保存済みの実行を、実行せずに削除します。JSON の形式を変えたら、値を上げてください。 |
MutationPersist.noVariables は、保存する変数がない NoVariablesMutation のための MutationPersist<void> です。