De schrijfstroom blijft expliciet.
Definieer mutations als provider-methoden, monitor de status met MutationToken en voer ze uit via ref.invoke(call).
Bouwstenen van Mutations
Een mutation is een Call<R, State> die wordt geretourneerd door mutate(token, body, concurrency: ...).
Token
late final renameMut = mutation<void>(#rename)
Uitvoering
await ref.invoke(provider.rename(...))
Status
Idle / Pending / Success / Error via ref.watch(token)
Opmerking
In tegenstelling tot notifier.method() stijl-API's, maakt miniriverpod van mutation-uitvoering een eersteklas call-object.
Voer een mutation uit
Gebruik ref.invoke zodat annulerings- en drop-gedrag naar de aanroeper worden gecommuniceerd.
Uitvoeren
Concurrency-opties
concurrent : voer alle aanroepen parallel uit (standaard).
queue : FIFO; blijf in de wachtrij geplaatste aanroepen uitvoeren, zelfs na een fout.
restart : annuleer de vorige run, behoud alleen de nieuwste aanroep.
dropLatest : negeer binnenkomende aanroepen terwijl er al een loopt.
Voorbeeld: optimistische update + restart
Een veelvoorkomend schrijfpatroon werkt AsyncData optimistisch bij en synchroniseert vervolgens met het serverantwoord.
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,
);
}
Volgende stappen
Flutter-API
Koppel de status van de mutation aan de UI met ConsumerWidget of ConsumerStatefulWidget.
Open Flutter-API