التكامل مع Flutter مع ملكية الحاوية الصريحة.

ProviderScope يمكن أن يمتلك حاوية أو يستلم واحدة خارجيًا. تتيح واجهات برمجة التطبيقات للمستهلك الحفاظ على توافق الوصول إلى WidgetRef مع كود Riverpod.

نطاق المورد الملكية

ملكية الحاوية، مسؤولية التخلص.

الحاوية الداخلية

ProviderScope(طفل: ...) يتم التخلص منه تلقائيًا

الحاوية الخارجية

ProviderScope(حاوية: c، ...) يتطلب c.dispose() من قبل المستدعي

نطاق غير مُتحكم فيه

النطاق غير الخاضع للرقابة لـ Provider لا يقوم بإلغاء تجميع الحاوية

المفترق الشائع

في اختبارات المكون، يرجى تذكر التخلص من حاوية Provider المُدخلة خارجيًا لتجنب تسربات مؤقت.

خيارات المستهلك

All الخيارات تعرض WidgetRef؛ اختر حسب نمط المكون و احتياجات الحالة المحلية.

جذر التطبيق

متى يتم استخدام كل منها

المستهلك: كتلة بناء محلية للمناطق الصغيرة التفاعلية.
ConsumerWidget: مكون غير حالي مع بناء(السياق، مرجع).
ConsumerStatefulWidget: مكون حالي مع مرجع داخل ConsumerState.

مثال: ConsumerStatefulWidget

استخدم ConsumerState عندما تحتاج إلى كل من WidgetRef وحالة واجهة المستخدم المحلية القابلة للتعديل.

class class extends ConsumerStatefulWidget {
  const HomePage({super.key});

  @override
  ConsumerState<HomePage> createState() => _HomePageState();
}

class _HomePageState extends ConsumerState<HomePage> {
  bool expanded = false;

  @override
  Widget build(BuildContext context) {
    final user = ref.watch(currentUser);
    return Column(
      children: [
        Text('$user'),
        Switch(
          value: expanded,
          onChanged: (v) => setState(() => expanded = v),
        ),
      ],
    );
  }
}
جدولة عمليات إعادة البناء الداخلية للمستهلك لعمليات ما بعد الإطار، مما يقلل من مشكلات الحالة أثناء البناء.
استخدم WidgetRef.watch فقط للقيم التي يجب أن تؤدي إلى إعادة البناء.
احتفظ بالتأثيرات خارج البناء؛ استخدم استدعاءات الدالة ووسائل الاستدعاء والتحديث.

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

Provider

التحقق من دورة حياة الحاوية، والإعدادات المخصصة، والتحديثات غير المتزامنة في اختبارات الوحدة والمكونات.

قيد الاختبار

StateProvider

راجع توقيعات طرق ProviderScope و WidgetRef والحاوية.

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