Arabic flag
Arabic
Select a Language
Arabic flag
Arabic
English flag
English
$
USD
Select a Currency
United States Dollar
$
Egypt Pound
ج.م.
Saudi Arabia Riyal
ر.س.
United Arab Emirates dirham
د.إ.
Oman Rial
.ر.ع
0
دورة Flutter: أساسيات تطوير التطبيقات

دورة Flutter: أساسيات تطوير التطبيقات

تعلّم بناء تطبيقات Flutter من الصفر، بدءًا من تصميم الواجهات وحتى إدارة البيانات والتعامل مع واجهات البرمجة.
0 طلاب
76 Lectures
Ammar Ahmed
Ammar Ahmed

Instructor

ماذا ستتعلم؟

بناء واجهات مستخدم احترافية باستخدام أشهر Widgets في Flutter.
التنقل بين الشاشات باستخدام Bottom Navigation Bar وTabBar.
تصميم واجهات عملية تضم القوائم، والصور، والعناصر التفاعلية المختلفة.
فهم البرمجة غير المتزامنة باستخدام Future وStream وasync وawait.
التعامل مع البيانات القادمة من واجهات API وعرضها داخل التطبيق.
حفظ واسترجاع البيانات محليًا باستخدام Shared Preferences.
إدارة الحالة باستخدام Cubit وBloc وفهم دورة حياة الـ State.
استخدام BlocProvider وBlocBuilder وBlocListener وBlocConsumer في التطبيقات العملية.
بناء تطبيقات تعتمد على بيانات حقيقية مع معالجة حالات التحميل والنجاح والخطأ.
تنظيم المشروع وفصل منطق التطبيق عن واجهة المستخدم لكتابة كود أكثر قابلية للتطوير.

About This Course

قد يكون تعلم Flutter من مصادر متفرقة سببًا في صعوبة ربط المفاهيم ببعضها، فتتعلم تصميم الواجهات في مكان، وإدارة الحالة في مكان آخر، دون أن ترى كيف تجتمع هذه الأجزاء داخل تطبيق حقيقي. لذلك صُممت هذه الدورة لتقدم لك مسارًا عمليًا ومنظمًا يجمع أهم أساسيات Flutter في مكان واحد.

كورس عملي يضم 76 حلقة، يتدرج بك من تصميم واجهات المستخدم إلى التعامل مع البيانات، وإدارة الحالة باستخدام Cubit، وربط التطبيقات بواجهات API من خلال تطبيقات عملية.

خلال الدورة ستتعلم بناء واجهات المستخدم باستخدام أشهر Widgets، والتنقل بين الشاشات، واستخدام عناصر مثل Bottom Navigation Bar وTabBar، ثم تنتقل إلى البرمجة غير المتزامنة لفهم Future وStream وasync وawait وكيفية التعامل مع العمليات التي تستغرق وقتًا.

كما ستتعرف إلى إدارة الحالة باستخدام Cubit وBloc، وتتعلم حل مشكلات setState، وفصل منطق التطبيق عن واجهة المستخدم، بالإضافة إلى التعامل مع Shared Preferences لحفظ البيانات محليًا، وجلب البيانات من API وعرضها داخل التطبيق بطريقة احترافية.

صُممت هذه الدورة لكل من أنهى أساسيات لغة Dart ويريد الانتقال إلى تطوير التطبيقات باستخدام Flutter بصورة عملية، ولكل من يمتلك معرفة أولية بـ Flutter لكنه لا يزال يجد صعوبة في بناء تطبيقات متكاملة أو فهم البرمجة غير المتزامنة وإدارة الحالة وربط التطبيقات بواجهات API. كما تُعد خيارًا مناسبًا إذا كنت تبحث عن أساس قوي ومنظم يؤهلك للانتقال إلى الموضوعات الأكثر تقدمًا، مثل التصميم المتجاوب وFirebase وتطوير التطبيقات الاحترافية.

المتطلبات

الإلمام بأساسيات لغة Dart والتعامل مع الدوال والمتغيرات والتحكم في سير البرنامج.
فهم أساسيات البرمجة كائنية التوجه (OOP) في لغة Dart.
تثبيت Flutter SDK وإعداد بيئة التطوير بصورة صحيحة.
القدرة على تشغيل مشاريع Flutter على محاكي أو جهاز حقيقي.
معرفة أولية باستخدام Visual Studio Code أو Android Studio.
الاستعداد لتطبيق الأمثلة العملية وتنفيذ التمارين أثناء متابعة الدورة.
المتطلبات

التعليمات

Check the frequently asked questions about this course.

