Skriveflowet forbliver eksplicit.

Definér mutationer som provider-metoder, overvåg tilstanden med MutationToken, og kør dem via ref.invoke(call).

Byggeklodser for mutationer

En mutation er en Call<R, State> returneret fra 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)

Bemærk

I modsætning til notifier.method()-stil-API'er gør miniriverpod mutationseksponering til et førsteklasses call object.

Kør en mutation

Brug ref.invoke, så annullerings- og drop-adfærd bliver synlig for kaldende kode.

Kør

Indstillinger for samtidighed

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.

Eksempel: optimistisk opdatering + restart

Et almindeligt skrivepattern opdaterer AsyncData optimistisk og synkroniserer derefter med serverens svar.

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 kan kaste CancelledMutation til ældre kaldere.
dropLatest kan kaste DroppedMutation, mens noget er optaget.
Fang dem i UI'et, når du vil undertrykke midlertidige annulleringsfejl.

Næste skridt

Flutter API

Bind mutationstilstanden til UI med ConsumerWidget eller ConsumerStatefulWidget.

Åbn Flutter API

API Reference

Gennemgå hurtigt typerne invoke, mutation, mutate og MutationState.

Åbn API Reference