Skrivflödet förblir explicit.

Definiera mutationer som provider-metoder, övervaka tillstånd med MutationToken och kör dem via ref.invoke(call).

Byggklossar för mutationer

En mutation är en Call<R, State> som returneras av 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)

Obs

Till skillnad från notifier.method()-stilens API:er gör miniriverpod muteringskörning till ett förstklassigt call object.

Kör en mutation

Använd ref.invoke så att avbryt- och drop-beteenden blir synliga för anroparen.

Kör

Alternativ för samtidighet

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.

Exempel: optimistisk uppdatering + restart

Ett vanligt skrivmönster uppdaterar AsyncData optimistiskt och synkroniserar sedan med serverns 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 kasta CancelledMutation till äldre anropare.
dropLatest kan kasta DroppedMutation medan något är upptaget.
Fånga dem i UI när du vill dölja tillfälliga avbrottsfel.

Nästa steg

Flutter API

Koppla muteringsstatusen till UI med ConsumerWidget eller ConsumerStatefulWidget.

Öppna Flutter API

API Reference

Gå snabbt igenom typerna invoke, mutation, mutate och MutationState.

Öppna API Reference