Update: 2026-08-02 22:51:18
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import 'package:siro_admin/constant/theme.dart';
|
||||
import 'dart:async';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
@@ -418,9 +419,9 @@ class _RidesDashboardScreenState extends State<RidesDashboardScreen>
|
||||
'جارية',
|
||||
controller.beginCount.toString(),
|
||||
Icons.directions_car_rounded,
|
||||
const Color(0xFF10B981), cs)),
|
||||
cs.success, cs)),
|
||||
Obx(() => _buildStatCard('جديدة', controller.newCount.toString(),
|
||||
Icons.new_releases_rounded, const Color(0xFF3B82F6), cs)),
|
||||
Icons.new_releases_rounded, cs.info, cs)),
|
||||
Obx(() => _buildStatCard(
|
||||
'مكتملة',
|
||||
controller.completedCount.toString(),
|
||||
@@ -430,12 +431,12 @@ class _RidesDashboardScreenState extends State<RidesDashboardScreen>
|
||||
'ملغاة',
|
||||
controller.canceledCount.toString(),
|
||||
Icons.cancel_rounded,
|
||||
const Color(0xFFEF4444), cs)),
|
||||
cs.danger, cs)),
|
||||
Obx(() => _buildStatCard(
|
||||
'الإيرادات',
|
||||
controller.totalRevenue.value.toStringAsFixed(0),
|
||||
Icons.payments_rounded,
|
||||
const Color(0xFFF59E0B), cs)),
|
||||
cs.warning, cs)),
|
||||
],
|
||||
),
|
||||
),
|
||||
@@ -624,15 +625,15 @@ class _RidesDashboardScreenState extends State<RidesDashboardScreen>
|
||||
children: [
|
||||
Column(
|
||||
children: [
|
||||
const Icon(Icons.my_location_rounded,
|
||||
size: 14, color: Color(0xFF10B981)),
|
||||
Icon(Icons.my_location_rounded,
|
||||
size: 14, color: cs.success),
|
||||
Container(
|
||||
width: 2,
|
||||
height: 16,
|
||||
color: Colors.grey.withOpacity(0.3),
|
||||
margin: const EdgeInsets.symmetric(vertical: 2)),
|
||||
const Icon(Icons.location_on_rounded,
|
||||
size: 14, color: Color(0xFFEF4444)),
|
||||
Icon(Icons.location_on_rounded,
|
||||
size: 14, color: cs.danger),
|
||||
],
|
||||
),
|
||||
const SizedBox(width: 10),
|
||||
@@ -682,7 +683,7 @@ class _RidesDashboardScreenState extends State<RidesDashboardScreen>
|
||||
title: 'السائق',
|
||||
name: ride.driverName,
|
||||
phone: ride.driverPhone,
|
||||
color: const Color(0xFF3B82F6),
|
||||
color: cs.info,
|
||||
isAdmin: isAdmin,
|
||||
),
|
||||
const Padding(
|
||||
@@ -709,19 +710,19 @@ class _RidesDashboardScreenState extends State<RidesDashboardScreen>
|
||||
_buildInfoChip(
|
||||
Icons.payments_rounded,
|
||||
'${double.tryParse(ride.price)?.toStringAsFixed(0) ?? 0} ل.س',
|
||||
const Color(0xFF10B981)),
|
||||
cs.success),
|
||||
const SizedBox(width: 8),
|
||||
_buildInfoChip(
|
||||
Icons.straighten_rounded,
|
||||
'${double.tryParse(ride.distance)?.toStringAsFixed(1) ?? 0} كم',
|
||||
const Color(0xFFF59E0B)),
|
||||
cs.warning),
|
||||
const SizedBox(width: 8),
|
||||
_buildInfoChip(
|
||||
Icons.access_time_rounded,
|
||||
ride.time.length > 5
|
||||
? ride.time.substring(0, 5)
|
||||
: ride.time,
|
||||
const Color(0xFF3B82F6)),
|
||||
cs.info),
|
||||
],
|
||||
),
|
||||
|
||||
@@ -735,16 +736,16 @@ class _RidesDashboardScreenState extends State<RidesDashboardScreen>
|
||||
width: double.infinity,
|
||||
padding: const EdgeInsets.all(10),
|
||||
decoration: BoxDecoration(
|
||||
color: const Color(0xFFEF4444).withOpacity(0.08),
|
||||
color: cs.danger.withOpacity(0.08),
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
border: Border.all(
|
||||
color: const Color(0xFFEF4444).withOpacity(0.2)),
|
||||
color: cs.danger.withOpacity(0.2)),
|
||||
),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
const Icon(Icons.info_outline_rounded,
|
||||
size: 16, color: Color(0xFFEF4444)),
|
||||
Icon(Icons.info_outline_rounded,
|
||||
size: 16, color: cs.danger),
|
||||
const SizedBox(width: 6),
|
||||
Expanded(
|
||||
child: Text(
|
||||
@@ -859,14 +860,15 @@ class _RidesDashboardScreenState extends State<RidesDashboardScreen>
|
||||
|
||||
// Helper Methods for Status
|
||||
Color _getStatusColor(String status) {
|
||||
final cs = Theme.of(context).colorScheme;
|
||||
if (status == 'Begin' || status == 'Arrived') {
|
||||
return const Color(0xFF10B981);
|
||||
return cs.success;
|
||||
}
|
||||
if (status == 'Finished') return const Color(0xFF14B8A6);
|
||||
if (status.contains('Cancel') || status == 'TimeOut') {
|
||||
return const Color(0xFFEF4444);
|
||||
return cs.danger;
|
||||
}
|
||||
if (status == 'New') return const Color(0xFF3B82F6);
|
||||
if (status == 'New') return cs.info;
|
||||
return Colors.grey;
|
||||
}
|
||||
|
||||
@@ -976,6 +978,7 @@ class _RideMapMonitorScreenState extends State<RideMapMonitorScreen> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final cs = Theme.of(context).colorScheme;
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text(
|
||||
@@ -1031,8 +1034,8 @@ class _RideMapMonitorScreenState extends State<RideMapMonitorScreen> {
|
||||
blurRadius: 5),
|
||||
],
|
||||
),
|
||||
child: const Icon(Icons.flag_rounded,
|
||||
color: Color(0xFF10B981), size: 24),
|
||||
child: Icon(Icons.flag_rounded,
|
||||
color: cs.success, size: 24),
|
||||
),
|
||||
alignment: Alignment.topCenter,
|
||||
),
|
||||
@@ -1052,8 +1055,8 @@ class _RideMapMonitorScreenState extends State<RideMapMonitorScreen> {
|
||||
blurRadius: 5),
|
||||
],
|
||||
),
|
||||
child: const Icon(Icons.location_on_rounded,
|
||||
color: Color(0xFFEF4444), size: 24),
|
||||
child: Icon(Icons.location_on_rounded,
|
||||
color: cs.danger, size: 24),
|
||||
),
|
||||
alignment: Alignment.topCenter,
|
||||
),
|
||||
@@ -1069,12 +1072,12 @@ class _RideMapMonitorScreenState extends State<RideMapMonitorScreen> {
|
||||
shape: BoxShape.circle,
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
color: const Color(0xFF3B82F6).withOpacity(0.3),
|
||||
color: cs.info.withOpacity(0.3),
|
||||
blurRadius: 8),
|
||||
],
|
||||
),
|
||||
child: const Icon(Icons.directions_car_rounded,
|
||||
color: Color(0xFF3B82F6), size: 28),
|
||||
child: Icon(Icons.directions_car_rounded,
|
||||
color: cs.info, size: 28),
|
||||
),
|
||||
),
|
||||
],
|
||||
@@ -1110,7 +1113,7 @@ class _RideMapMonitorScreenState extends State<RideMapMonitorScreen> {
|
||||
title: 'السائق',
|
||||
name: widget.ride.driverName,
|
||||
phone: widget.ride.driverPhone,
|
||||
color: const Color(0xFF3B82F6),
|
||||
color: cs.info,
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
// Passenger Info
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import 'package:siro_admin/constant/theme.dart';
|
||||
import 'package:fl_chart/fl_chart.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
@@ -303,13 +304,13 @@ class Rides extends StatelessWidget {
|
||||
Container(
|
||||
padding: const EdgeInsets.all(8),
|
||||
decoration: BoxDecoration(
|
||||
color: const Color(0xFFF59E0B).withValues(alpha: 0.12),
|
||||
color: cs.warning.withValues(alpha: 0.12),
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
border: Border.all(
|
||||
color: const Color(0xFFF59E0B).withValues(alpha: 0.25)),
|
||||
color: cs.warning.withValues(alpha: 0.25)),
|
||||
),
|
||||
child: Icon(Icons.analytics_rounded,
|
||||
color: const Color(0xFFF59E0B), size: 16),
|
||||
color: cs.warning, size: 16),
|
||||
),
|
||||
const SizedBox(width: 10),
|
||||
Text(
|
||||
@@ -338,9 +339,9 @@ class Rides extends StatelessWidget {
|
||||
_DetailItem('إجمالي الرحلات', details['total_rides'] ?? '',
|
||||
Icons.route_rounded, cs.primary),
|
||||
_DetailItem('رحلات نشطة', details['ongoing_rides'] ?? '',
|
||||
Icons.play_circle_rounded, const Color(0xFFF59E0B)),
|
||||
Icons.play_circle_rounded, cs.warning),
|
||||
_DetailItem('مكتملة', details['completed_rides'] ?? '',
|
||||
Icons.check_circle_rounded, const Color(0xFF10B981)),
|
||||
Icons.check_circle_rounded, cs.success),
|
||||
_DetailItem('ملغاة', details['cancelled_rides'] ?? '',
|
||||
Icons.cancel_rounded, cs.error),
|
||||
_DetailItem('أطول مدة', details['longest_duration'] ?? '',
|
||||
@@ -348,17 +349,17 @@ class Rides extends StatelessWidget {
|
||||
_DetailItem('إجمالي المسافة', '${details['total_distance'] ?? 0} km',
|
||||
Icons.straighten_rounded, cs.primary),
|
||||
_DetailItem('متوسط المسافة', '${details['average_distance'] ?? 0} km',
|
||||
Icons.speed_rounded, const Color(0xFFF59E0B)),
|
||||
Icons.speed_rounded, cs.warning),
|
||||
_DetailItem('أطول مسافة', '${details['longest_distance'] ?? 0} km',
|
||||
Icons.arrow_forward_rounded, cs.tertiary),
|
||||
_DetailItem('إجمالي أرباح السائقين',
|
||||
'\$${details['total_driver_earnings'] ?? 0}', Icons.payments_rounded,
|
||||
const Color(0xFF10B981)),
|
||||
cs.success),
|
||||
_DetailItem('إجمالي أرباح الشركة',
|
||||
'\$${details['total_company_earnings'] ?? 0}',
|
||||
Icons.business_center_rounded, cs.primary),
|
||||
_DetailItem('نسبة الشركة', '${details['companyPercent'] ?? 0}%',
|
||||
Icons.pie_chart_rounded, const Color(0xFFF59E0B)),
|
||||
Icons.pie_chart_rounded, cs.warning),
|
||||
];
|
||||
|
||||
return GridView.builder(
|
||||
|
||||
Reference in New Issue
Block a user