تطبيق Flutter على الهاتف عميل عام، لذلك لا يجوز أن يحمل bearer key الخاص بـ exchangerate.dev. ضع المفتاح في proxy على /api/fx، وأرسل {from,to} من Flutter، واحفظ السعر والمصدر وجلسة السوق ووقت الرصد معاً في نموذج typed.
حفظ بيانات الاعتماد على الخادم
يستقبل مسار الخادم from وto، ويضيف Authorization: Bearer $EXCHANGERATE_API_KEY، ويستدعي /v1/latest/{from}?symbols={to}، ثم يعيد الحقول المطلوبة فقط. احفظ المفتاح في بيئة الخادم. يستقبل التطبيق عنوان proxy عبر --dart-define=FX_PROXY_BASE_URL=… ولا يستلم مفتاح الخدمة الأصلي.
إضافة اعتماد HTTP
أنشئ تطبيق Flutter وأضف حزمة http الحالية إلى pubspec.yaml، واحفظ محول Flutter الكامل في lib/main.dart. شغّله عبر flutter run --dart-define=FX_PROXY_BASE_URL=https://your-app.example/api/fx. نزّل proxy Node الأدنى، واضبط EXCHANGERATE_API_KEY وشغّل Node 20 أو أحدث. يستمع proxy على loopback 8787 للاختبار المحلي؛ وقبل ربط جهاز، وفّر وصول HTTPS موثقاً مع تقييد الطلبات. يتحقق proxy من العملة والمبلغ ويمرر المفتاح ويعيد حقول العرض typed فقط. راجع دليل Flutter الرسمي للشبكات.
التحقق من السعر قبل العرض
يرفض النموذج rate المفقود أو غير الموجب أو غير المحدود أو غير الرقمي، وكذلك data_updated_at المفقود. يمنع ذلك صفحات HTML وأخطاء proxy وJSON الفارغ من الوصول إلى نتيجة التحويل. يفرض العميل مهلة عشر ثوانٍ ويعرض حالات غير 2xx.
عرض التحميل والخطأ ووقت البيانات
يعطّل العرض الزر أثناء الطلب ويظهر مؤشر التحميل، ويحفظ رسالة مقروءة عند فشل proxy. بعد النجاح يعرض المبلغ والسعر والمصدر والجلسة ووقت الرصد وعمر cache منذ جلب الجهاز وعمر الرصد منذ data_updated_at، لتمييز الرصد اللحظي عن المرجع اليومي.
تقريب العرض مع إبقاء القيمة
اعرض JPY بلا منازل، وUSD وEUR وGBP وIDR بمنزلتين، واعرض السعر بست منازل للقراءة. هذا تقريب عرض فقط؛ احتفظ بالقيمة الرقمية الأصلية واستخدم decimal أو fixed-point في المحاسبة، ولا تستخدم قيمة العرض العائمة كسجل تسوية.
اختبار تدفق المستخدم
شغّل التطبيق باستجابة proxy تجريبية، واختبر timeout و401/429 وJSON غير الصالح والسعر المفقود وdata_updated_at القديم. تحتاج إعدادات الشبكات وTLS والنشر إلى فحص على جهاز أو محاكي؛ الملف مثال عميل قابل للتشغيل وليس proxy مستضافاً.
