Yazma axını açıq qalır.

Mutasiyaları provider metodları kimi təyin edin, state-i MutationToken ilə izləyin və ref.invoke(call) vasitəsilə icra edin.

Mutation əsas blokları

Mutation, mutate(token, body, concurrency: ...) tərəfindən qaytarılan Call<R, State>-dir.

Token

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

İcra

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

State

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

Qeyd

notifier.method() tərzli API-lərdən fərqli olaraq, miniriverpod mutation icrasını birinci dərəcəli çağırış obyekti kimi təqdim edir.

Mutasiyanı icra et

Cancellation və drop davranışlarını çağırana göstərmək üçün ref.invoke istifadə edin.

İşə sal

Paralellik seçimləri

concurrent : bütün çağırışları paralel icra et (standart).
queue      : FIFO; xəta olsa belə növbədəki çağırışları icra etməyə davam et.
restart    : əvvəlki icranı ləğv et, yalnız son çağırışı saxla.
dropLatest : biri işləyərkən daxil olan çağırışları at.

Nümunə: optimistik yeniləmə + restart

Yaygın yazma nümunəsi əvvəlcə AsyncData-nı optimistik yeniləyir, sonra server cavabı ilə sinxronlaşır.

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 köhnə çağıranlara CancelledMutation ata bilər.
dropLatest məşğul olduqda DroppedMutation ata bilər.
Müvəqqəti ləğv xətalarını gizlətmək istədikdə bunları UI-də tutun.

Növbəti Addımlar

Flutter API

Mutasiya state-ni ConsumerWidget və ya ConsumerStatefulWidget ilə UI-yə bağlayın.

Flutter API-ni aç

API İstinadı

invoke, mutation, mutate və MutationState tiplərinə tez baxın.

API istinadını aç