fix(rider): تعطيل أنواع الرحلات بلا تعرفة نشطة

فحص حيّ كشف أن `GET /ride-types` يرجّع ستّة أنواع للمستأجر siro بينما ثلاثة
فقط لها تعرفة نشطة:
  economy 1.55 · comfort 1.85 · electric 1.75  ✅
  family_van · women · scooter                 ❌ 404

أي أن الراكب يرى ستّة خيارات، وثلاثة منها لو اختارها يفشل طلب الرحلة بـ
«No pricing available» بعد أن يكون قد أكمل تحديد وجهته.

المعالجة في التطبيق: النوع بلا تعرفة يظهر **معطّلاً مكتوباً عليه «غير متاح»**
لا مخفياً — إخفاؤه يترك المستخدم يتساءل أين ذهب الخيار، وإظهاره قابلاً
للاختيار يوصله إلى فشل بعد خطوتين. وإن كان المختار بلا تعرفة يُنتقل تلقائياً
لأول نوع مسعَّر، فلا يبقى زرّ التأكيد معطّلاً بلا سبب ظاهر.

هذا علاج للعَرَض؛ السبب بيانات على الخادم: كتالوج ride-types والتعرفات غير
متزامنين.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Hamza-Ayed
2026-08-05 00:39:30 +03:00
co-authored by Claude Opus 5
parent 8976821a93
commit 3a8caf7b27
4 changed files with 46 additions and 13 deletions
@@ -283,10 +283,16 @@ class RideCubit extends Cubit<RideState> {
final quotes = Map<String, FareQuote>.fromEntries(
results.whereType<MapEntry<String, FareQuote>>(),
);
final selected = state.selectedRideType;
// إن كان المختار بلا تعرفة، ننتقل لأول نوع مسعَّر: تركُه مختاراً يعني
// زرَّ تأكيد معطّلاً بلا سبب ظاهر.
var selected = state.selectedRideType;
if (selected == null || !quotes.containsKey(selected.code)) {
selected = types.where((t) => quotes.containsKey(t.code)).firstOrNull;
}
emit(state.copyWith(
quotes: quotes,
selectedRideType: selected,
quote: selected == null ? null : quotes[selected.code],
busy: false,
error: quotes.isEmpty ? RideError.quoteFailed : RideError.none,