هل تركز الدورة على تصميم واجهات Flutter فقط؟
لا. تبدأ الدورة ببناء واجهات المستخدم، لكنها تمتد إلى موضوعات أساسية يحتاج إليها أي مطور Flutter، مثل التنقل بين الشاشات، والبرمجة غير المتزامنة، وإدارة الحالة باستخدام Cubit وBloc، والتعامل مع البيانات المحلية وواجهات API.
هل سأتعلم التعامل مع واجهات API داخل Flutter؟
نعم، ستتعلم كيفية إرسال طلبات HTTP، واستقبال البيانات من واجهات البرمجة، وتحويل بيانات JSON إلى هياكل يمكن التعامل معها داخل التطبيق، ثم عرضها في واجهة المستخدم باستخدام FutureBuilder وإدارة الحالة باستخدام Cubit.
هل تتناول الدورة البرمجة غير المتزامنة بصورة عملية؟
نعم. ستتعرف عمليًا على مفاهيم Future وStream وasync وawait وFutureBuilder وStreamBuilder، مع تطبيقات توضح كيفية التعامل مع العمليات التي تستغرق وقتًا، مثل جلب البيانات من الإنترنت وقراءة قواعد البيانات.
هل سأتعلم إدارة الحالة باستخدام Cubit من البداية؟
نعم. تبدأ الدورة بشرح المشكلات التي تظهر عند الاعتماد على setState، ثم تنتقل إلى شرح Cubit وBloc بصورة تدريجية، مع توضيح كيفية استخدام BlocProvider وBlocBuilder وBlocListener وBlocConsumer وBlocObserver داخل تطبيقات عملية.
هل تعتمد الدورة على التطبيقات العملية أم الشرح النظري؟
تعتمد الدورة على التطبيق العملي بشكل أساسي. فكل مفهوم جديد يتم شرحه من خلال مثال أو مشروع مصغر، مثل بناء واجهات متعددة، وحفظ البيانات باستخدام Shared Preferences، وجلب البيانات من API، وتطبيق إدارة الحالة على مشروع عملي.
هل سأتعلم حفظ البيانات داخل التطبيق؟
نعم. تتناول الدورة استخدام Shared Preferences لحفظ البيانات محليًا واسترجاعها، مع توضيح متى يكون هذا الحل مناسبًا، وكيفية استخدامه مع مفاهيم البرمجة غير المتزامنة.
هل تساعدني الدورة على كتابة كود أكثر تنظيمًا؟
نعم. لا تقتصر الدورة على شرح الأدوات، بل تركز أيضًا على تنظيم المشروع، وفصل منطق التطبيق عن واجهة المستخدم، وتقليل الاعتماد على setState، وهو ما يجعل الكود أكثر قابلية للصيانة والتطوير.
ماذا سأكون قادرًا على تنفيذ بعد إنهاء الدورة؟
ستتمكن من بناء تطبيقات Flutter تعتمد على واجهات مستخدم متعددة، والتنقل بين الشاشات، والتعامل مع البيانات المحلية والخارجية، وربط التطبيقات بواجهات API، وإدارة الحالة باستخدام Cubit، وهي المهارات الأساسية التي تحتاج إليها قبل الانتقال إلى الموضوعات المتقدمة مثل Firebase أو التصميم المتجاوب أو بنية التطبيقات الاحترافية.
هل أحتاج إلى خبرة سابقة في Flutter قبل الالتحاق بهذه الدورة؟
يفضل أن تكون قد أنهيت أساسيات لغة Dart، لأن الدورة تركز على Flutter نفسه وتبني عليه، ولا تبدأ بشرح أساسيات البرمجة أو لغة Dart من الصفر.
هل يمكنني الاعتماد على هذه الدورة كأساس قبل دراسة الموضوعات المتقدمة؟
نعم. صُممت الدورة لتكون مرحلة تأسيسية متكاملة في Flutter، بحيث تمتلك بعد انتهائها فهمًا جيدًا لبناء الواجهات، والتعامل مع البيانات، وإدارة الحالة، وهو ما يسهل عليك الانتقال إلى التصميم المتجاوب، وFirebase، وClean Architecture، وغيرها من الموضوعات المتقدمة.

المتطلبات الأساسية

We recommend completing the prerequisites for more effective learning.

Ammar Ahmed
Ammar Ahmed
4 الدورات
0 طلاب
عمار أحمد عجيزة مطور تطبيقات Flutter ومدرب تقني حاصل على بكالوريوس علوم الحاسب والذكاء الاصطناعي من جامعة بنها. يمتلك خبرة عملية في تطوير التطبيقات متعددة المنصات باستخدام Flutter وDart، وعمل مع عدة شركات تقنية على تصميم وتطوير تطبيقات احترافية قابلة للتوسع والصيانة. شارك في تنفيذ مشاريع حقيقية في مجالات التعليم والتجارة الإلكترونية والخدمات الرقمية، كما يمتلك خبرة في Firebase وREST APIs وإدارة الحالة ...
Ammar Ahmed
Curriculum Overview

This course includes 9 modules, 76 lessons, and 0 hours of materials.

مقدمة في Flutter وبناء أول واجهة
7 أقسام
1. لماذا أصبحت Flutter الخيار المفضل لتطوير التطبيقات
مجانًا

قبل أن نبدأ، سأوضح لك لماذا أصبحت فلاتر من أكثر التقنيات انتشارًا في تطوير التطبيقات، وما الفرق بينها وبين تطوير التطبيقات بالطريقة التقليدية. كما ستتعرف على مفهوم الكروس بلاتفورم، ولماذا تعتمد الشركات عليه، ثم ننتقل إلى أبرز المزايا التي جعلت فلاتر خيارًا مفضلًا لدى كثير من المطورين والشركات.

مقدار -
2. إنشاء أول مشروع والتعرف على بنية Flutter
مجانًا

في هذه الحلقة سننشئ أول مشروع باستخدام Flutter، ثم آخذك في جولة سريعة داخل بيئة العمل لتتعرف على أهم أجزاء المشروع ووظيفة كل منها. كما سأوضح لك الملفات والمجلدات التي ستتعامل معها باستمرار خلال الكورس، حتى تبدأ رحلتك وأنت تمتلك تصورًا واضحًا عن بنية مشاريع Flutter.

مقدار -
3. فهم أساسيات Flutter قبل كتابة أول سطر برمجي
مجانًا

قبل أن نبدأ في كتابة الكود، سأشرح لك أهم المفاهيم التي ستعتمد عليها طوال رحلتك مع Flutter. ستتعرف على فكرة الـ Widgets وكيفية بناء واجهات التطبيق من خلالها، إلى جانب مفهوم Widget Tree، والفرق بين Stateless وStateful، حتى تصبح مستعدًا لتطبيق كل ذلك عمليًا في الحلقات القادمة.

مقدار -
4. كتابة أول واجهة باستخدام MaterialApp وScaffold

في هذه الحلقة سنبدأ بكتابة أول كود فعلي في مشروعنا، حيث سننشئ الهيكل الأساسي للتطبيق باستخدام MaterialApp وScaffold، ثم نبدأ بتنفيذ أول جزء من التصميم وهو شريط التطبيق (AppBar). كما سأوضح لك بعض المفاهيم المهمة التي ستستخدمها باستمرار أثناء تطوير تطبيقات Flutter، لتتمكن من متابعة تنفيذ الواجهة بثقة في الحلقات القادمة.

مقدار -
5. تنظيم المشروع وفصل الواجهات بطريقة احترافية

في هذه الحلقة سأوضح لك كيفية تنظيم المشروع من خلال فصل مكونات التطبيق إلى Widgets مستقلة، لتصبح الشيفرة أكثر ترتيبًا وأسهل في التطوير والصيانة. كما ستتعرف على مفهوم الـ Root Widget، وطريقة استخدام StatelessWidget في بناء الواجهات، إلى جانب بعض الاختصارات التي ستوفر عليك الوقت أثناء كتابة الكود.

مقدار -
6. التعامل مع Text Widget وأهم خصائصها

في هذه الحلقة سنتعمق في التعامل مع Text Widget، ونتعرف على أهم الخصائص التي تمنحك تحكمًا كاملًا في تنسيق النصوص ومحاذاتها وطريقة عرضها داخل الواجهة. كما سأوضح لك كيفية الاستفادة من الـ Documentation واكتشاف خصائص الـ Widgets، حتى تتمكن من تطبيقها بسهولة أثناء تطوير واجهاتك.

مقدار -
7. استخدام Column وترتيب العناصر داخل الواجهة

