Update: 2026-07-09 01:55:25

This commit is contained in:
Hamza-Ayed
2026-07-09 01:55:25 +03:00
parent ac0c343f18
commit 7dff7b6973
12 changed files with 374 additions and 28 deletions
@@ -529,6 +529,40 @@ class _OrderOverlayState extends State<OrderOverlay>
),
],
),
// 🆕 "أرباحك أعلى" — يظهر فقط إذا في فرق إيجابي حقيقي من الباك اند
if (order.driverEarningsExtra != null &&
order.driverEarningsExtra! > 0) ...[
const SizedBox(height: 10),
Container(
width: double.infinity,
padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 12),
decoration: BoxDecoration(
color: AppColors.priceHighlight.withOpacity(0.12),
borderRadius: BorderRadius.circular(10),
border: Border.all(
color: AppColors.priceHighlight.withOpacity(0.35),
width: 1),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Icon(Icons.trending_up_rounded,
color: AppColors.priceHighlight, size: 16),
const SizedBox(width: 6),
Text(
"أرباحك أعلى بـ ${order.driverEarningsExtra!.toStringAsFixed(2)} ${order.driverEarningsCurrency ?? ''} من التطبيقات الثانية"
.tr,
style: const TextStyle(
color: AppColors.priceHighlight,
fontSize: 11.5,
fontWeight: FontWeight.w700,
),
textAlign: TextAlign.center,
),
],
),
),
],
const SizedBox(height: 12),
Divider(color: AppColors.gray.withOpacity(0.2), thickness: 1),
const SizedBox(height: 12),
@@ -238,14 +238,16 @@ class OrderRequestPage extends StatelessWidget {
),
// ── Earnings Compare Badge ──────────────────
// يتم جلبه من API مشابه أو يمكن ربطه ببيانات الكنترولر لاحقاً.
// نتركه متاحاً للتحديث عبر الكنترولر (controller.driverBadgeText, controller.extraEarnings).
// سنستخدم قيم افتراضية للتأكد من الريندر (UI render) الآن
// سيتم تفعيله من الباك إند
// مصدر البيانات: driver_earnings_extra/currency القادمة من add_ride.php
// (عبر FCM أو Socket) — controller.driverEarningsExtra يبقى null إذا
// ما في فرق إيجابي حقيقي، فالويدجت نفسه بيختفي تلقائياً.
const SizedBox(height: 5),
const DriverEarningsBadge(
earningsLabel: "أرباحك أعلى هنا مقارنة بـ المنافسين",
extraAmount: 2.50, // القيمة هنا ستُسحب من الـ Socket / API قريباً
DriverEarningsBadge(
earningsLabel: controller.driverEarningsExtra != null
? "أرباحك أعلى هنا مقارنة بـ المنافسين"
: null,
extraAmount: controller.driverEarningsExtra,
currency: controller.driverEarningsCurrency,
),
const SizedBox(height: 15),
@@ -110,6 +110,13 @@ class RideAvailableCard extends StatelessWidget {
const RideAvailableCard({Key? key, required this.rideInfo}) : super(key: key);
/// يحوّل driver_earnings_extra (نص من الـ Socket) إلى double، أو null إن لم يوجد
double? get _earningsExtra {
final raw = rideInfo['driver_earnings_extra'];
if (raw == null) return null;
return double.tryParse(raw.toString());
}
@override
Widget build(BuildContext context) {
return Card(
@@ -128,10 +135,16 @@ class RideAvailableCard extends StatelessWidget {
const Divider(height: 24, thickness: 0.5),
_buildRideDetails(),
const SizedBox(height: 12),
// ── إضافة شارة الأرباح هنا ──
const DriverEarningsBadge(
earningsLabel: "أرباحك أعلى هنا مقارنة بـ المنافسين",
extraAmount: 2.50, // القيمة هنا ستُسحب من الـ Socket / API قريباً
// ── شارة الأرباح — مصدرها rideInfo['driver_earnings_extra'] القادم
// من add_ride.php (broadcastRideToMarket عبر Socket). ملاحظة: الرحلات
// المجلوبة من الجلب الأولي (getRideWaiting.php) ما زالت لا تحمل هذا
// الحقل، فالشارة بتختفي تلقائياً لحد ما تُحدَّث تلك النقطة لاحقاً.
DriverEarningsBadge(
earningsLabel: _earningsExtra != null
? "أرباحك أعلى هنا مقارنة بـ المنافسين"
: null,
extraAmount: _earningsExtra,
currency: rideInfo['driver_earnings_currency']?.toString() ?? 'ل.س',
),
const SizedBox(height: 12),
_buildAcceptButton(),