مشروع المنشورات -الدرس الأخير-
بعد أن أعددنا طبقة الشبكة , الحالة , النموذج , المتحكّم , نحتاج الآن للبدء بالربط وإعداد القسم الأخير وهو الجزء المتصل بساعي البريد API.
لنبدأ إعداده نحتاج أن نتجه إلى
fetaures —> home —> repo
ثم ننشئ ملفاً بعنوان : post_api.dart
داخل هذا الملف سنعرف كلاساً ونستدعي dio التي عرفناها مسبقاً في طبقة الشبكة باستخدام get_it.
حتى نقوم بالأمر نحتاج أولاً أن نعود إلى get_it لتعريف dio داخلها, فنذهب إلى:
common —> serivces —> get_it
ثم داخل دالة setup نقوم بتسجيل dio client التي عرفناها مسبقاً:
نعود الآن إلى ملف main.dart, ثم نستدعي دالة setup داخل دالة main بعد ذلك نذهب إلى post_api.dart ثم ننشئ كلاساً ونستدعي داخله الشبكة:
داخل هذا الكلاس سنضع كل الدوال التي نحتاجها عادةً للتعامل مع ساعي البريد , وكما عرفنا كذلك سابقاً أن المخرجات ستكون إما مخرجاً أو خطأ , لذلك سنحتاج إلى كتابة كل دالة مع استخدام منظّم المخرجات.
بدايةً حتى نستخدم منظم المخرجات من الأفضل التعرف على مفهوم النوع العام generics , وهو مفهوم موجود في كل لغات البرمجة تقريباً لذلك أنصحك بالعودة والإطلاع عليه قبل أن تعلم كيف تنظّم المخرجات.
الآن لنكتب الدالة نحتاج أن نحدد نوعها , ولنحدد نوعها في فلَتر فإن أول قاعدة هو أن نحدد أنها دالة تنتظر نتيجة فتكون دالة مستقبلية Future , ثم بعد ذلك نضع منظّم المخرجات ApiResult , ثم بعد ذلك نحدد نوع المخرج وهو في حالتنا نموذج المنشورات PostModel.
يكون الشكل النهائي للدالة هكذا:
بهذه الطريقة حددنا نوع المخرجات المتوقعة من هذه الدالة , نحتاج بعد ذلك أن نأخذ بالاعتبار احتميالة “الخطأ” لذا نستخدم هنا جرب والتقط try-catch لالتقاط الأخطاء وارجاعها:
الآن نبدأ باستخدام ساعي البريد بشكل مباشر , وذلك باستخدام network الذي عرفناه سابقاً , ثم نستخدم منه dio ثم بعد ذلك نحدد نوع الرسالة ونحدد نقطة النهاية الخاصة بها:
كما قلنا سابقاً أن هناك أكواد أخطاءٍ متعارف عليها , فهناك رقم متعارف عليه إذا نجح الإرسال والاستقبال وهو “200” , لذلك نضع شرطاً حتى ننظم المخرجات وهو أنه إذا كان الرقم 200 فانشئ نموذجاً وأرجعه من خلال الدالة , ما عدا ذلك حدد نوع الخطأ وأرجعه , كما أننا وضعنا ارجاعاً في حالة التقطَ خطأ ما عموماً:
بهذه الطريقة إذا قمنا بتجربة ساعي البريد بشكل منفصل يمكننا التأكد من ناتجه , على سبيل المثال:
الآن نحتاج إلى انشاء دالة تقوم بأخذ المخرجات من ساعي البريد وتخزينها داخل الحالة لعرضها , ننشئ هذه الدالة داخل المتحكّم ليقوم بالتحكم في تخزين البيانات وعرضها.
نذهب إلى
features—>home—>domain—>controller
ثم داخل المتحكّم ننشئ دالة عادية void ونعطيها اسم getPosts() وداخل هذه الدالة نستدعي ساعي البريد على النحو التالي:
بعد ذلك نقوم باستدعاء دالة when من الكائن res , وظيفة when هي التحكم بالمخرجات الذي ذكرناه آنفاً فتوفّر لنا مخرج “ناجح” ومخرج “فاشل” ومساحةً لكتابة الأوامر في حالة كان المخرج ناجحاً أو فاشلاً.
في حالتنا نحتاج إذا كان المخرج ناجحاً أن يقوم بتحديث الحالة عن طريق دالة copyWith واذا كان فاشلاً ان يطبع رسالة المشكلة.