في هذا الدرس سأشرح لك كيفية استخدام Column لترتيب عدة عناصر فوق بعضها داخل واجهة التطبيق، مع توضيح الفرق بينه وبين Center، وكيفية التحكم في محاذاة العناصر وتوزيع المسافات بينها باستخدام MainAxisAlignment وCrossAxisAlignment، حتى تتمكن من تنفيذ تصميمات Figma بدقة.

مقدار -
بناء أول مشروع عملي
10 أقسام
8. استخدام Row لترتيب العناصر أفقياً

في هذه الحلقة سأشرح لك كيفية استخدام Row لوضع العناصر بجانب بعضها بطريقة صحيحة، مع توضيح الفرق بينها وبين Column، وكيفية التحكم في توزيع العناصر ومحاذاتها داخل الواجهة. كما سنتعرف على بعض الأدوات التي تساعدك على فهم طريقة توزيع المساحات، لتصبح قادرًا على بناء واجهات أكثر تنظيمًا.

مقدار -
9. إضافة الصور إلى التطبيق والتعامل مع Image Widget

في هذه الحلقة سأشرح لك كيفية إضافة الصور إلى مشروعك بدايةً من تصديرها من Figma، ثم تنظيمها داخل المشروع واستخدامها داخل الواجهة. كما ستتعرف على طرق عرض الصور المختلفة، وأهم الخصائص التي تساعدك على التحكم في حجمها وطريقة ظهورها بما يتناسب مع تصميم التطبيق.

مقدار -
10. استخدام CircleAvatar لعرض الصور الدائرية

في هذه الحلقة سأوضح لك كيفية استخدام CircleAvatar لعرض الصور داخل إطار دائري، مع التعرف على أهم الخصائص التي تساعدك على التحكم في حجمها ومظهرها. كما ستتعلم كيف تستخدمها مع الصور المحلية أو صور الإنترنت، وحتى مع النصوص والعناصر الأخرى داخل التطبيق.

مقدار -
11. تنسيق النصوص وإضافة المسافات داخل الواجهة

في هذه الحلقة سنواصل تنفيذ تصميم بطاقة الأعمال من خلال إضافة النصوص وتنسيقها بما يتوافق مع التصميم. كما سأوضح لك كيفية استخراج خصائص النصوص والمسافات من Figma، واستخدام SizedBox لإنشاء تباعد منظم بين عناصر الواجهة، لتصبح أقرب ما تكون إلى التصميم الأصلي.

مقدار -
12. إضافة الخطوط المخصصة وتطبيقها على المشروع

في هذه الحلقة سأوضح لك كيفية إضافة الخطوط المخصصة إلى مشروعك وربطها بالتطبيق، حتى تحصل على نفس المظهر الموجود في التصميم. كما ستتعرف على الطريقة الصحيحة لتطبيق الخط على جميع النصوص من مكان واحد، لتجنب تكرار الكود وجعل مشروعك أكثر تنظيمًا وسهولة في التعديل.

مقدار -
13. استخدام Divider لتنظيم عناصر الواجهة

في هذه الحلقة سأوضح لك كيفية استخدام Divider لإضافة فواصل بين عناصر الواجهة بطريقة احترافية، مع التعرف على أهم الخصائص التي تساعدك على التحكم في سمك الخط ولونه والمسافات المحيطة به، حتى تحصل على تصميم أكثر ترتيبًا وقربًا من النموذج الأصلي.

مقدار -
14. إنشاء مكونات قابلة لإعادة الاستخدام

في هذه الحلقة سأوضح لك كيف تجعل مشروعك أكثر تنظيمًا من خلال إنشاء مكونات قابلة لإعادة الاستخدام بدلًا من تكرار الكود. ستتعرف على كيفية تحويل العناصر المتكررة إلى Widgets مستقلة، وتمرير الخصائص إليها، لتسهّل عملية التعديل والصيانة مع نمو المشروع.

مقدار -
15. استخدام Container لبناء عناصر الواجهة

في هذه الحلقة سنستخدم Container لبناء أحد أهم أجزاء التصميم، حيث سنجمع الأيقونات والنصوص داخل عنصر واحد مع إضافة الخلفية والمسافات والتنسيقات اللازمة. كما سأوضح لك الفرق بين Margin وPadding، وكيفية استخدام BoxDecoration لإنشاء عناصر أكثر احترافية وقربًا من التصميم.

مقدار -
16. استخدام القيم الافتراضية لجعل المكونات أكثر مرونة

في هذه الحلقة سأوضح لك كيف تجعل المكونات القابلة لإعادة الاستخدام أكثر مرونة من خلال استخدام القيم الافتراضية. ستتعرف على طريقة تعيين لون افتراضي للنصوص مع إمكانية تغييره عند الحاجة، لتقلل تكرار الكود وتحافظ على سهولة تطوير المشروع وتعديله.

مقدار -
17. إنهاء تطبيق بطاقة الأعمال وتطبيق مبدأ إعادة الاستخدام

في هذه الحلقة سننهي تنفيذ تطبيق بطاقة الأعمال من خلال استكمال آخر عناصر الواجهة، ثم نعيد تنظيم الكود بتحويل الأجزاء المتكررة إلى مكونات قابلة لإعادة الاستخدام. وبذلك تنهي أول مشروع عملي لك، مع تطبيق عدد من أهم المفاهيم التي ستبني عليها مشاريعك القادمة.

مقدار -
بناء شاشة تسجيل الدخول
13 أقسام
18. إنشاء شاشة تسجيل الدخول وتنظيم ملفات المشروع

في هذه الحلقة سنبدأ العمل على مشروع جديد من خلال إنشاء شاشة تسجيل الدخول، مع إعادة تنظيم ملفات المشروع وفصل مكوناته بطريقة تسهّل تطويره وصيانته. كما ستتعرف على كيفية استخدام AppBar وإضافة العنوان والأيقونات وتخصيصها، لتضع الأساس الذي سنبني عليه بقية عناصر الشاشة التفاعلية.

مقدار -
19. التعرف على TextField وتخصيص حقول الإدخال

في هذه الحلقة سأعرفك على TextField، وهو أحد أهم العناصر التفاعلية في التطبيقات. سنتعلم كيفية إنشاء حقول إدخال مخصصة، واختيار نوع لوحة المفاتيح المناسب، وتنسيق الحقل باستخدام InputDecoration، مع التعرف على أبرز الخصائص التي تمنحك تحكمًا كاملًا في مظهره وسلوكه.

مقدار -
20. استكمال التعامل مع TextField وأهم خصائصه

