Update: 2026-08-03 12:30:24
This commit is contained in:
@@ -666,29 +666,42 @@ class _AdminHomePageState extends State<AdminHomePage>
|
||||
);
|
||||
}
|
||||
|
||||
/// تحويل آمن لأي قيمة رقمية قادمة من الـ API.
|
||||
///
|
||||
/// حقول MySQL من نوع DECIMAL/SUM تصل نصاً في JSON (مثل "0.00")، بينما
|
||||
/// حقول COUNT تصل أعداداً صحيحة. الكتابة السابقة
|
||||
/// `(data['x'] ?? 0).toDouble()` كانت تنهار بـ
|
||||
/// "Class 'String' has no instance method 'toDouble'" فور وصول أول حقل
|
||||
/// نصّي — وهو ما حدث عندما نجح تسجيل دخول المحفظة وأرجع payments: "0.00".
|
||||
double _num(dynamic v) {
|
||||
if (v == null) return 0;
|
||||
if (v is num) return v.toDouble();
|
||||
return double.tryParse(v.toString()) ?? 0;
|
||||
}
|
||||
|
||||
Widget _buildChartsSection(
|
||||
dynamic data, DashboardController controller, ColorScheme cs) {
|
||||
final completed = (data['completed_rides'] ?? 0).toDouble();
|
||||
final cancelled = (data['cancelled_rides'] ?? 0).toDouble();
|
||||
final completed = _num(data['completed_rides']);
|
||||
final cancelled = _num(data['cancelled_rides']);
|
||||
final total = completed + cancelled;
|
||||
final completedPercent = total > 0 ? (completed / total * 100).toStringAsFixed(1) : '0.0';
|
||||
|
||||
final comfort = (data['comfort'] ?? 0).toDouble();
|
||||
final speed = (data['speed'] ?? 0).toDouble();
|
||||
final lady = (data['lady'] ?? 0).toDouble();
|
||||
final comfort = _num(data['comfort']);
|
||||
final speed = _num(data['speed']);
|
||||
final lady = _num(data['lady']);
|
||||
final maxBar = [comfort, speed, lady].reduce((a, b) => a > b ? a : b);
|
||||
final barMaxY = maxBar > 0 ? (maxBar * 1.3).ceilToDouble() : 10.0;
|
||||
|
||||
final payments = (data['payments'] ?? 0).toDouble();
|
||||
final passengerCount = (data['countPassengers'] ?? 0).toDouble();
|
||||
final driverCount = (data['countDriver'] ?? 0).toDouble();
|
||||
final monthRides = (data['countRideThisMonth'] ?? 0).toDouble();
|
||||
final payments = _num(data['payments']);
|
||||
final passengerCount = _num(data['countPassengers']);
|
||||
final driverCount = _num(data['countDriver']);
|
||||
final monthRides = _num(data['countRideThisMonth']);
|
||||
|
||||
// توزيع الرحلات على أوقات اليوم — تعيده dashbord.php منذ البداية
|
||||
// (morning/evening/night_ride_count) ولم يكن معروضاً في أي شاشة.
|
||||
final morningRides = (data['morning_ride_count'] ?? 0).toDouble();
|
||||
final eveningRides = (data['evening_ride_count'] ?? 0).toDouble();
|
||||
final nightRides = (data['night_ride_count'] ?? 0).toDouble();
|
||||
final morningRides = _num(data['morning_ride_count']);
|
||||
final eveningRides = _num(data['evening_ride_count']);
|
||||
final nightRides = _num(data['night_ride_count']);
|
||||
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||
@@ -1660,7 +1673,6 @@ class _GlowOrb extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final cs = Theme.of(context).colorScheme;
|
||||
return Container(
|
||||
width: size,
|
||||
height: size,
|
||||
|
||||
Reference in New Issue
Block a user