Initial commit for service

This commit is contained in:
Hamza-Ayed
2026-01-20 23:36:57 +03:00
parent 66ae6c0ddb
commit ad2511bd96
34 changed files with 3757 additions and 4761 deletions

View File

@@ -1,5 +1,6 @@
import 'dart:convert';
import 'dart:io';
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
@@ -71,6 +72,27 @@ class MainController extends GetxController {
}
}
void updateDriverField(String key, dynamic value) async {
// Update locally
driverData['message'][0][key] = value;
Log.print('driverData: ${driverData['message'][0]['driverID']}');
update();
var res = await CRUD().post(link: AppLink.updateDriver, payload: {
'driverID': driverData['message'][0]['driverID'].toString(),
key: value.toString(),
});
if (res == 'failure') {
Get.snackbar('Error', 'Failed to update driver data',
backgroundColor: AppColor.redColor);
} else {
Get.snackbar('Success', 'Driver data updated successfully',
backgroundColor: AppColor.greenColor);
}
// Optionally fetch driver again
// await getDriverData();
}
Future<void> makePhoneCall(String phoneNumber) async {
final Uri launchUri = Uri(
scheme: 'tel',
@@ -79,25 +101,29 @@ class MainController extends GetxController {
await launchUrl(launchUri);
}
void launchCommunication(
Future<void> launchCommunication(
String method, String contactInfo, String message) async {
String url;
// رقّم فقط (بدون + أو مسافات)
final phone = contactInfo.replaceAll(RegExp(r'[^0-9]'), '');
final encodedMsg = Uri.encodeComponent(message);
Uri? uri;
if (Platform.isIOS) {
switch (method) {
case 'phone':
url = 'tel:$contactInfo';
uri = Uri.parse('tel:$phone');
break;
case 'sms':
url = 'sms:$contactInfo?body=${Uri.encodeComponent(message)}';
uri = Uri.parse('sms:$phone?body=$encodedMsg');
break;
case 'whatsapp':
url =
'https://api.whatsapp.com/send?phone=$contactInfo&text=${Uri.encodeComponent(message)}';
uri = Uri.parse(
'https://api.whatsapp.com/send?phone=$phone&text=$encodedMsg');
break;
case 'email':
url =
'mailto:$contactInfo?subject=Subject&body=${Uri.encodeComponent(message)}';
uri =
Uri.parse('mailto:$contactInfo?subject=Subject&body=$encodedMsg');
break;
default:
return;
@@ -105,27 +131,32 @@ class MainController extends GetxController {
} else if (Platform.isAndroid) {
switch (method) {
case 'phone':
url = 'tel:$contactInfo';
uri = Uri.parse('tel:$phone');
break;
case 'sms':
url = 'sms:$contactInfo?body=${Uri.encodeComponent(message)}';
uri = Uri.parse('sms:$phone?body=$encodedMsg');
break;
case 'whatsapp':
// Check if WhatsApp is installed
final bool whatsappInstalled =
await canLaunchUrl(Uri.parse('whatsapp://'));
if (whatsappInstalled) {
url =
'whatsapp://send?phone=$contactInfo&text=${Uri.encodeComponent(message)}';
} else {
// Provide an alternative action, such as opening the WhatsApp Web API
url =
'https://api.whatsapp.com/send?phone=$contactInfo&text=${Uri.encodeComponent(message)}';
{
final waDeepLink =
Uri.parse('whatsapp://send?phone=$phone&text=$encodedMsg');
if (await canLaunchUrl(waDeepLink)) {
await launchUrl(waDeepLink, mode: LaunchMode.externalApplication);
return;
} else {
final webUri = Uri.parse(
'https://api.whatsapp.com/send?phone=$phone&text=$encodedMsg');
if (await canLaunchUrl(webUri)) {
await launchUrl(webUri, mode: LaunchMode.externalApplication);
return;
}
// لو ما في متصفح أساسًا
throw 'No handler for WhatsApp links';
}
}
break;
case 'email':
url =
'mailto:$contactInfo?subject=Subject&body=${Uri.encodeComponent(message)}';
uri =
Uri.parse('mailto:$contactInfo?subject=Subject&body=$encodedMsg');
break;
default:
return;
@@ -134,9 +165,14 @@ class MainController extends GetxController {
return;
}
if (await canLaunchUrl(Uri.parse(url))) {
await launchUrl(Uri.parse(url));
} else {}
if (uri != null) {
final ok = await canLaunchUrl(uri);
if (ok) {
await launchUrl(uri, mode: LaunchMode.externalApplication);
} else {
// ممكن تضيف Snackbar/Toast هنا
}
}
}
List driverNotCompleteRegistration = [];
@@ -153,6 +189,48 @@ class MainController extends GetxController {
}
}
deleteDriverNotCompleteRegistration(String phone) async {
var res = await CRUD()
.get(link: AppLink.deleteDriverNotCompleteRegistration, payload: {
'phone': phone,
});
if (res != 'failure') {
Get.snackbar(res, '', backgroundColor: AppColor.greenColor);
// await getDriverWantCompleteRegistration();
update();
} else {
Get.snackbar(res, '');
}
}
List driverWantCompleteRegistration = [];
getDriverWantCompleteRegistration() async {
var res =
await CRUD().get(link: AppLink.getDriversWaitingActive, payload: {});
if (res != 'failure') {
var d = jsonDecode(res)['message'];
driverWantCompleteRegistration = d;
filteredDrivers = driverWantCompleteRegistration;
update();
} else {
Get.snackbar(res, '');
}
}
List driversPhoneNotComplete = [];
getDriversPhoneNotComplete() async {
var res =
await CRUD().get(link: AppLink.getDriversPhoneNotComplete, payload: {});
if (res != 'failure') {
var d = jsonDecode(res)['message'];
driverWantCompleteRegistration = d;
filteredDrivers = driverWantCompleteRegistration;
update();
} else {
Get.snackbar(res, '');
}
}
List newDriverRegister = [];
getNewDriverRegister() async {
var res = await CRUD().get(link: AppLink.getNewDriverRegister, payload: {});
@@ -364,6 +442,7 @@ class MainController extends GetxController {
payload: {"phone": phone, "editor": editor, "note": note});
if (res != 'failure') {
Get.snackbar(res, '', backgroundColor: AppColor.greenColor);
getDriversPhoneNotComplete();
notesController.clear();
} else {
Get.snackbar(res, '', backgroundColor: AppColor.redColor);
@@ -387,6 +466,22 @@ class MainController extends GetxController {
if (formKey.currentState!.validate()) {
await getDriverByPhone();
Get.back();
if (driverData.isEmpty) {
Get.snackbar('Error', 'Driver not found', backgroundColor: Colors.red);
return;
}
Get.to(() => DriverPage());
}
}
searchDriverByNational() async {
if (formKey.currentState!.validate()) {
await getDriverByNational();
Get.back();
if (driverData.isEmpty) {
Get.snackbar('Error', 'Driver not found', backgroundColor: Colors.red);
return;
}
Get.to(() => DriverPage());
}
}
@@ -394,7 +489,7 @@ class MainController extends GetxController {
getPassengersByPhone() async {
var res = await CRUD().get(
link: AppLink.getPassengersByPhone,
payload: {"phone": '+2${passengerPhoneController.text}'});
payload: {"phone": passengerPhoneController.text});
if (res != 'failure') {
var d = jsonDecode(res);
@@ -406,12 +501,28 @@ class MainController extends GetxController {
getDriverByPhone() async {
var res = await CRUD().get(
link: AppLink.getDriverByPhone,
payload: {"phone": '+2${driverPhoneController.text}'});
payload: {"phone": driverPhoneController.text});
if (res != 'failure') {
var d = jsonDecode(res);
driverData = d;
update();
} else {
Get.snackbar('Error', 'Driver not found', backgroundColor: Colors.red);
}
}
getDriverByNational() async {
var res = await CRUD().get(
link: AppLink.getDriverByNational,
payload: {"national_number": driverPhoneController.text});
if (res != 'failure') {
var d = jsonDecode(res);
driverData = d;
update();
} else {
Get.snackbar('Error', 'Driver not found', backgroundColor: Colors.red);
}
}
}