في هذه الحلقة سنستكمل التعرف على أهم خصائص TextField، بدءًا من تخصيص مظهر حقل الإدخال، ووصولًا إلى التعامل مع تفاعل المستخدم أثناء الكتابة وبعد الانتهاء منها. كما ستتعرف على استخدام الأيقونات داخل الحقول، لتتمكن من إنشاء حقول إدخال أكثر احترافية وسهولة في الاستخدام.

مقدار -
21. إنشاء حقل كلمة المرور وإخفاء محتواه

في هذه الحلقة سنستكمل تنفيذ شاشة تسجيل الدخول بإضافة حقل كلمة المرور، مع التعرف على أهم الخصائص المستخدمة لإخفاء المحتوى وتأمينه أثناء الكتابة. كما ستتعلم كيفية تخصيص طريقة عرض الأحرف المخفية، لتجهيز الحقل للخطوة التالية وهي إضافة ميزة إظهار كلمة المرور وإخفائها.

مقدار -
22. التعامل مع الضغط على الأيقونات باستخدام IconButton

في هذه الحلقة ستتعرف على كيفية تحويل الأيقونات إلى عناصر تفاعلية باستخدام IconButton، وتنفيذ أوامر عند الضغط عليها أو الضغط المطول. كما سأجهز معك الأساس اللازم لتطبيق ميزة إظهار كلمة المرور وإخفائها في الحلقات التالية.

مقدار -
23. إظهار وإخفاء كلمة المرور في Flutter

في هذا الدرس سأشرح لك كيفية تنفيذ ميزة إظهار وإخفاء كلمة المرور داخل حقل الإدخال، مع توضيح سبب استخدام متغير من النوع Boolean لإدارة هذه الحالة. كما ستكتشف لماذا لا تتحدث واجهة المستخدم تلقائيًا عند تغيير قيمة المتغير داخل StatelessWidget، تمهيدًا للانتقال إلى الحل الصحيح في الدرس التالي.

مقدار -
24. التحويل إلى StatefulWidget واستخدام setState

في هذا الدرس سأشرح لك كيفية تحويل StatelessWidget إلى StatefulWidget، مع توضيح الفرق بينهما ودور كل جزء منهما. كما ستتعلم كيفية استخدام setState لتحديث واجهة المستخدم عند تغيير البيانات، وتطبيق ذلك عمليًا لإكمال ميزة إظهار وإخفاء كلمة المرور.

مقدار -
25. إنشاء زر تسجيل الدخول وتنسيقه

في هذه الحلقة سنتعرف على كيفية إنشاء زر تسجيل الدخول باستخدام ElevatedButton، ثم نبدأ بتخصيص شكله ليطابق التصميم من خلال التحكم في الألوان والحواف والمسافات والأبعاد. كما سأوضح لك كيفية استخدام Spacer لتوزيع العناصر داخل الواجهة بطريقة مرنة تناسب مختلف أحجام الشاشات.

مقدار -
26. استخدام TextButton وإضافة النصوص التفاعلية

في هذه الحلقة سنتعرف على كيفية استخدام TextButton لإضافة عناصر نصية قابلة للتفاعل داخل الواجهة، مثل رابط "Forgot Password?". كما سأوضح لك بعض الممارسات التي تساعد على تنظيم الكود وجعله أكثر وضوحًا، تمهيدًا للتعامل مع عناصر تفاعلية أكثر تقدمًا في الحلقات القادمة.

مقدار -
27. استخدام InkWell لجعل أي عنصر قابلاً للنقر

في هذه الحلقة ستتعرف على Widget مهمة تمنح أي عنصر داخل الواجهة إمكانية التفاعل مع المستخدم، دون الحاجة إلى استخدام الأزرار التقليدية. كما سأوضح لك كيفية استخدام InkWell مع عناصر مختلفة، والتحكم في مساحة النقر للحصول على تجربة استخدام أكثر احترافية.

مقدار -
28. استخدام IconButton للتحكم في إظهار كلمة المرور

في هذه الحلقة سأوضح لك كيفية استخدام IconButton لإضافة التفاعل إلى أيقونة حقل كلمة المرور، لتصبح قابلة للنقر وتنفيذ الأوامر. كما سنتعرف على أهم الخصائص المرتبطة بها، تمهيدًا لتطبيق ميزة إظهار كلمة المرور وإخفائها في الخطوة التالية.

مقدار -
29. تحسين تجربة المستخدم داخل حقول الإدخال

في هذه الحلقة سنجري مجموعة من التحسينات على حقول الإدخال لجعل تجربة الاستخدام أكثر احترافية وتناسقًا مع تصميم التطبيق. كما سأوضح لك كيفية تخصيص مظهر النص الذي يكتبه المستخدم ولون مؤشر الكتابة، مع تنفيذ بعض عمليات تنظيم الكود التي تسهّل تطوير المشروع وصيانته.

مقدار -
30. التحقق من صحة البيانات باستخدام TextFormField

في هذا الدرس سأشرح لك كيفية استخدام TextFormField للتحقق من صحة البيانات التي يُدخلها المستخدم قبل تنفيذ أي عملية. كما ستتعرف على كيفية استخدام Form وGlobalKey وvalidator لكتابة قواعد التحقق، مع تطبيق ذلك عمليًا على حقول البريد الإلكتروني وكلمة المرور، والتعرف على أساسيات استخدام Regex في عمليات التحقق المتقدمة.

مقدار -
التنقل بين الشاشات وإدارة الإدخال
10 أقسام
31. التنقل بين الشاشات باستخدام Navigator.push

بعد الانتهاء من التحقق من صحة بيانات تسجيل الدخول، جاء الوقت للتعرف على أول أسلوب للتنقل بين الشاشات في Flutter باستخدام Navigator.push. في هذه الحلقة ستتعلم كيفية فتح شاشة جديدة بعد نجاح عملية التحقق، وستفهم دور Navigator وMaterialPageRoute وBuilder، وكيفية ربط عملية تسجيل الدخول بالانتقال إلى صفحة أخرى بطريقة صحيحة ومنظمة.

مقدار -
32. الفرق بين Push وPushReplacement وPop في التنقل بين الشاشات

في هذه الحلقة ستتعرف على الأنواع الأساسية للتنقل بين الشاشات في Flutter، وستفهم الفرق بين Push وPushReplacement وPop من خلال مفهوم Stack، وكيف يؤثر كل أسلوب في تجربة المستخدم. كما ستتعلم متى تستخدم كل طريقة، ولماذا تُستخدم PushReplacement في شاشات تسجيل الدخول، مع تطبيق عملي يوضح الفرق بين الاحتفاظ بالشاشة الحالية واستبدالها بالكامل.

