Update: 2026-06-26 01:43:37

This commit is contained in:
Hamza-Ayed
2026-06-26 01:43:37 +03:00
parent 3002dbd517
commit bd3ba7ecd7
22 changed files with 227 additions and 183 deletions

View File

@@ -11,6 +11,7 @@ import 'package:siro_service/views/widgets/my_dialog.dart';
import 'package:url_launcher/url_launcher.dart';
import '../../print.dart';
import '../../views/widgets/mycircular.dart';
import 'pages/passengers_page.dart';
class MainController extends GetxController {
@@ -77,8 +78,7 @@ class MainController extends GetxController {
update();
Get.back();
if (passengerData.isEmpty) {
Get.snackbar('Error'.tr, 'Passenger not found'.tr,
backgroundColor: Colors.red, colorText: Colors.white);
mySnackbarError('Passenger not found'.tr);
return;
}
Get.to(() => PassengersPage());
@@ -111,11 +111,9 @@ class MainController extends GetxController {
key: value.toString(),
});
if (res == 'failure') {
Get.snackbar('Error', 'Failed to update driver data',
backgroundColor: AppColor.redColor);
mySnackbarError('Failed to update driver data'.tr);
} else {
Get.snackbar('Success', 'Driver data updated successfully',
backgroundColor: AppColor.greenColor);
mySnackbarSuccess('Driver data updated successfully'.tr);
}
// Optionally fetch driver again
// await getDriverData();
@@ -222,11 +220,11 @@ class MainController extends GetxController {
'phone': phone,
});
if (res != 'failure') {
Get.snackbar(res, '', backgroundColor: AppColor.greenColor);
mySnackbarSuccess(res is Map ? (res['message'] ?? 'Success'.tr) : res.toString());
// await getDriverWantCompleteRegistration();
update();
} else {
Get.snackbar(res, '');
mySnackbarError(res is Map ? (res['message'] ?? 'Error'.tr) : res.toString());
}
}
@@ -255,7 +253,7 @@ class MainController extends GetxController {
filteredDrivers = driverWantCompleteRegistration;
update();
} else {
Get.snackbar(res, '');
mySnackbarError(res is Map ? (res['message'] ?? 'Error'.tr) : res.toString());
}
}
@@ -278,7 +276,7 @@ class MainController extends GetxController {
"notes": notesController.text,
});
if (res != 'failure') {
Get.snackbar('Success'.tr, '', backgroundColor: AppColor.greenColor);
mySnackbarSuccess('Success'.tr);
}
}
@@ -292,7 +290,7 @@ class MainController extends GetxController {
passengerNotCompleteRegistration = d;
update();
} else {
Get.snackbar(res, '');
mySnackbarError(res is Map ? (res['message'] ?? 'Error'.tr) : res.toString());
}
}
@@ -395,18 +393,15 @@ class MainController extends GetxController {
payload: payload),
]);
Get.snackbar('Success', 'Registration successful',
backgroundColor: AppColor.greenColor);
mySnackbarSuccess('Registration successful'.tr);
Get.back();
} else {
Log.print('Error: Unexpected status: ${status['status']}');
Get.snackbar('Error', 'Registration failed',
backgroundColor: Colors.red);
mySnackbarError('Registration failed'.tr);
}
} catch (e) {
Log.print('Error: $e');
Get.snackbar('Error', 'An error occurred during registration',
backgroundColor: Colors.red);
mySnackbarError('An error occurred during registration'.tr);
}
}
@@ -435,7 +430,7 @@ class MainController extends GetxController {
});
Log.print('res: ${res}');
if (res != 'failure') {
// Get.snackbar(res, '', backgroundColor: AppColor.greenColor);
// mySnackbarSuccess(res is Map ? (res['message'] ?? 'Success'.tr) : res.toString());
Get.back();
carplateController.clear();
yearController.clear();
@@ -446,7 +441,7 @@ class MainController extends GetxController {
await getCarPlateNotEdit();
update();
} else {
Get.snackbar(res, '', backgroundColor: AppColor.redColor);
mySnackbarError(res is Map ? (res['message'] ?? 'Error'.tr) : res.toString());
}
}
@@ -456,12 +451,12 @@ class MainController extends GetxController {
// "carPlate": carPlate,
// });
// if (res != 'failure') {
// Get.snackbar(res, '', backgroundColor: AppColor.greenColor);
// mySnackbarSuccess(res is Map ? (res['message'] ?? 'Success'.tr) : res.toString());
// carplateController.clear();
// await getCarPlateNotEdit();
// update();
// } else {
// Get.snackbar(res, '', backgroundColor: AppColor.redColor);
// mySnackbarError(res is Map ? (res['message'] ?? 'Error'.tr) : res.toString());
// }
// }
@@ -470,11 +465,11 @@ class MainController extends GetxController {
link: AppLink.addNotesDriver,
payload: {"phone": phone, "editor": editor, "note": note});
if (res != 'failure') {
Get.snackbar(res, '', backgroundColor: AppColor.greenColor);
mySnackbarSuccess(res is Map ? (res['message'] ?? 'Success'.tr) : res.toString());
getDriversPhoneNotComplete();
notesController.clear();
} else {
Get.snackbar(res, '', backgroundColor: AppColor.redColor);
mySnackbarError(res is Map ? (res['message'] ?? 'Error'.tr) : res.toString());
}
}
@@ -484,10 +479,10 @@ class MainController extends GetxController {
link: AppLink.addNotesPassenger,
payload: {"phone": phone, "editor": editor, "note": note});
if (res != 'failure') {
Get.snackbar(res, '', backgroundColor: AppColor.greenColor);
mySnackbarSuccess(res is Map ? (res['message'] ?? 'Success'.tr) : res.toString());
notesController.clear();
} else {
Get.snackbar(res, '', backgroundColor: AppColor.redColor);
mySnackbarError(res is Map ? (res['message'] ?? 'Error'.tr) : res.toString());
}
}
@@ -500,8 +495,7 @@ class MainController extends GetxController {
update();
Get.back();
if (driverData.isEmpty) {
Get.snackbar('Error'.tr, 'Driver not found'.tr,
backgroundColor: Colors.red, colorText: Colors.white);
mySnackbarError('Driver not found'.tr);
return;
}
Get.to(() => DriverPage());
@@ -517,8 +511,7 @@ class MainController extends GetxController {
update();
Get.back();
if (driverData.isEmpty) {
Get.snackbar('Error'.tr, 'Driver not found'.tr,
backgroundColor: Colors.red, colorText: Colors.white);
mySnackbarError('Driver not found'.tr);
return;
}
Get.to(() => DriverPage());
@@ -547,7 +540,7 @@ class MainController extends GetxController {
driverData = d;
update();
} else {
Get.snackbar('Error', 'Driver not found', backgroundColor: Colors.red);
mySnackbarError('Driver not found'.tr);
}
}
@@ -561,7 +554,7 @@ class MainController extends GetxController {
driverData = d;
update();
} else {
Get.snackbar('Error', 'Driver not found', backgroundColor: Colors.red);
mySnackbarError('Driver not found'.tr);
}
}
}

