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,
);
}
Étapes suivantes
Flutter API
Associez l'état de la mutation à l'interface utilisateur à l'aide de ConsumerWidget ou ConsumerStatefulWidget.
Ouvrir Flutter APIAPI Reference
Passez rapidement en revue les types invoke, mutation, mutate et MutationState.
Ouvrir la référence de l'API