مقدار -
33. استخدام Navigator.pop والرجوع إلى الشاشة السابقة

في هذه الحلقة ستتعرف على طريقة استخدام Navigator.pop للعودة إلى الشاشة السابقة، وستفهم علاقته بمفهوم Stack وآلية التنقل بين الصفحات في Flutter. كما سأوضح لك الفرق العملي بين Push وPushReplacement وPop، وكيفية إنشاء زر رجوع مخصص والتحكم في سلوك التنقل داخل التطبيق.

مقدار -
34. تمرير البيانات بين الشاشات باستخدام الـ Constructor

في هذه الحلقة ستتعلم أول طريقة لتمرير البيانات بين الشاشات في Flutter، وذلك بالاعتماد على الـ Constructor. سأوضح لك كيفية استقبال البيانات داخل الشاشة الجديدة، وتمريرها أثناء عملية التنقل، ثم استخدامها لعرض محتوى ديناميكي بدلًا من القيم الثابتة، تمهيدًا للتعامل مع بيانات المستخدم الحقيقية في الخطوات التالية.

مقدار -
35. استخدام TextEditingController للتعامل مع بيانات الإدخال

في هذه الحلقة ستتعرف على TextEditingController ودوره في التحكم ببيانات حقول الإدخال داخل التطبيق. سأوضح لك كيفية قراءة النص الذي يكتبه المستخدم، وتعديله أو مسحه برمجيًا، ثم استخدام هذه البيانات الحقيقية بدلًا من القيم الثابتة، تمهيدًا لربطها بعمليات تسجيل الدخول والتنقل بين الشاشات.

مقدار -
36. استخدام SingleChildScrollView لحل مشكلات التمرير

في هذه الحلقة ستتعرف على SingleChildScrollView ودورها في جعل الواجهات قابلة للتمرير عند زيادة المحتوى أو ظهور لوحة المفاتيح. كما سأوضح لك كيفية استخدامها مع Column وRow، والتحكم في اتجاه التمرير، لتتجنب مشكلات Overflow وتوفر تجربة استخدام أكثر سلاسة داخل تطبيقاتك.

مقدار -
37. التعرف على ListView واستخدامها في إنشاء القوائم

في هذه الحلقة ستتعرف على ListView كأحد أهم عناصر التمرير في Flutter، وستفهم متى يمكن استخدامها بدلًا من SingleChildScrollView مع Column، وكيفية التحكم في اتجاه التمرير داخلها. كما سأقدم لك تمهيدًا لأنواع ListView المختلفة، ولماذا يُعد اختيار النوع المناسب منها مهمًا لتحسين أداء التطبيق.

مقدار -
38. التعرف على SingleChildScrollView ودعم التمرير داخل الواجهات

في هذه الحلقة ستتعرف على SingleChildScrollView ودورها في حل مشكلات Overflow وجعل الواجهات قابلة للتمرير بسلاسة. كما سأوضح لك أهم حالات استخدامها مع Column وRow وحقول الإدخال، وكيفية التحكم في اتجاه التمرير وسلوكه لتحسين تجربة المستخدم داخل التطبيق.

مقدار -
39. إنشاء حقل إدخال قابل لإعادة الاستخدام (Reusable TextFormField)

في هذه الحلقة ستتعلم كيفية إنشاء مكون إدخال (Reusable TextFormField) يمكن إعادة استخدامه في جميع أجزاء التطبيق، مع دعم تمرير الخصائص المختلفة مثل Controller ونوع لوحة المفاتيح ورسائل التحقق من صحة البيانات، بالإضافة إلى التعامل مع حقول كلمة المرور وإظهارها أو إخفائها باستخدام مكون واحد مرن يسهل تطويره وصيانته ويقلل تكرار الكود وفق مبدأ DRY.

مقدار -
40. تمرير البيانات بين الشاشات

في هذه الحلقة ستتعلم كيف تستفيد من المكونات القابلة لإعادة الاستخدام (Reusable Components) لإجراء التعديلات من مكان واحد فقط، ثم ستتعرف على كيفية تمرير بيانات الاسم والوظيفة ورقم الهاتف من شاشة تسجيل الدخول إلى شاشة بطاقة الأعمال باستخدام الـ Controllers والـ Constructor، مع استبدال البيانات الثابتة بالبيانات التي يُدخلها المستخدم وعرضها داخل الواجهة.

مقدار -
القوائم وعرض البيانات
10 أقسام
41. استخدام ListTile لبناء عناصر القوائم في Flutter

في هذه الحلقة ستتعرف على Widget ‏ListTile وكيفية استخدامها لبناء عناصر القوائم بطريقة احترافية مع تقليل كمية الكود، كما ستتعلم الفرق بينها وبين استخدام Row التقليدي، وكيفية الاستفادة من الأجزاء الجاهزة مثل العنوان والعنوان الفرعي والعناصر الجانبية، بالإضافة إلى دعم النقر على العنصر بالكامل لبناء صفحات المستخدم والإعدادات والقوائم المشابهة بسهولة.

مقدار -
42. استخدام ListView.builder لإنشاء القوائم

في هذه الحلقة ستتعلم كيفية استخدام ListView.builder لبناء قوائم ديناميكية بكفاءة عالية، مع تحويل عناصر ListTile إلى مكونات قابلة لإعادة الاستخدام، والاعتماد على القوائم والمؤشرات لعرض البيانات تلقائيا بدلا من تكرار الكود، كما ستتعرف على الفرق في الأداء بين ListView العادية وListView.builder ولماذا يعد الأخير الخيار الأفضل عند التعامل مع عدد كبير من العناصر.

مقدار -
43. استخدام ListView.separated لإضافة فواصل بين عناصر القائمة

في هذه الحلقة ستتعلم كيفية استخدام ListView.separated لإنشاء قوائم تحتوي على فواصل أو مسافات بين العناصر، مع التعرف على دور separatorBuilder وكيفية استخدامه لإضافة Divider أو أي مكون مخصص بين عناصر القائمة، بالإضافة إلى فهم الفرق بين ListView.builder وListView.separated والتعرف على أسلوب كتابة الدوال المختصر (Arrow Function) لتنظيم الكود بصورة أفضل.

مقدار -
44. فهم shrinkWrap وإدارة التمرير داخل ListView

في هذه الحلقة ستتعرف على وظيفة الخاصية shrinkWrap داخل ListView، ومتى تحتاج إلى استخدامها عند وضع القائمة داخل عناصر أخرى مثل Column، كما ستفهم تأثيرها على الأداء، والفرق بينها وبين استخدام Expanded، وكيفية التعامل مع تعارض التمرير بين العناصر الأب والابن للوصول إلى واجهات أكثر كفاءة وتنظيماً.

