❌ لا، ما يكفي BlocProvider واحد إذا عندك أكثر من Cubit
✅ تستخدم أكثر من BlocProvider (وغالبًاMultiBlocProvider)
خليني أوضح لك بالتفصيل 👇
🧩 لماذا لا يكفي BlocProvider واحد؟
لأن:
BlocProvider(
create: (context) => CounterCubit(),
)
👉 هذا يوفر Cubit واحد فقط
فلو عندك:
- CounterCubit
- PostCubit
- ProductCubit
❌ لا يمكن وضعهم داخل BlocProvider واحد
✅ الحل الصحيح: MultiBlocProvider
🔧 الشكل
MultiBlocProvider(
providers: [
BlocProvider(create: (context) => CounterCubit()),
BlocProvider(create: (context) => PostCubit()),
BlocProvider(create: (context) => ProductCubit()),
],
child: MyApp(),
)
🧠 ماذا يحدث هنا؟
👉 يتم إنشاء عدة Cubits
👉 ويتم توفيرهم جميعًا داخل الشجرة
MultiBlocProvider
↓
CounterCubit
PostCubit
ProductCubit
↓
كل Widgets تقدر تستخدمهم
📥 كيف تستخدم كل Cubit؟
🔹 CounterCubit
context.read<CounterCubit>().increment();
🔹 PostCubit
context.read<PostCubit>().fetchPosts();
🔹 داخل BlocBuilder
BlocBuilder<PostCubit, PostState>(
builder: (context, state) {
return Text("Posts");
},
)
🔥 هل يمكن بدون MultiBlocProvider؟
نعم، لكن بشكل متداخل 👇
BlocProvider(
create: (_) => CounterCubit(),
child: BlocProvider(
create: (_) => PostCubit(),
child: BlocProvider(
create: (_) => ProductCubit(),
child: MyApp(),
),
),
)
❌ هذا يعمل، لكنه:
- غير نظيف
- صعب القراءة
💡 متى أستخدم MultiBlocProvider؟
✅ عندما يكون عندك:
- أكثر من Cubit
- في نفس المستوى (Global أو صفحة معينة)
🎯 أين أضعه؟
🔹 غالبًا في main.dart
void main() {
runApp(
MultiBlocProvider(
providers: [
BlocProvider(create: (_) => CounterCubit()),
BlocProvider(create: (_) => PostCubit()),
],
child: MyApp(),
),
);
}
🔹 أو داخل صفحة معينة
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => MultiBlocProvider(
providers: [
BlocProvider(create: (_) => ProductCubit()),
],
child: ProductPage(),
),
),
);
⚠️ ملاحظة مهمة جدًا
👉 كل Cubit يجب أن يكون له Provider خاص فيه
لكن:
ممكن تجمعهم باستخدام MultiBlocProvider
🧠 تشبيه بسيط
تخيل:
- Cubit = خدمة (Service)
- BlocProvider = عامل يقدم الخدمة
لو عندك:
- كهربائي ⚡
- سباك 🚿
- نجار 🪵
❌ ما ينفع عامل واحد لكل شيء
✅ تحتاج عدة عمال → MultiBlocProvider
💥 الخلاصة
| الحالة | الحل |
|---|---|
| Cubit واحد | BlocProvider |
| عدة Cubits | MultiBlocProvider |
| تريد تنظيم | MultiBlocProvider أفضل |
إذا حاب نكمل المستوى الأعلى 🔥