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,
);
}
الخطوات التالية
قراءة المزودين
ربط حالة التغيير بواجهة المستخدم باستخدام ConsumerWidget أو ConsumerStatefulWidget.
افتح واجهة برمجة تطبيقات فلاترStateProvider
راجع أنواع Review invoke، mutation، mutate، و MutationState بسرعة.
مرجع واجهة برمجة التطبيقات المفتوحة