مقدار -
45. استخدام Floating Action Button

في هذه الحلقة ستتعرف على عنصر Floating Action Button وكيفية إضافته داخل Scaffold، مع تخصيص شكله وموقعه باستخدام الخصائص المختلفة مثل الأيقونة والألوان وموضع الزر. كما ستتعلم كيفية استخدام أكثر من زر عائم في الوقت نفسه من خلال دمجه مع عناصر مثل Column، لتفهم كيف يمكن تركيب مكونات Flutter معًا لبناء واجهات أكثر مرونة واحترافية.

مقدار -
46. استخدام Badge Widget

في هذه الحلقة ستتعرف على Badge Widget وكيفية استخدامها لإظهار شارة صغيرة فوق أي عنصر في الواجهة، مثل عرض عدد الإشعارات أو العناصر داخل سلة التسوق. كما ستتعلم كيفية إضافة محتوى الشارة باستخدام label، وتخصيص مظهرها من خلال تغيير حجم النص والألوان وبعض خصائص التنسيق الأساسية للحصول على تصميم يتوافق مع واجهة التطبيق.

مقدار -
47. استخدام GridView

في هذه الحلقة ستتعرف على GridView وكيفية استخدامها لعرض العناصر في شبكة بدلاً من قائمة، مع التحكم في عدد العناصر داخل كل صف باستخدام Cross Axis Count. كما ستتعلم كيفية ضبط المسافات بين العناصر والصفوف، وتحديد أبعاد كل عنصر باستخدام Child Aspect Ratio، بالإضافة إلى التعرف على أهم خصائص GridView مثل اتجاه التمرير وPadding، تمهيدًا للانتقال إلى GridView.builder في الحلقة القادمة.

مقدار -
48. استخدام GridView.builder

في هذه الحلقة ستتعرف على GridView.builder وكيفية استخدامها لعرض عدد كبير من العناصر بكفاءة أعلى، من خلال بناء العناصر الظاهرة على الشاشة فقط. كما ستتعلم كيفية استخدام itemBuilder وitemCount مع القوائم الديناميكية، والاستفادة من index لعرض بيانات مختلفة لكل عنصر، مما يساعد على تحسين أداء التطبيق عند التعامل مع أعداد كبيرة من العناصر.

مقدار -
49. بناء GridView باستخدام البيانات الوهمية

في هذه الحلقة ستتعلم كيفية بناء شاشة GridView اعتمادًا على بيانات ديناميكية بدلًا من العناصر الثابتة، من خلال إنشاء نموذج (Model) يحتوي على بيانات الفئة مثل الصورة والعنوان وعدد الكتب، ثم استخدام قائمة من البيانات الوهمية لعرض المحتوى داخل GridView.builder. كما ستتعرف على ربط الصور والبيانات بعناصر الواجهة، وتنظيم مكونات كل عنصر للوصول إلى تصميم مرن يسهل استبداله لاحقًا بالبيانات الحقيقية القادمة من قاعدة البيانات أو واجهات البرمجة.

مقدار -
50. إعادة هيكلة GridView وتنظيم المشروع

في هذه الحلقة ستتعلم كيفية إعادة هيكلة شاشة GridView بعد اكتمال بنائها، من خلال فصل نموذج البيانات (Model)، واستخراج عناصر الواجهة إلى مكونات قابلة لإعادة الاستخدام، وتنظيم الملفات داخل المشروع. كما ستتعرف على أفضل الممارسات لتمرير الكائنات (Models) إلى المكونات بدلاً من الاعتماد على الفهرس، مما يجعل الكود أكثر تنظيماً وأسهل في التطوير والصيانة مستقبلاً.

مقدار -
بناء واجهات أكثر احترافية
6 أقسام
51. استخدام Stack لبناء العناصر المتراكبة

في هذه الحلقة ستتعرف على Widget ‏Stack وكيفية استخدامها لوضع عدة عناصر فوق بعضها البعض، مثل عرض نص أو شارة فوق صورة. كما ستتعلم ترتيب العناصر داخل Stack، وتأثير ترتيبها على الواجهة، وإضافة مسافات وتنسيقات بسيطة للوصول إلى تصميم قريب من النموذج، تمهيدًا لتعلم كيفية التحكم في مواضع العناصر داخل Stack في الحلقة القادمة.

مقدار -
52. استخدام Align لمحاذاة العناصر داخل Stack

في هذه الحلقة ستتعرف على Widget ‏Align وكيفية استخدامها مع Stack لمحاذاة العناصر في أماكن مختلفة مثل أعلى أو أسفل أو يمين أو يسار المكون. كما ستتعلم التحكم في موضع النصوص والعناصر المتراكبة باستخدام خيارات المحاذاة الجاهزة، وتتعرف على حدود Align، ولماذا نحتاج إلى Widgets أخرى عندما نريد تحديد موضع عنصر بدقة أكبر داخل الواجهة.

مقدار -
53. استخدام Positioned لتحديد موضع العناصر داخل Stack

في هذه الحلقة ستتعرف على Widget ‏Positioned وكيفية استخدامها مع Stack لوضع العناصر في أماكن محددة بدقة داخل الواجهة. ستتعلم الفرق بينها وبين Align، وكيفية التحكم في المسافات من الأعلى والأسفل واليمين واليسار، بالإضافة إلى طريقة استخراج هذه القيم من التصميم في Figma للحصول على واجهات مطابقة للتصميم الأصلي.

مقدار -
54. التعرف على Bottom Navigation Bar وإنشاء شريط التنقل السفلي

في هذه الحلقة ستتعرف على Widget ‏Bottom Navigation Bar وكيفية استخدامها لإنشاء شريط تنقل سفلي يتيح الانتقال بين صفحات التطبيق. ستتعلم كيفية إضافة عناصر التنقل باستخدام BottomNavigationBarItem، وتخصيص الأيقونات والعناوين والألوان، مع التعرف على أهم الخصائص التي تمهد لربط الشريط بالتنقل بين الشاشات في الفيديوهات القادمة.

مقدار -
55. التنقل بين الصفحات باستخدام Bottom Navigation Bar

في هذه الحلقة ستتعلم كيفية تفعيل التنقل بين صفحات التطبيق باستخدام Bottom Navigation Bar، وذلك من خلال تحويل الشاشة إلى Stateful Widget واستخدام setState لتحديث واجهة المستخدم. كما ستتعرف على آلية عرض الصفحات بالاعتماد على Current Index وقائمة الشاشات، بالإضافة إلى تخصيص بعض خصائص شريط التنقل السفلي وتنفيذ مهمة عملية لإضافة تبويب جديد وربطه بشاشة مستقلة.

