State Management

🔹 ما هي State Management في Flutter؟

ببساطة:
هي الطريقة التي تدير بها البيانات (الحالة) داخل التطبيق وكيف تتغير وتنعكس على الواجهة (UI).

في Flutter، كل شيء عبارة عن Widgets، وهذه الـ Widgets تعتمد على State (الحالة).
لما تتغير الحالة → الواجهة تتحدث تلقائياً.

🔸 مثال بسيط

تخيل عندك زر + عداد:

  • تضغط الزر ➜ الرقم يزيد
  • الرقم هذا هو State
  • تحديث الرقم هو State Change

🔹 لماذا نحتاج State Management؟

بدون إدارة حالة:

  • الكود يصبح فوضوي
  • صعب تتبع التغييرات
  • إعادة استخدام الكود تكون ضعيفة
  • الأداء يتأثر

🔸 فوائد State Management

✅ 1. تنظيم الكود

تفصل بين:

  • منطق التطبيق (Logic)
  • واجهة المستخدم (UI)

✅ 2. سهولة الصيانة

لو صار خطأ، تعرف وين تبحث بسرعة.

✅ 3. تحسين الأداء

بدل إعادة بناء كل الواجهة، يتم تحديث الأجزاء فقط.

✅ 4. قابلية التوسع (Scalability)

مهم جداً في المشاريع الكبيرة.

✅ 5. إعادة الاستخدام

تقدر تستخدم نفس المنطق في أكثر من مكان.

🔹 أنواع State في Flutter

1. 🔸 Local State (حالة محلية)

  • داخل Widget واحد فقط
  • تستخدم غالباً مع:
    • StatefulWidget

📌 مثال: عداد بسيط

2. 🔸 Global State (حالة عامة)

  • تستخدم في أكثر من شاشة
  • مثل:
    • بيانات المستخدم
    • الثيم
    • اللغة

🔹 أشهر طرق State Management في Flutter

هنا أهم الطرق (مرتبة من الأبسط للأكثر احترافية):

1. 🟢 setState

  • أبسط طريقة
  • مدمجة داخل Flutter

📌 تستخدم في:

  • التطبيقات الصغيرة

❌ عيوب:

  • غير مناسبة للمشاريع الكبيرة

2. 🟡 Provider

  • سهل التعلم
  • مدعوم رسمياً من Flutter

📌 مناسب:

  • المشاريع المتوسطة

3. 🟠 Riverpod

  • تطوير لـ Provider
  • أكثر أماناً ومرونة

📌 مميزاته:

  • لا يعتمد على BuildContext
  • أسهل في الاختبار

4. 🔵 BLoC (Business Logic Component)

  • يعتمد على Streams
  • يفصل المنطق تماماً عن الواجهة

📌 مناسب:

  • المشاريع الكبيرة جداً

📌 مكتبة:

  • flutter_bloc

5. 🟣 Cubit (جزء من BLoC)

  • أبسط من BLoC
  • لا يستخدم Streams مباشرة

📌 مناسب:

  • بداية قوية بدون تعقيد

6. 🔴 GetX

  • سريع وسهل
  • يحتوي على:
    • State Management
    • Routing
    • Dependency Injection

❌ عيب:

  • يعتمد على أسلوب خاص (قد لا يناسب الجميع)

🔹 مقارنة سريعة

الطريقةالسهولةالقوةمناسب لـ
setState⭐⭐⭐⭐صغير
Provider⭐⭐⭐⭐⭐⭐متوسط
Riverpod⭐⭐⭐⭐⭐⭐⭐⭐متوسط-كبير
Cubit⭐⭐⭐⭐⭐⭐⭐متوسط
BLoC⭐⭐⭐⭐⭐⭐⭐كبير
GetX⭐⭐⭐⭐⭐⭐⭐⭐سريع

🔹 متى أستخدم كل نوع؟

  • تطبيق بسيط ➜ setState
  • متوسط ➜ Provider أو Riverpod
  • كبير ➜ Cubit أو BLoC

🔥 خلاصة

State Management هو:

قلب التطبيق في Flutter

إذا فهمته صح:

  • الكود يصير نظيف
  • التطبيق يصير أسرع
  • التطوير يصير أسهل بكثير