BlocProvider

❌ لا، ما يكفي 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
عدة CubitsMultiBlocProvider
تريد تنظيمMultiBlocProvider أفضل

إذا حاب نكمل المستوى الأعلى 🔥