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,
);
}
Nästa steg
Flutter API
Koppla muteringsstatusen till UI med ConsumerWidget eller ConsumerStatefulWidget.
Öppna Flutter APIAPI Reference
Gå snabbt igenom typerna invoke, mutation, mutate och MutationState.
Öppna API Reference