Бичих урсгал ил тод хэвээр байна.

Mutation-уудыг provider аргууд болгон тодорхойлж, MutationToken-оор төлөвийг хянаад ref.invoke(call)-оор ажиллуул.

Mutation-ийн барилгын блокүүд

Mutation нь mutate(token, body, concurrency: ...) -ээс буцаагдах Call<R, State> юм.

Token

late final renameMut = mutation<void>(#rename)

Execution

await ref.invoke(provider.rename(...))

State

Idle / Pending / Success / Error via ref.watch(token)

Тэмдэглэл

notifier.method() хэв маягийн API-уудаас ялгаатай нь miniriverpod mutation execution-ийг first-class call object болгодог.

Mutation ажиллуулах

ref.invoke ашигласнаар цуцлалт ба drop-ийн зан төлөв дуудсан талд харагдана.

Ажиллуулах

Concurrency сонголтууд

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.

Жишээ: optimistic шинэчлэлт + restart

Ердийн бичих загвар нь AsyncData-г optimistic байдлаар шинэчлээд дараа нь server-ийн хариутай синк хийнэ.

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

ConsumerWidget эсвэл ConsumerStatefulWidget ашиглан mutation-ийн төлөвийг UI-тай холбо.

Flutter API нээх

API Reference

invoke, mutation, mutate, MutationState төрлүүдийг хурдан хар.

API Reference нээх