useMutation<R> function

Mutation<R> useMutation<R>({
  1. MutationKey<R>? key,
  2. String? keyOf,
  3. MutationInitialDataCallback<R>? initialData,
  4. MutationMutateCallback<R>? initialMutate,
  5. MutationOnUpdateDataCallback<R>? onUpdateData,
  6. MutationOnUpdateErrorCallback? onUpdateError,
  7. MutationOnUpdateInitializedCallback? onUpdateInitialized,
  8. MutationOnUpdateLoadingCallback? onUpdateLoading,
  9. MutationOnOpenCallback<R>? onOpen,
  10. MutationOnCloseCallback<R>? onClose,
  11. List<MutationKey<R>> observeKeys = const [],
})

Implementation

Mutation<R> useMutation<R>(
    {MutationKey<R>? key,
    String? keyOf,
    MutationInitialDataCallback<R>? initialData,
    MutationMutateCallback<R>? initialMutate,
    MutationOnUpdateDataCallback<R>? onUpdateData,
    MutationOnUpdateErrorCallback? onUpdateError,
    MutationOnUpdateInitializedCallback? onUpdateInitialized,
    MutationOnUpdateLoadingCallback? onUpdateLoading,
    MutationOnOpenCallback<R>? onOpen,
    MutationOnCloseCallback<R>? onClose,
    List<MutationKey<R>> observeKeys = const []}) {
  final mutationKey = useMutationKey(of: keyOf, key: key);
  final mutation = useMemoized(() {
    final m = MutationCache.instance.retain<R>(mutationKey,
        initialData: initialData,
        initialMutate: initialMutate,
        onUpdateData: onUpdateData,
        onUpdateError: onUpdateError,
        onUpdateInitialized: onUpdateInitialized,
        onUpdateLoading: onUpdateLoading,
        onOpen: onOpen,
        onClose: onClose,
        observeKeys: observeKeys);
    mutationKey.setMutation(m);
    return m;
  }, [mutationKey]);
  useEffect(() {
    if (mutation.isInitilized) {
      return null;
    }
    if (initialMutate == null) {
      return null;
    }
    Future.delayed(Duration.zero, () {
      mutation.updateInitialMutate(initialMutate);
    });
    return null;
  }, [mutation, initialMutate]);
  useEffect(() {
    return () {
      MutationCache.instance.release(mutationKey);
    };
  }, [mutation]);
  return mutation;
}