Write flow يظل واضحًا.

حدد التغييرات كطرق للمزود، وراقب الحالة باستخدام MutationToken، وقم بتنفيذها من خلال ref.invoke(call).

لبنات التغيير

تغيير هو استدعاء `Call<R, State>` يتم إرجاعه من `mutate(token, body, concurrency: ...)`.

رمز

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

التنفيذ

انتظر استدعاء ref.invoke(provider.rename(...))

الحالة

قيد الانتظار / نشط / ناجح / خطأ عبر ref.watch(token)

ملاحظة

على عكس واجهات برمجة التطبيقات مثل notifier.method()، يجعل miniriverpod من تنفيذ التغييرات عملية أولية.

تنفيذ تغيير

استخدم ref.invoke لإظهار سلوك الإلغاء والسقوط إلى المستدعي.

تشغيل

خيارات التزامن

تشغيل متزامن: تشغيل جميع المكالمات بالتوازي (افتراضي).
الصفوف: FIFO؛ الحفاظ على تشغيل المكالمات في قائمة الانتظار حتى بعد حدوث خطأ.
إعادة التشغيل: إلغاء التشغيل السابق، والحفاظ على أحدث مكالمة.
إسقاط أحدث مكالمة: إسقاط المكالمات الواردة أثناء تشغيل مكالمة واحدة.

تحديث إيجابي + إعادة تشغيل

نمط كتابة شائع يقوم بتحديث 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,
  );
}
إعادة التشغيل قد تؤدي إلى حدوث CancelledMutation للمستدعين القدامى.
قد يسبب dropLatest خطأ DroppedMutation أثناء العمل.
التقاط هذه في واجهة المستخدم عندما تريد إلغاء تفعيل أخطاء الإلغاء المؤقت.

الخطوات التالية

قراءة المزودين

ربط حالة التغيير بواجهة المستخدم باستخدام ConsumerWidget أو ConsumerStatefulWidget.

افتح واجهة برمجة تطبيقات فلاتر

StateProvider

راجع أنواع Review invoke، mutation، mutate، و MutationState بسرعة.

مرجع واجهة برمجة التطبيقات المفتوحة