View File

@@ -2,6 +2,7 @@ import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:siro_service/views/widgets/mycircular.dart';
import 'package:siro_service/controller/functions/encrypt_decrypt.dart';
import 'package:siro_service/views/widgets/my_scafold.dart';
@@ -99,7 +100,7 @@ class Driverthebest extends GetxController {
driver = res['message'];
update();
} else {
Get.snackbar('error', '', backgroundColor: AppColor.redColor);
mySnackbarError('Error'.tr);
}
}

View File

@@ -396,7 +396,7 @@ class ReviewDriverPage extends StatelessWidget {
padding: const EdgeInsets.symmetric(vertical: 6),
child: Obx(
() => DropdownButtonFormField<String>(
initialValue: c.selectedGender.value.isEmpty
value: c.selectedGender.value.isEmpty
? null
: c.selectedGender.value,
isExpanded: true,
@@ -424,7 +424,7 @@ class ReviewDriverPage extends StatelessWidget {
padding: const EdgeInsets.symmetric(vertical: 6),
child: Obx(
() => DropdownButtonFormField<String>(
initialValue: c.colorHex.value.isEmpty ? null : c.colorHex.value,
value: c.colorHex.value.isEmpty ? null : c.colorHex.value,
isExpanded: true,
decoration: InputDecoration(
labelText: label.tr,
@@ -467,7 +467,7 @@ class ReviewDriverPage extends StatelessWidget {
padding: const EdgeInsets.symmetric(vertical: 6),
child: Obx(
() => DropdownButtonFormField<String>(
initialValue: ReviewDriverController.kFuelOptions
value: ReviewDriverController.kFuelOptions
.contains(c.selectedFuel.value)
? c.selectedFuel.value
: null,

View File

@@ -1,6 +1,7 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:siro_service/views/widgets/mycircular.dart';
import 'package:siro_service/constant/links.dart';
import 'package:siro_service/controller/functions/crud.dart';
import 'package:siro_service/views/widgets/my_scafold.dart';
@@ -43,7 +44,7 @@ class ActiveRideModel {
status: ride['status'] ?? '',
startLocation: ride['start_location'] ?? '',
endLocation: ride['end_location'] ?? '',
driverName: driver['fullname'] ?? driver['first_name'] ?? 'غير معروف',
driverName: driver['fullname'] ?? driver['first_name'] ?? 'Unknown'.tr,
driverPhone: driver['phone'] ?? '',
passengerName: '',
passengerPhone: '',
@@ -105,8 +106,7 @@ class RideMonitorServiceController extends GetxController {
Future<void> searchByPhone() async {
final phone = phoneCtrl.text.trim();
if (phone.isEmpty) {
Get.snackbar('تنبيه', 'يرجى إدخال رقم الهاتف',
backgroundColor: Colors.redAccent, colorText: Colors.white);
mySnackbarWarning('يرجى إدخال رقم الهاتف'.tr);
return;
}
@@ -176,8 +176,7 @@ class RideMonitorServiceController extends GetxController {
Future<void> searchByRideId() async {
final rideId = rideIdCtrl.text.trim();
if (rideId.isEmpty) {
Get.snackbar('تنبيه', 'يرجى إدخال رقم الرحلة',
backgroundColor: Colors.redAccent, colorText: Colors.white);
mySnackbarWarning('يرجى إدخال رقم الرحلة'.tr);
return;
}
@@ -240,7 +239,7 @@ class RideMonitorServicePage extends StatelessWidget {
final controller = Get.put(RideMonitorServiceController());
return MyScaffold(
title: 'متابعة الرحلات',
title: 'Ride monitoring'.tr,
isleading: true,
body: [
Padding(
@@ -253,7 +252,7 @@ class RideMonitorServicePage extends StatelessWidget {
children: [
Expanded(
child: _buildModeButton(
'رقم الهاتف',
'Phone number'.tr,
Icons.phone_rounded,
controller.searchMode.value == 'phone',
() => controller.searchMode.value = 'phone',
@@ -262,7 +261,7 @@ class RideMonitorServicePage extends StatelessWidget {
const SizedBox(width: 12),
Expanded(
child: _buildModeButton(
'رقم الرحلة',
'Trip number'.tr,
Icons.confirmation_number_rounded,
controller.searchMode.value == 'ride_id',
() => controller.searchMode.value = 'ride_id',
@@ -320,7 +319,7 @@ class RideMonitorServicePage extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'نتائج البحث (${controller.activeRides.length})',
'${'Search results'.tr} (${controller.activeRides.length})',
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
@@ -381,8 +380,8 @@ class RideMonitorServicePage extends StatelessWidget {
controller: controller.phoneCtrl,
keyboardType: TextInputType.phone,
decoration: InputDecoration(
labelText: 'رقم الهاتف',
hintText: 'مثال: 0992952235 أو 079XXXXXXX',
labelText: 'Phone number'.tr,
hintText: '0992952235 or 079XXXXXXX'.tr,
prefixIcon: const Icon(Icons.phone_rounded),
border: OutlineInputBorder(borderRadius: BorderRadius.circular(12)),
),
@@ -394,8 +393,8 @@ class RideMonitorServicePage extends StatelessWidget {
child: ElevatedButton.icon(
onPressed: () => controller.searchByPhone(),
icon: const Icon(Icons.search_rounded),
label: const Text('بحث عن رحلات',
style: TextStyle(fontWeight: FontWeight.bold)),
label: Text('Search for trips'.tr,
style: const TextStyle(fontWeight: FontWeight.bold)),
style: ElevatedButton.styleFrom(
backgroundColor: const Color(0xFF4318FF),
foregroundColor: Colors.white,
@@ -415,8 +414,8 @@ class RideMonitorServicePage extends StatelessWidget {
controller: controller.rideIdCtrl,
keyboardType: TextInputType.number,
decoration: InputDecoration(
labelText: 'رقم الرحلة',
hintText: 'مثال: 12345',
labelText: 'Trip number'.tr,
hintText: 'Example: 12345'.tr,
prefixIcon: const Icon(Icons.confirmation_number_rounded),
border: OutlineInputBorder(borderRadius: BorderRadius.circular(12)),
),
@@ -428,8 +427,8 @@ class RideMonitorServicePage extends StatelessWidget {
child: ElevatedButton.icon(
onPressed: () => controller.searchByRideId(),
icon: const Icon(Icons.search_rounded),
label: const Text('بحث برقم الرحلة',
style: TextStyle(fontWeight: FontWeight.bold)),
label: Text('Search by trip number'.tr,
style: const TextStyle(fontWeight: FontWeight.bold)),
style: ElevatedButton.styleFrom(
backgroundColor: const Color(0xFF4318FF),
foregroundColor: Colors.white,
@@ -483,7 +482,7 @@ class RideMonitorServicePage extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'رحلة #${ride.rideId}',
'${'Trip'.tr} #${ride.rideId}',
style: const TextStyle(
fontSize: 15, fontWeight: FontWeight.bold),
),
@@ -509,14 +508,14 @@ class RideMonitorServicePage extends StatelessWidget {
style: TextStyle(color: Colors.grey[500], fontSize: 12)),
const Divider(height: 20),
// Info rows
_buildInfoRow(Icons.person_rounded, 'السائق: ${ride.driverName}'),
_buildInfoRow(Icons.person_rounded, '${'Driver'.tr}: ${ride.driverName}'),
if (ride.driverPhone.isNotEmpty)
_buildInfoRow(
Icons.phone_rounded, 'هاتف السائق: ${ride.driverPhone}'),
_buildInfoRow(Icons.payments_rounded, 'السعر: ${ride.price}'),
Icons.phone_rounded, '${'Driver phone'.tr}: ${ride.driverPhone}'),
_buildInfoRow(Icons.payments_rounded, '${'Price'.tr}: ${ride.price}'),
if (ride.carType.isNotEmpty)
_buildInfoRow(
Icons.directions_car_rounded, 'نوع السيارة: ${ride.carType}'),
Icons.directions_car_rounded, '${'Car type'.tr}: ${ride.carType}'),
],
),
),

View File

@@ -1,6 +1,7 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:siro_service/views/widgets/mycircular.dart';
import 'package:siro_service/constant/colors.dart';
import 'package:siro_service/constant/style.dart';
import 'package:siro_service/views/widgets/elevated_btn.dart';
@@ -144,7 +145,7 @@ class DriverCard extends StatelessWidget {
final phone = driver['phone'];
if (phone == null || phone.toString().isEmpty) {
Get.snackbar("خطأ", "لا يوجد رقم هاتف لهذا السائق");
mySnackbarError('لا يوجد رقم هاتف لهذا السائق'.tr);
return;
}

View File

@@ -10,6 +10,7 @@ import 'package:siro_service/controller/functions/crud.dart';
import 'package:siro_service/main.dart';
import 'package:siro_service/print.dart';
import 'package:siro_service/views/widgets/my_dialog.dart';
import 'package:siro_service/views/widgets/mycircular.dart';
import 'pages/registration_captain_page.dart';
@@ -119,7 +120,7 @@ class RegisterCaptainServiceController extends GetxController {
}
}
} catch (e) {
Get.snackbar('Error', 'An unexpected error occurred: $e');
mySnackbarError('An unexpected error occurred: \$e'.tr);
} finally {
isLoading.value = false;
}
@@ -271,21 +272,11 @@ class RegisterCaptainServiceController extends GetxController {
// Get.off(() => RegisterCaptain());
});
} else {
Get.snackbar(
'Error'.tr,
'Failed to update driver: ${decodedResponse is Map ? decodedResponse['message'] : 'failure'}'.tr,
backgroundColor: Colors.red,
colorText: Colors.white,
);
mySnackbarError('Failed to update driver: ${decodedResponse is Map ? decodedResponse['message'] : 'failure'}'.tr);
}
}).catchError((error) {
isLoading.value = false;
Get.snackbar(
'Error'.tr,
'An error occurred: $error'.tr,
backgroundColor: Colors.red,
colorText: Colors.white,
);
mySnackbarError('An error occurred: $error'.tr);
});
}

View File

@@ -9,6 +9,7 @@ import 'package:siro_service/controller/functions/crud.dart';
import 'package:siro_service/main.dart';
import 'package:siro_service/print.dart';
import 'package:siro_service/views/widgets/my_dialog.dart';
import 'package:siro_service/views/widgets/mycircular.dart';
import 'pages/registration_captain_page.dart';
@@ -118,7 +119,7 @@ class RegisterCaptainController extends GetxController {
}
}
} catch (e) {
Get.snackbar('Error', 'An unexpected error occurred: $e');
mySnackbarError('An unexpected error occurred: \$e'.tr);
} finally {
isLoading.value = false;
}
@@ -257,21 +258,11 @@ class RegisterCaptainController extends GetxController {
// Get.off(() => RegisterCaptain());
});
} else {
Get.snackbar(
'Error'.tr,
'Failed to update driver: ${decodedResponse is Map ? decodedResponse['message'] : 'failure'}'.tr,
backgroundColor: Colors.red,
colorText: Colors.white,
);
mySnackbarError('Failed to update driver: ${decodedResponse is Map ? decodedResponse['message'] : 'failure'}'.tr);
}
}).catchError((error) {
isLoading.value = false;
Get.snackbar(
'Error'.tr,
'An error occurred: $error'.tr,
backgroundColor: Colors.red,
colorText: Colors.white,
);
mySnackbarError('An error occurred: $error'.tr);
});
}

View File

@@ -172,7 +172,7 @@ class ReviewDriverController extends GetxController {
_populateDocUrls(raw['documents']);
}
} catch (e) {
mySnackeBarError('Failed to load data: $e');
mySnackbarError('Failed to load data: $e');
} finally {
isLoading.value = false;
}
@@ -315,10 +315,10 @@ class ReviewDriverController extends GetxController {
if (response != 'failure' && response['status'] == 'success') {
mySnackbarSuccess('Data saved successfully');
} else {
mySnackeBarError('Failed to save changes');
mySnackbarError('Failed to save changes');
}
} catch (e) {
mySnackeBarError('Error: $e');
mySnackbarError('Error: $e');
} finally {
isSaving.value = false;
}
@@ -337,10 +337,10 @@ class ReviewDriverController extends GetxController {
await Future.delayed(const Duration(milliseconds: 500));
Get.back();
} else {
mySnackeBarError('Failed to activate driver');
mySnackbarError('Failed to activate driver');
}
} catch (e) {
mySnackeBarError('Error: $e');
mySnackbarError('Error: $e');
} finally {
isSaving.value = false;
}
@@ -348,7 +348,7 @@ class ReviewDriverController extends GetxController {
Future<void> rejectDriver(String reason) async {
if (reason.trim().isEmpty) {
mySnackeBarError('Please enter a rejection reason');
mySnackbarError('Please enter a rejection reason');
return;
}
isSaving.value = true;
@@ -365,10 +365,10 @@ class ReviewDriverController extends GetxController {
await Future.delayed(const Duration(milliseconds: 500));
Get.back();
} else {
mySnackeBarError('Failed to reject driver');
mySnackbarError('Failed to reject driver');
}
} catch (e) {
mySnackeBarError('Error: $e');
mySnackbarError('Error: $e');
} finally {
isSaving.value = false;
}