جریان نوشتن همچنان صریح می‌ماند.

mutationها را به‌عنوان متدهای provider تعریف کنید، وضعیت را با 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)

نکته

برخلاف APIهای سبک notifier.method()، miniriverpod اجرای mutation را به یک call object درجه‌اول تبدیل می‌کند.

اجرای یک mutation

از ref.invoke استفاده کنید تا رفتارهای لغو و drop برای فراخواننده آشکار شوند.

اجرا

گزینه‌های همزمانی

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 به‌روزرسانی می‌کند و سپس با پاسخ سرور همگام می‌شود.

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 را با ConsumerWidget یا ConsumerStatefulWidget به UI وصل کنید.

باز کردن Flutter API

API Reference

typeهای invoke، mutation، mutate و MutationState را سریع مرور کنید.

باز کردن API Reference