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,
  );
}
restart gali mesti CancelledMutation senesniems kvietėjams.
dropLatest gali mesti DroppedMutation, kol vyksta darbas.
Gaudykite jas UI, kai norite slopinti laikinas atšaukimo klaidas.

Kiti žingsniai

Flutter API

Susiekite mutacijos būseną su UI naudodami ConsumerWidget arba ConsumerStatefulWidget.

Atverti Flutter API

API Reference

Greitai peržiūrėkite invoke, mutation, mutate ir MutationState tipus.

Atverti API Reference