🔹 ما هي 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
إذا فهمته صح:
- الكود يصير نظيف
- التطبيق يصير أسرع
- التطوير يصير أسهل بكثير