Потокот на пишување останува експлицитен.

Дефинирајте ги мутациите како provider методи, следете ја состојбата со MutationToken и извршувајте ги преку ref.invoke(call).

Градивни блокови на мутациите

Мутацијата е Call<R, State> вратен од 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)

Напомена

За разлика од API-ја од типот notifier.method(), miniriverpod го прави извршувањето на мутацијата first-class call object.

Изврши мутација

Користете ref.invoke за однесувањата на откажување и drop да бидат видливи за повикувачот.

Должина (Run)

Опции за конкурентност

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.

Пример: оптимистичко ажурирање + restart

Вообичаен образец за пишување прво оптимистички ја ажурира AsyncData, а потоа се синхронизира со одговорот од серверот.

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 може да фрли CancelledMutation на постари повикувачи.
dropLatest може да фрли DroppedMutation додека е зафатено.
Фатете ги во UI кога сакате да ги потиснете привремените грешки за откажување.

Следни чекори

Flutter API

Поврзете ја состојбата на мутацијата со UI користејќи ConsumerWidget или ConsumerStatefulWidget.

Отвори Flutter API

API Reference

Брзо прегледајте ги типовите invoke, mutation, mutate и MutationState.

Отвори API Reference