مقدار -
56. استخدام TabBar للتنقل بين الصفحات

في هذه الحلقة ستتعرف على Widget ‏TabBar وكيفية استخدامها لإنشاء تبويبات للتنقل بين صفحات التطبيق من أعلى الشاشة. ستتعلم كيفية إعداد DefaultTabController وربط TabBar مع TabBarView، وإضافة تبويبات جديدة، بالإضافة إلى تخصيص مظهرها من خلال أهم الخصائص، مع التعرف على أفضل الممارسات لاستكشاف خصائص Widgets والاعتماد على التوثيق الرسمي أثناء التطوير.

مقدار -
البرمجة غير المتزامنة
10 أقسام
57. مقدمة إلى البرمجة غير المتزامنة في Dart

في هذه الحلقة ستتعرف على مفهوم البرمجة غير المتزامنة (Asynchronous Programming) في Dart، ولماذا نحتاج إليها عند التعامل مع العمليات التي تستغرق وقتًا طويلًا مثل الاتصال بالإنترنت أو قواعد البيانات وقراءة الملفات. كما ستفهم طبيعة تنفيذ المهام في Dart بنظام الخيط الواحد (Single Thread)، وكيف يمكن للعمليات البطيئة أن تؤثر في استجابة التطبيق، تمهيدًا للتعرف على الحلول العملية في الدروس القادمة.

مقدار -
58. التعرف على Future في Dart

في هذه الحلقة ستتعرف على أول أدوات البرمجة غير المتزامنة في Dart، وهي Future، وكيف تساعد على تنفيذ المهام التي تستغرق وقتًا دون إيقاف التطبيق. كما ستتعلم استخدام then لاستقبال النتائج بعد انتهاء التنفيذ، وcatchError لمعالجة الأخطاء، وتحويل الدوال إلى دوال غير متزامنة باستخدام Future وasync، بالإضافة إلى استخدام Future.delayed لتأخير تنفيذ المهام لفترة زمنية محددة.

مقدار -
59. استخدام async و await في Dart

في هذه الحلقة ستتعرف على الكلمتين المفتاحيتين async وawait، وكيفية استخدامهما مع Future للتحكم في ترتيب تنفيذ العمليات غير المتزامنة. كما ستتعلم الفرق بين await وthen، وطريقة التعامل مع الأخطاء باستخدام try وcatch وfinally، لضمان تنفيذ المهام التي تعتمد على نتائج عمليات مثل استدعاء واجهات API أو قواعد البيانات بصورة صحيحة وآمنة.

مقدار -
60. استخدام FutureBuilder في Flutter

في هذه الحلقة ستتعرف على FutureBuilder وكيفية استخدامه داخل واجهات Flutter لعرض نتائج العمليات غير المتزامنة. كما ستتعلم كيفية التعامل مع حالات التحميل واكتمال التنفيذ من خلال ConnectionState، واستخدام Snapshot للوصول إلى البيانات القادمة من Future، وعرض واجهات مختلفة بحسب حالة العملية والبيانات المستلمة.

مقدار -
61. التعرف على Stream في Dart

في هذه الحلقة ستتعرف على مفهوم Stream في Dart، والفرق بينه وبين Future، وكيف يُستخدم لاستقبال تدفق مستمر من البيانات بدلاً من نتيجة واحدة. كما ستتعلم استخدام Stream.periodic لإنشاء تدفق بيانات دوري، والاستماع إلى التحديثات باستخدام listen، مع التعرف على أبرز الحالات العملية التي يعتمد فيها التطبيق على التحديثات اللحظية مثل الرسائل الفورية وبيانات الحساسات.

مقدار -
62. استخدام StreamBuilder في Flutter

في هذه الحلقة ستتعرف على StreamBuilder وكيفية استخدامه داخل Flutter لبناء واجهات تتحدث تلقائيًا مع تدفق البيانات المستمر. كما ستتعلم كيفية التعامل مع حالات ConnectionState، واستخدام AsyncSnapshot للوصول إلى البيانات القادمة من Stream، والفرق العملي بين StreamBuilder وFutureBuilder، ومتى يكون كل منهما الخيار المناسب داخل التطبيق.

مقدار -
63. استخدام Shared Preferences في Flutter

في هذه الحلقة ستتعرف على Shared Preferences وكيفية استخدامها لحفظ البيانات البسيطة محليًا داخل تطبيقات Flutter باستخدام نظام المفتاح والقيمة. كما ستتعلم كيفية تثبيت الحزمة وإضافة البيانات واسترجاعها، والتعامل معها باستخدام Future وasync وawait، مع تطبيق عملي يوضح تحديث واجهة المستخدم وحفظ البيانات واستعادتها حتى بعد إعادة تشغيل التطبيق.

مقدار -
64. التعامل مع HTTP Request وجلب البيانات من API

في هذه الحلقة ستتعرف على أساسيات التعامل مع واجهات البرمجة (API) داخل Flutter من خلال إرسال طلب HTTP وجلب البيانات باستخدام حزمة HTTP. كما ستتعلم كيفية استخدام FutureBuilder لانتظار البيانات القادمة من الإنترنت، وفك ترميز JSON للوصول إلى محتوى الاستجابة، مع تطبيق عملي يمهد لبناء واجهات تعتمد على البيانات الخارجية.

مقدار -
65. جلب البيانات من API وعرضها في Flutter

في هذه الحلقة ستتعلم كيفية عرض جميع البيانات القادمة من API داخل التطبيق باستخدام FutureBuilder وقائمة ديناميكية، مع تحويل بيانات JSON إلى قائمة من الخرائط، وبناء عناصر الواجهة اعتمادًا على البيانات المسترجعة، والتعامل مع الأخطاء الشائعة مثل أنواع البيانات وحدود القوائم، حتى تتمكن من إنشاء واجهات تعرض بيانات حقيقية قادمة من الإنترنت.

مقدار -
66. عرض بيانات API باستخدام ListView Builder

في هذه الحلقة ستتعلم كيفية عرض جميع البيانات القادمة من API داخل Flutter باستخدام ListView Builder وFutureBuilder، مع التعامل مع بيانات JSON، وتحويل أنواع البيانات عند الحاجة، وبناء قائمة ديناميكية تعرض المنشورات كاملة، إضافة إلى فهم دور JSON Decode وأفضل الممارسات لتطبيق مفاهيم البرمجة غير المتزامنة عمليًا.

