Rašymo srautas išlieka aiškus.
Apibrėžkite mutacijas kaip provider metodus, stebėkite būseną su MutationToken ir vykdykite jas per ref.invoke(call).
Mutacijų statybiniai blokai
Mutacija yra Call<R, State>, grąžinamas iš 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)
Pastaba
Skirtingai nei notifier.method() stiliaus API, miniriverpod paverčia mutacijos vykdymą pirmos klasės call object.
Vykdyti mutaciją
Naudokite ref.invoke, kad atšaukimo ir drop elgsena būtų matoma kviečiančiajam.
Vykdyti
Konkurencijos parinktys
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.
Pavyzdys: optimistinis atnaujinimas + restart
Įprastas rašymo modelis optimistiškai atnaujina AsyncData, tada sinchronizuojasi su serverio atsakymu.
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,
);
}
Kiti žingsniai
Flutter API
Susiekite mutacijos būseną su UI naudodami ConsumerWidget arba ConsumerStatefulWidget.
Atverti Flutter APIAPI Reference
Greitai peržiūrėkite invoke, mutation, mutate ir MutationState tipus.
Atverti API Reference