flow ການຂຽນຍັງຄົງຊັດເຈນ.

ກຳນົດ mutations ເປັນ provider methods, ຕິດຕາມສະຖານະດ້ວຍ MutationToken, ແລະດຳເນີນຜ່ານ ref.invoke(call).

ບລັອກກໍ່ສ້າງຂອງ mutation

mutation ແມ່ນ 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)

ໝາຍເຫດ

ຕ່າງຈາກ APIs ແນວ notifier.method(), miniriverpod ເຮັດໃຫ້ mutation execution ເປັນ call object ຊັ້ນຕົ້ນ.

ເຮັດວຽກ mutation

ກຳລັງ ref.invoke ໃຊ້ງານ ເພື່ອໃຫ້ອາກອບການຍົກເລີກ ແລະ drop ປາກົດຊັດແກ່ຜູ້ເອີ້ນ.

ໄລຍະທາງ (Run)

ຕົວເລືອກ 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 update + restart

ແນວທາງການຂຽນທົ່ວໄປອັບເດດ AsyncData ແບບ optimistically ແລ້ວ sync ກັບຄຳຕອບຈາກ 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

ເຊື່ອມສະຖານະ mutation ກັບ UI ດ້ວຍ ConsumerWidget ຫຼື ConsumerStatefulWidget.

ເປີດ Flutter API

API Reference

ທົບທວນ invoke, mutation, mutate, ແລະ MutationState ຢ່າງຮວບຮວມ.

ເປີດ API Reference