مقدار -
إدارة الحالة باستخدام Cubit (Bloc)
9 أقسام
67. مشكلات setState ولماذا نحتاج إلى إدارة الحالة؟

في هذه الحلقة ستتعرف على أبرز مشكلات setState في Flutter، مثل تمرير البيانات بين المكونات، وتعقيد تنظيم الكود، وإعادة بناء أجزاء كبيرة من الواجهة دون حاجة، مع تطبيق عملي يوضح تأثير هذه المشكلات ولماذا نلجأ إلى حلول إدارة الحالة في التطبيقات الكبيرة.

مقدار -
68. مقدمة في إدارة الحالة باستخدام Cubit

في هذه الحلقة ستتعرف على مفهوم إدارة الحالة في Flutter، ولماذا نحتاج إلى حلول مثل Cubit وBLoC بدلًا من الاعتماد على setState، مع فهم كيفية حل مشكلات تمرير البيانات، وفصل منطق التطبيق عن واجهة المستخدم، وتقليل عمليات إعادة بناء الواجهة، تمهيدًا لتطبيق إدارة الحالة عمليًا في الدروس القادمة.

مقدار -
69. التعرف على Cubit وحالات التطبيق (State)

في هذه الحلقة ستتعرف على آلية عمل Cubit في Flutter ودوره في إدارة الحالة، وكيف يعمل وسيطًا بين واجهة المستخدم ومصادر البيانات، مع فهم مفهوم الحالات (States)، وطريقة تنظيم ملفات Cubit وState، وكيفية فصل منطق التطبيق عن واجهة المستخدم تمهيدًا لتطبيق إدارة الحالة عمليًا.

مقدار -
70. استخدام BlocProvider لتوفير Cubit داخل التطبيق

في هذه الحلقة ستتعلم كيفية استخدام BlocProvider لتوفير Cubit داخل شجرة الويدجت في Flutter، وكيفية الوصول إلى الدوال والمتغيرات الموجودة داخل Cubit من أي جزء في التطبيق، مع فهم سبب ظهور أخطاء السياق (Context) وطريقة حلها، تمهيدًا لتحديث واجهة المستخدم باستخدام حالات Cubit في الدروس التالية.

مقدار -
71. استخدام BlocBuilder وتحديث واجهة المستخدم

في هذه الحلقة ستتعلم كيفية استخدام BlocBuilder لتحديث واجهة المستخدم عند تغيّر الـ State داخل Cubit، وستفهم دور emit في إرسال الحالات الجديدة، ولماذا لا يكفي تعديل البيانات وحده، بالإضافة إلى الطريقة الصحيحة لاستخدام BlocBuilder لتحديث الأجزاء التي تتغير فقط وتحسين أداء التطبيق.

مقدار -
72. استخدام BlocListener وتنفيذ الإجراءات

في هذه الحلقة ستتعلم كيفية استخدام BlocListener للاستماع إلى تغيّر الـ State داخل Cubit، والفرق بينه وبين BlocBuilder، وأهم حالات استخدامه مثل عرض رسائل Snackbar، والتنقل بين الصفحات، وتنفيذ الإجراءات التي تعتمد على تغيّر الحالة دون إعادة بناء واجهة المستخدم.

مقدار -
73. استخدام BlocConsumer للجمع بين الاستماع وإعادة بناء الواجهة

في هذه الحلقة ستتعلم كيفية استخدام BlocConsumer للجمع بين BlocListener وBlocBuilder داخل Widget واحدة، وستفهم متى تستخدم BlocConsumer، ومتى يكون BlocListener أو BlocBuilder هو الخيار الأنسب، وكيفية تنفيذ الاستماع إلى الـ State وإعادة بناء واجهة المستخدم في الوقت نفسه.

مقدار -
74. استخدام BlocObserver لتتبع حالات Cubit وتصحيح الأخطاء

في هذه الحلقة ستتعلم كيفية استخدام BlocObserver لمراقبة دورة حياة الـ Cubit وتتبع انتقالات الـ State، مع التعرف على دوره في تسجيل الأحداث مثل إنشاء الـ Cubit وإغلاقه وانتقال الحالات والأخطاء، وكيف يساعد في تصحيح الأخطاء وفهم سير التطبيق أثناء التطوير.

مقدار -
75. تطبيق Cubit مع API وإدارة حالات التحميل والنجاح والخطأ

في هذه الحلقة ستطبق مفاهيم Cubit عمليًا من خلال تنفيذ طلب إلى API وإدارة دورة حياة البيانات باستخدام حالات التحميل والنجاح والخطأ، مع بناء واجهة تتفاعل مع كل حالة عبر BlocProvider وBlocBuilder، والتعرف على كيفية تنظيم منطق التطبيق وفصل إدارة البيانات عن واجهة المستخدم.

مقدار -
خريطة طريق تعلم Flutter بعد الكورس
1 أقسام
76. خريطة طريق تعلم Flutter والخطوات التالية بعد إتقان الأساسيات

في هذه الحلقة ستتعرف على خريطة الطريق الكاملة لتعلم Flutter، بدايةً من إتقان لغة Dart وتصميم واجهات المستخدم، مرورًا بالبرمجة غير المتزامنة وإدارة الحالة، وصولًا إلى التصميم المتجاوب والتعامل مع Figma وواجهات البرمجة وFirebase، مع توضيح أفضل ترتيب لتعلّم هذه المهارات والاستعداد للانتقال إلى المشاريع الاحترافية.

مقدار -
الشهادات
1 أقسام
شهادة الدورة
شهادة الدورة
If you pass all the lessons in this course, you will receive this certificate.
النوع شهادة الدورة
Reply to Comment
Comments Approval

Your comment will be visible after admin approval.

0
0 المراجعات
جودة المحتوى (0)
مهارات المدرب (0)
قيمة الشراء (0)
جودة الدعم (0)
Reply to Review
Submit Reply

Your reply to this review will be visible to all users.

دورة Flutter: أساسيات تطوير التطبيقات
60 $

تشمل هذه الدورة

شهادة رسمية
دعم المدرب
مفضلة
شارك

مواصفات الدورة

Lessons
76
مدة
12:49 ساعات
Access Duration
365 أيام
Updated Date
2/07/2026
Ammar Ahmed
Ammar Ahmed

مطور Flutter ومدرب برمجة تطبيقات

إرسال الدورة كهدية

Send as a gift to friends
دورة Flutter: أساسيات تطوير التطبيقات
You are viewing
دورة Flutter: أساسيات تطوير التطبيقات