Mutations

Définissez les mutations en tant que méthodes de fournisseur, surveillez l'état avec MutationToken et exécutez-les via ref.invoke(call).

Blocs de construction des mutations

Une mutation est un Call<R, State> retourné par mutate(token, body, concurrency: ...).

Token

late final renameMut = mutation<void>(#rename)

Execution

await ref.invoke(provider.rename(...))

State

Idle / Pending / Success / Error via ref.watch(token)

Remarque

Contrairement aux API de type notifier.method(), miniriverpod fait de l'exécution des mutations un objet call de premier ordre.

Exécuter une mutation

Utilisez ref.invoke afin que les comportements d'annulation et d'abandon soient transmis à l'appelant.

Exécuter

Options de concurrence

concurrent : run all calls in parallel (default).
queue      : FIFO; keep running queued calls even after an error.
restart    : cancel previous run, keep only latest call.
dropLatest : drop incoming calls while one is running.

Exemple : mise à jour optimiste + restart

Un modèle d'écriture courant met à jour AsyncData de manière optimiste, puis se synchronise avec la réponse du serveur.

class UserProvider extends AsyncProvider<User?> {
  UserProvider() : super.args(null);

  late final renameMut = mutation<void>(#rename);

  Call<void, AsyncValue<User?>> rename(String newName) => mutate(
    renameMut,
    (ref) async {
      final cur = ref.watch(this).valueOrNull;
      ref.state = AsyncData((cur ?? const User()).copyWith(name: newName), isRefreshing: true);

      final api = ref.watch(apiProvider);
      await api.rename(newName);
      ref.state = AsyncData(await api.me());
    },
    concurrency: Concurrency.restart,
  );
}
restart peut lever CancelledMutation pour les anciens appelants.
dropLatest peut lever DroppedMutation quand c'est occupé.
Gérez ces exceptions dans l'interface utilisateur pour masquer les erreurs d'annulation temporaires.

Étapes suivantes

Flutter API

Associez l'état de la mutation à l'interface utilisateur à l'aide de ConsumerWidget ou ConsumerStatefulWidget.

Ouvrir Flutter API

API Reference

Passez rapidement en revue les types invoke, mutation, mutate et MutationState.

Ouvrir la référence de l'API