set<TData> static method
Create a mutation that optimistically updates a single value.
Automatically:
- Updates value immediately (optimistic update)
- Rolls back on error
- Supports offline queueing
Example:
final updateUser = ZenMutation.set<User>(
queryKey: 'current_user',
mutationFn: (user) => api.updateUser(user),
);
Implementation
static ZenMutation<TData, TData> set<TData>({
required Object queryKey,
String? mutationKey,
required Future<TData> Function(TData value) mutationFn,
void Function(TData data, TData value, Object? context)? onSuccess,
void Function(Object error, TData value)? onError,
}) {
return ZenMutation<TData, TData>(
mutationKey: mutationKey ?? '${queryKey}_set',
mutationFn: mutationFn,
onMutate: (value) async {
final oldValue = ZenQueryCache.instance.getCachedData<TData>(queryKey);
ZenQueryCache.instance.setQueryData<TData>(
queryKey,
(_) => value,
);
return oldValue;
},
onSuccess: (data, value, context) =>
onSuccess?.call(data, value, context),
onError: (err, value, context) {
if (context != null) {
ZenQueryCache.instance.setQueryData<TData>(
queryKey,
(_) => context as TData,
);
}
onError?.call(err, value);
},
);
}