تخطَّ إلى المحتوى
كل المشاريع
مشروع عميل التوصيل والتجارة

ون واي فاست فود

كود واحد، وهوية جديدة في ثابت واحد

إعادة إطلاق white-label لمنصة توصيل مبنية بـ Flutter: هوية بصرية جديدة، وتتبّع متكيّف لموقع السائق، ونطاقات تغطية بالمضلّعات، واختبارات golden.

الدولة
السعودية
النوع
مشروع عميل
الفترة
2026
المنصات
Android · iOS · Web
ون واي
تطبيقات Flutter بهوية جديدة
3
اختبار golden
~62
مجموعات golden للهاتف والتابلت
9

نظرة عامة

ون واي فاست فود نسخة white-label من منصة التوصيل التي بناها محمود لطلباتك. أراد مشغّل جديد تطبيقات العميل والسائق والمطعم نفسها، المجرّبة في الإنتاج، بهويته وعملته وإعدادات سوقه، دون البدء من الصفر.

نُسخت تطبيقات Flutter الثلاثة، وأُعيدت هويتها عبر ثابت لوني واحد، ونُقل كل منها إلى مستودع ومعرّف تطبيق خاص به، وأُضيفت إليها مزايا لم تكن في المنصة الأصلية: تتبّع متكيّف لموقع السائق، وتتبّع المندوب على الخريطة، ونطاقات تغطية بالمضلّعات، وذاكرة للطلب، واختبارات golden.

تم العمل خلال سبتمبر وأكتوبر 2026.

التحدي

  1. 01

    إعادة الهوية دون تفريع المنتج إلى الأبد: مئات الدرجات المكتوبة يدوياً من Colors.orange كان يجب أن تتغيّر من مكان واحد

  2. 02

    سوق جديد وافتراضات جديدة: العملة وأرقام الدعم والمدينة الافتراضية كانت مكتوبة في الكود وكان لا بد من نقلها إلى الإعدادات

  3. 03

    مزايا يحتاجها المشغّل عند الإطلاق: تتبّع المندوب لحظياً، ونطاقات توصيل بالمضلّعات، وإعادة طلب أسلس

  4. 04

    ثقة دون فريق ضمان جودة: تطبيق مطعم بعشرات الشاشات يحتاج حماية من الانحرافات البصرية

أبرز الميزات

إعادة الهوية white-label

  • ملف brand.dart واحد لكل تطبيق يعرّف درجة لونية واحدة kBrand تمرّ عبرها كل مراجع البرتقالي السابقة
  • مولّدات أيقونات بلغة Python تبني أيقونات Android المتكيّفة وأحادية اللون وأيقونات iOS وشاشات البداية وأيقونات المتجر من شعار واحد بدقة 1024 px
  • مفتاح AppEnv وقت الترجمة لاختيار البيئة

تطبيقا العميل والسائق

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

تطبيق المطعم

  • بنية مقسّمة حسب الميزات مع get_it ومستودعات dartz Either ومجلد core/ مشترك
  • لوحة المطبخ، وتفاصيل الطلب، وقائمة طعام بالفيديو، ومركز مالي، والتقييمات
  • تصميمات للهاتف والتابلت بالوضعين الفاتح والداكن
  • طباعة حرارية تلقائية لفواتير عربية على طابعات Sunmi وطابعات POS المدمجة وطابعات Bluetooth

الميزة الأبرز

هوية في ثابت واحد، وطباعة تعمل ببساطة

  • يجرّب تطبيق المطعم الطابعات بالترتيب: طابعة Sunmi عبر الـ SDK، ثم PrinterClient أصلي بلغة Java يرسل بايتات ESC/POS إلى الطابعة المدمجة عبر LocalSocket في Android، ثم طابعة Bluetooth.
  • تُنسَّق الفواتير لورق 80 مم برقم الطلب والأصناف والإجماليات وباركود، مع إرسال العربية بترميز UTF-8.
  • تحفظ الطباعة التلقائية أرقام الطلبات المطبوعة وتعيد المحاولة حتى ثلاث مرات لكل طلب، مع نبضة كل 15 ثانية أثناء فتح التطبيق، واستدراك الطلبات الفائتة عند إعادة فتحه.
  • اللوحة اللونية كلها في kBrand: تغيير الهوية يعني تغيير درجة واحدة وإعادة توليد الأيقونات، دون بحث واستبدال عبر الشاشات.

اسحب للمزيد

ملاحظات هندسية

  1. 01

    تتبّع متكيّف للموقع

    لا يرسل LiveLocationService شيئاً حين يكون السائق غير متصل، ويرسل كل 60 ثانية بدقة متوسطة أثناء الانتظار، وكل 10 ثوانٍ بدقة عالية أثناء حمل طلب. يحصل العملاء على مواقع حديثة دون استنزاف البطارية في فترات الخمول.

  2. 02

    تتبّع سلس للمندوب

    تستعلم شاشة التتبّع كل 5 ثوانٍ وتحرّك علامة المندوب بين القراءات خلال 4.5 ثانية فتنزلق بدل أن تقفز، مع حماية من الإحداثيات غير الصالحة أو الخارجة عن النطاق.

  3. 03

    نطاقات تغطية بالمضلّعات

    تُخزَّن مضلّعات المدن والأحياء على الجهاز وتُحدَّث في الخلفية. يجيب فحص محلي لوقوع النقطة داخل المضلّع عن سؤال "هل نوصل هنا؟" فوراً أثناء سحب الدبوس، ثم يؤكد الخادم.

  4. 04

    ذاكرة طلب آمنة

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

  5. 05

    تحديث رمز آمن مع التدوير

    تتشارك استجابات 401 المتزامنة عملية تحديث واحدة، لأن إعادة استخدام رمز التحديث تُبطل عائلة الرموز كلها. ولا ينهي الجلسة إلا 401، أما 429 أو 503 أو خطأ الشبكة فتُبقيها.

  6. 06

    OTP كما يجب

    يتحقق الخادم من الرمز ويحدّد عدّاد إعادة الإرسال عبر resendAfter. تبقى خانات الرمز من اليسار إلى اليمين داخل الواجهة العربية، وتصمد الشاشة حين يُنهي Android التطبيق.

النتائج

  • 3 تطبيقات Flutter أُعيدت هويتها ونُقلت إلى مستودعات ومعرّفات تطبيقات مستقلة، تتشارك هوية بصرية واحدة
  • نحو 62 اختبار golden و 62 لقطة مرجعية تحمي واجهة تطبيق المطعم على الهاتف والتابلت بالوضعين الفاتح والداكن
  • قدرات جديدة للمنصة بُنيت لهذا الإطلاق: تتبّع متكيّف للموقع، وتتبّع المندوب، ونطاقات تغطية بالمضلّعات، وذاكرة للطلب

التقنيات

  • Flutter
  • Bloc / Cubit
  • GetIt
  • dartz
  • Dio
  • flutter_map
  • Google Maps
  • geolocator
  • Sunmi / ESC/POS
  • FCM
  • Golden tests
  • Python tooling