Ҷараёни навиштан возеҳ мемонад.

Мутатсияҳоро ҳамчун усулҳои 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 иҷрои мутатсияро ҳамчун объекти даъвати дараҷаи аввал месозад.

Иҷрои мутатсия

Аз ref.invoke истифода баред, то рафторҳои бекоркунӣ ва партофтан ба даъваткунанда намоён шаванд.

Иҷро

Имконоти ҳамзамонӣ

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 пайваст кунед.

API-и Flutter-ро кушоед

API Reference

invoke, mutation, mutate ва намудҳои MutationState-ро зуд бинед.

Маълумотномаи API-ро кушоед