25-11-18/1
This commit is contained in:
@@ -42,10 +42,10 @@ android {
|
|||||||
// Merged the two defaultConfig sections into one. This is the correct way.
|
// Merged the two defaultConfig sections into one. This is the correct way.
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId = "com.intaleq_driver"
|
applicationId = "com.intaleq_driver"
|
||||||
minSdk = 29
|
minSdk = 23
|
||||||
targetSdk = 36
|
targetSdk = 36
|
||||||
versionCode = 29
|
versionCode = 36
|
||||||
versionName = '1.0.29' // I've used the higher version name
|
versionName = '1.0.36' // I've used the higher version name
|
||||||
multiDexEnabled = true
|
multiDexEnabled = true
|
||||||
|
|
||||||
ndk {
|
ndk {
|
||||||
|
|||||||
@@ -76,7 +76,8 @@ class AppLink {
|
|||||||
static String updatePassengersWallet = "$wallet/update.php";
|
static String updatePassengersWallet = "$wallet/update.php";
|
||||||
|
|
||||||
static String getWalletByDriver = "$walletDriver/getWalletByDriver.php";
|
static String getWalletByDriver = "$walletDriver/getWalletByDriver.php";
|
||||||
static String driverStatistic = "$walletDriver/driverStatistic.php";
|
static String driverStatistic =
|
||||||
|
"$endPoint/ride/driverWallet/driverStatistic.php";
|
||||||
static String getDriverDetails =
|
static String getDriverDetails =
|
||||||
"$seferCairoServer/ride/driverWallet/getDriverDetails.php";
|
"$seferCairoServer/ride/driverWallet/getDriverDetails.php";
|
||||||
static String getDriverWeekPaymentMove =
|
static String getDriverWeekPaymentMove =
|
||||||
|
|||||||
@@ -316,14 +316,12 @@ Download the Intaleq app now and enjoy your ride!
|
|||||||
/// Formats a phone number to the standard Syrian international format (+963...).
|
/// Formats a phone number to the standard Syrian international format (+963...).
|
||||||
String _formatSyrianPhoneNumber(String input) {
|
String _formatSyrianPhoneNumber(String input) {
|
||||||
String digitsOnly = input.replaceAll(RegExp(r'\D'), '');
|
String digitsOnly = input.replaceAll(RegExp(r'\D'), '');
|
||||||
if (digitsOnly.startsWith('963')) {
|
|
||||||
return '+$digitsOnly';
|
|
||||||
}
|
|
||||||
if (digitsOnly.startsWith('09') && digitsOnly.length == 10) {
|
if (digitsOnly.startsWith('09') && digitsOnly.length == 10) {
|
||||||
return '+963${digitsOnly.substring(1)}';
|
return '963${digitsOnly.substring(1)}';
|
||||||
}
|
}
|
||||||
if (digitsOnly.length == 9 && digitsOnly.startsWith('9')) {
|
if (digitsOnly.length == 9 && digitsOnly.startsWith('9')) {
|
||||||
return '+963$digitsOnly';
|
return '963$digitsOnly';
|
||||||
}
|
}
|
||||||
return input; // Fallback for unrecognized formats
|
return input; // Fallback for unrecognized formats
|
||||||
}
|
}
|
||||||
@@ -386,7 +384,7 @@ Download the Intaleq app now and enjoy your ride!
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (response != 'failure') {
|
if (response != 'failure') {
|
||||||
var d = jsonDecode(response);
|
var d = (response);
|
||||||
mySnackbarSuccess('Invite sent successfully'.tr);
|
mySnackbarSuccess('Invite sent successfully'.tr);
|
||||||
String message = '${'*Intaleq APP CODE*'.tr}\n\n'
|
String message = '${'*Intaleq APP CODE*'.tr}\n\n'
|
||||||
'${"Use this code in registration".tr}\n\n'
|
'${"Use this code in registration".tr}\n\n'
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ class LoginDriverController extends GetxController {
|
|||||||
// Log.print('response.request: ${response1.request}');
|
// Log.print('response.request: ${response1.request}');
|
||||||
// Log.print('response.body: ${response1.body}');
|
// Log.print('response.body: ${response1.body}');
|
||||||
// print(payload);
|
// print(payload);
|
||||||
Log.print('payment["jwt"]: ${jsonDecode(response1.body)['jwt']}');
|
// Log.print('payment["jwt"]: ${jsonDecode(response1.body)['jwt']}');
|
||||||
await box.write(BoxName.hmac, jsonDecode(response1.body)['hmac']);
|
await box.write(BoxName.hmac, jsonDecode(response1.body)['hmac']);
|
||||||
return jsonDecode(response1.body)['jwt'].toString();
|
return jsonDecode(response1.body)['jwt'].toString();
|
||||||
}
|
}
|
||||||
@@ -199,7 +199,7 @@ class LoginDriverController extends GetxController {
|
|||||||
'password': box.read(BoxName.emailDriver),
|
'password': box.read(BoxName.emailDriver),
|
||||||
'aud': '${AK.allowed}$dev',
|
'aud': '${AK.allowed}$dev',
|
||||||
};
|
};
|
||||||
print(payload);
|
// print(payload);
|
||||||
var response1 = await http.post(
|
var response1 = await http.post(
|
||||||
Uri.parse(AppLink.loginJwtDriver),
|
Uri.parse(AppLink.loginJwtDriver),
|
||||||
body: payload,
|
body: payload,
|
||||||
@@ -263,7 +263,7 @@ class LoginDriverController extends GetxController {
|
|||||||
// 'email': email ?? 'yet',
|
// 'email': email ?? 'yet',
|
||||||
'id': driverID,
|
'id': driverID,
|
||||||
});
|
});
|
||||||
Log.print('res: ${res}');
|
// Log.print('res: ${res}');
|
||||||
if (res == 'failure') {
|
if (res == 'failure') {
|
||||||
await isPhoneVerified();
|
await isPhoneVerified();
|
||||||
isloading = false; // <--- أضفت هذا أيضاً
|
isloading = false; // <--- أضفت هذا أيضاً
|
||||||
|
|||||||
@@ -47,11 +47,13 @@ class PhoneAuthHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Verifies the OTP and logs the user in.
|
/// Verifies the OTP and logs the user in.
|
||||||
static Future<void> verifyOtp(String phoneNumber, String otp) async {
|
static Future<void> verifyOtp(String phoneNumber) async {
|
||||||
try {
|
try {
|
||||||
final response = await CRUD().post(
|
final response = await CRUD().post(
|
||||||
link: _verifyOtpUrl,
|
link: _verifyOtpUrl,
|
||||||
payload: {'phone_number': phoneNumber, 'otp': otp},
|
payload: {
|
||||||
|
'phone_number': phoneNumber,
|
||||||
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
if (response != 'failure') {
|
if (response != 'failure') {
|
||||||
|
|||||||
@@ -386,6 +386,7 @@ class LocationController extends GetxController {
|
|||||||
final String driverId =
|
final String driverId =
|
||||||
(box.read(BoxName.driverID) ?? '').toString().trim();
|
(box.read(BoxName.driverID) ?? '').toString().trim();
|
||||||
if (driverId.isEmpty) return; // لا ترسل بدون DriverID
|
if (driverId.isEmpty) return; // لا ترسل بدون DriverID
|
||||||
|
final String deviceTimestamp = DateTime.now().toIso8601String();
|
||||||
|
|
||||||
// ✅ كل شيء Strings فقط
|
// ✅ كل شيء Strings فقط
|
||||||
final Map<String, String> payload = {
|
final Map<String, String> payload = {
|
||||||
@@ -398,6 +399,7 @@ class LocationController extends GetxController {
|
|||||||
'distance': safeDistKm.toStringAsFixed(2),
|
'distance': safeDistKm.toStringAsFixed(2),
|
||||||
'status': driverStatus,
|
'status': driverStatus,
|
||||||
'carType': (box.read(BoxName.carType) ?? 'default').toString(),
|
'carType': (box.read(BoxName.carType) ?? 'default').toString(),
|
||||||
|
'device_timestamp': deviceTimestamp,
|
||||||
};
|
};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -199,7 +199,7 @@ class DeviceHelper {
|
|||||||
|
|
||||||
// Generate and return the encrypted fingerprint
|
// Generate and return the encrypted fingerprint
|
||||||
final String fingerprint = '${deviceId}_${deviceModel}_$osVersion';
|
final String fingerprint = '${deviceId}_${deviceModel}_$osVersion';
|
||||||
Log.print('fingerprint: ${fingerprint}');
|
// Log.print('fingerprint: ${fingerprint}');
|
||||||
// print(EncryptionHelper.instance.encryptData(fingerprint));
|
// print(EncryptionHelper.instance.encryptData(fingerprint));
|
||||||
return (fingerprint);
|
return (fingerprint);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ class DurationController extends GetxController {
|
|||||||
getStaticDriver() async {
|
getStaticDriver() async {
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
update();
|
update();
|
||||||
var res = await CRUD().get(
|
var res = await CRUD().getWallet(
|
||||||
link: AppLink.driverStatistic,
|
link: AppLink.driverStatistic,
|
||||||
payload: {'driverID': box.read(BoxName.driverID)});
|
payload: {'driverID': box.read(BoxName.driverID)});
|
||||||
if (res == 'failure') {
|
if (res == 'failure') {
|
||||||
|
|||||||
@@ -3,7 +3,11 @@ import 'dart:convert';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
// import 'package:google_maps_flutter/google_maps_flutter.dart';
|
||||||
|
// import 'package:flutter_map/flutter_map.dart';
|
||||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
||||||
|
// import 'package:latlong2/latlong.dart'
|
||||||
|
// as latlng; // هذا مهم جداً للتعامل مع إحداثيات OSM
|
||||||
import 'package:sefer_driver/constant/box_name.dart';
|
import 'package:sefer_driver/constant/box_name.dart';
|
||||||
import 'package:sefer_driver/controller/home/captin/map_driver_controller.dart';
|
import 'package:sefer_driver/controller/home/captin/map_driver_controller.dart';
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
@@ -54,7 +58,9 @@ class HomeCaptainController extends GetxController {
|
|||||||
bool mapTrafficON = false;
|
bool mapTrafficON = false;
|
||||||
double widthMapTypeAndTraffic = 50;
|
double widthMapTypeAndTraffic = 50;
|
||||||
// Inject the LocationController class
|
// Inject the LocationController class
|
||||||
final locationController = Get.put(LocationController());
|
// final locationController = Get.put(LocationController());
|
||||||
|
// الكود الصحيح
|
||||||
|
final locationController = Get.find<LocationController>();
|
||||||
// final locationBackController = Get.put(LocationBackgroundController());
|
// final locationBackController = Get.put(LocationBackgroundController());
|
||||||
String formatDuration(Duration duration) {
|
String formatDuration(Duration duration) {
|
||||||
String twoDigits(int n) => n.toString().padLeft(2, "0");
|
String twoDigits(int n) => n.toString().padLeft(2, "0");
|
||||||
@@ -181,31 +187,24 @@ class HomeCaptainController extends GetxController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// late GoogleMapController mapHomeCaptainController;
|
// late GoogleMapController mapHomeCaptainController;
|
||||||
// void onMapCreated(GoogleMapController controller) {
|
GoogleMapController? mapHomeCaptainController;
|
||||||
// mapHomeCaptainController = controller;
|
|
||||||
// controller.getVisibleRegion();
|
|
||||||
// // Animate camera to user location (optional)
|
|
||||||
// controller.animateCamera(
|
|
||||||
// CameraUpdate.newLatLng(Get.find<LocationController>().myLocation),
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
GoogleMapController? mapHomeCaptainController; // Nullable controller
|
|
||||||
|
|
||||||
void onMapCreated(GoogleMapController controller) {
|
void onMapCreated(GoogleMapController controller) {
|
||||||
mapHomeCaptainController = controller;
|
mapHomeCaptainController = controller;
|
||||||
|
controller.getVisibleRegion();
|
||||||
// Optional: Check if the controller is still null (just for safety)
|
// Animate camera to user location (optional)
|
||||||
if (mapHomeCaptainController != null) {
|
controller.animateCamera(
|
||||||
// Get the visible region
|
CameraUpdate.newLatLng(Get.find<LocationController>().myLocation),
|
||||||
controller.getVisibleRegion();
|
);
|
||||||
|
|
||||||
// Animate camera to user location (optional)
|
|
||||||
controller.animateCamera(
|
|
||||||
CameraUpdate.newLatLng(Get.find<LocationController>().myLocation),
|
|
||||||
);
|
|
||||||
} else {}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// قم بإنشائه مباشرة
|
||||||
|
// final MapController mapController = MapController();
|
||||||
|
// bool isMapReady = false;
|
||||||
|
// void onMapReady() {
|
||||||
|
// isMapReady = true;
|
||||||
|
// print("Map is ready to be moved!");
|
||||||
|
// }
|
||||||
|
|
||||||
void savePeriod(Duration period) {
|
void savePeriod(Duration period) {
|
||||||
final periods = box.read<List<dynamic>>(BoxName.periods) ?? [];
|
final periods = box.read<List<dynamic>>(BoxName.periods) ?? [];
|
||||||
periods.add(period.inSeconds);
|
periods.add(period.inSeconds);
|
||||||
@@ -279,10 +278,25 @@ class HomeCaptainController extends GetxController {
|
|||||||
getAllPayment();
|
getAllPayment();
|
||||||
startPeriodicExecution();
|
startPeriodicExecution();
|
||||||
getCaptainWalletFromBuyPoints();
|
getCaptainWalletFromBuyPoints();
|
||||||
onMapCreated(mapHomeCaptainController!);
|
// onMapCreated(mapHomeCaptainController!);
|
||||||
// totalPoints = Get.find<CaptainWalletController>().totalPoints.toString();
|
// totalPoints = Get.find<CaptainWalletController>().totalPoints.toString();
|
||||||
getRefusedOrderByCaptain();
|
getRefusedOrderByCaptain();
|
||||||
box.write(BoxName.statusDriverLocation, 'off');
|
box.write(BoxName.statusDriverLocation, 'off');
|
||||||
|
locationController.addListener(() {
|
||||||
|
// فقط إذا كان السائق "متصل" والخريطة جاهزة
|
||||||
|
if (isActive && mapHomeCaptainController != null) {
|
||||||
|
mapHomeCaptainController!.animateCamera(
|
||||||
|
CameraUpdate.newCameraPosition(
|
||||||
|
CameraPosition(
|
||||||
|
target: locationController.myLocation, // الموقع الجديد
|
||||||
|
zoom: 17.5,
|
||||||
|
tilt: 50.0,
|
||||||
|
bearing: locationController.heading, // اتجاه السيارة
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
// LocationController().getLocation();
|
// LocationController().getLocation();
|
||||||
super.onInit();
|
super.onInit();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ import '../../../views/home/Captin/home_captain/home_captin.dart';
|
|||||||
import '../../firebase/firbase_messge.dart';
|
import '../../firebase/firbase_messge.dart';
|
||||||
import '../../firebase/notification_service.dart';
|
import '../../firebase/notification_service.dart';
|
||||||
import '../../functions/crud.dart';
|
import '../../functions/crud.dart';
|
||||||
import '../../functions/encrypt_decrypt.dart';
|
|
||||||
import '../../functions/location_controller.dart';
|
import '../../functions/location_controller.dart';
|
||||||
import '../../functions/tts.dart';
|
import '../../functions/tts.dart';
|
||||||
|
|
||||||
@@ -210,12 +209,16 @@ class MapDriverController extends GetxController {
|
|||||||
tone: 'cancel',
|
tone: 'cancel',
|
||||||
driverList: [], category: "Cancel Trip from driver",
|
driverList: [], category: "Cancel Trip from driver",
|
||||||
);
|
);
|
||||||
await CRUD().post(
|
await CRUD()
|
||||||
link: "${AppLink.seferCairoServer}/ride/rides/update.php",
|
.post(link: "${AppLink.server}/ride/rides/update.php", payload: {
|
||||||
payload: {
|
"id": (rideId).toString(), // Convert to String
|
||||||
"id": (rideId).toString(), // Convert to String
|
"status": 'CancelFromDriverAfterApply'
|
||||||
"status": 'CancelFromDriverAfterApply'
|
});
|
||||||
});
|
await CRUD()
|
||||||
|
.post(link: "${AppLink.rideServer}/rides/update.php", payload: {
|
||||||
|
"id": (rideId).toString(), // Convert to String
|
||||||
|
"status": 'CancelFromDriverAfterApply'
|
||||||
|
});
|
||||||
CRUD().postFromDialogue(
|
CRUD().postFromDialogue(
|
||||||
link: '${AppLink.seferCairoServer}/driver_order/add.php',
|
link: '${AppLink.seferCairoServer}/driver_order/add.php',
|
||||||
payload: {
|
payload: {
|
||||||
@@ -226,37 +229,13 @@ class MapDriverController extends GetxController {
|
|||||||
});
|
});
|
||||||
await CRUD().post(
|
await CRUD().post(
|
||||||
link:
|
link:
|
||||||
"${AppLink.seferCairoServer}/ride/cancelRide/addCancelTripFromDriverAfterApplied.php",
|
"${AppLink.server}/ride/cancelRide/addCancelTripFromDriverAfterApplied.php",
|
||||||
payload: {
|
payload: {
|
||||||
"order_id": (rideId).toString(),
|
"order_id": (rideId).toString(),
|
||||||
"driver_id": box.read(BoxName.driverID).toString(),
|
"driver_id": box.read(BoxName.driverID).toString(),
|
||||||
"status": 'reject After Applied',
|
"status": 'reject After Applied',
|
||||||
"notes": (cancelTripCotroller.text).toString()
|
"notes": (cancelTripCotroller.text).toString()
|
||||||
});
|
});
|
||||||
if (AppLink.endPoint != AppLink.seferCairoServer) {
|
|
||||||
CRUD()
|
|
||||||
.post(link: "${AppLink.endPoint}/ride/rides/update.php", payload: {
|
|
||||||
"id": (rideId).toString(), // Convert to String
|
|
||||||
"status": 'CancelFromDriverAfterApply'
|
|
||||||
});
|
|
||||||
CRUD().postFromDialogue(
|
|
||||||
link: '${AppLink.endPoint}/driver_order/add.php',
|
|
||||||
payload: {
|
|
||||||
'driver_id': box.read(BoxName.driverID).toString(),
|
|
||||||
// box.read(BoxName.driverID).toString(),
|
|
||||||
'order_id': (rideId).toString(),
|
|
||||||
'status': 'CancelFromDriverAfterApply'
|
|
||||||
});
|
|
||||||
CRUD().post(
|
|
||||||
link:
|
|
||||||
"${AppLink.endPoint}/ride/cancelRide/addCancelTripFromDriverAfterApplied.php",
|
|
||||||
payload: {
|
|
||||||
"order_id": (rideId).toString(),
|
|
||||||
"driver_id": box.read(BoxName.driverID).toString(),
|
|
||||||
"status": 'reject After Applied',
|
|
||||||
"notes": (cancelTripCotroller.text).toString()
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
sql.insertData({
|
sql.insertData({
|
||||||
'order_id': (rideId),
|
'order_id': (rideId),
|
||||||
@@ -331,13 +310,17 @@ class MapDriverController extends GetxController {
|
|||||||
box.write(BoxName.rideStatus, 'Applied');
|
box.write(BoxName.rideStatus, 'Applied');
|
||||||
Log.print('rideStatus from map 304 : ${box.read(BoxName.rideStatus)}');
|
Log.print('rideStatus from map 304 : ${box.read(BoxName.rideStatus)}');
|
||||||
update();
|
update();
|
||||||
await CRUD().post(
|
await CRUD()
|
||||||
link: "${AppLink.seferCairoServer}/ride/rides/update.php",
|
.post(link: "${AppLink.server}/ride/rides/update.php", payload: {
|
||||||
payload: {
|
'id': (rideId),
|
||||||
'id': (rideId),
|
'driverGoToPassengerTime': DateTime.now().toString(),
|
||||||
'driverGoToPassengerTime': DateTime.now().toString(),
|
'status': 'Applied'
|
||||||
'status': 'Applied'
|
});
|
||||||
});
|
CRUD().post(link: "${AppLink.rideServer}/ride/rides/update.php", payload: {
|
||||||
|
'id': (rideId),
|
||||||
|
'driverGoToPassengerTime': DateTime.now().toString(),
|
||||||
|
'status': 'Applied'
|
||||||
|
});
|
||||||
|
|
||||||
NotificationService.sendNotification(
|
NotificationService.sendNotification(
|
||||||
target: tokenPassenger.toString(),
|
target: tokenPassenger.toString(),
|
||||||
@@ -378,12 +361,37 @@ class MapDriverController extends GetxController {
|
|||||||
var res = await CRUD().post(link: AppLink.getDriverScam, payload: {
|
var res = await CRUD().post(link: AppLink.getDriverScam, payload: {
|
||||||
'driverID': box.read(BoxName.driverID),
|
'driverID': box.read(BoxName.driverID),
|
||||||
});
|
});
|
||||||
|
|
||||||
if (res == 'failure') {
|
if (res == 'failure') {
|
||||||
box.write(BoxName.statusDriverLocation, 'off');
|
box.write(BoxName.statusDriverLocation, 'off');
|
||||||
return '0';
|
return '0';
|
||||||
}
|
}
|
||||||
var d = jsonDecode(res);
|
var d = (res);
|
||||||
return d['message'][0]['count'];
|
Log.print('d: ${d}');
|
||||||
|
|
||||||
|
// 1. Check if the response status is 'failure' (API level check)
|
||||||
|
if (d['status'] == 'failure') {
|
||||||
|
// If the API status is failure, the message is a String (e.g., 'No ride scam record found')
|
||||||
|
// and there's no 'count' array to read.
|
||||||
|
return '0';
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. Safely access the List/Map structure for 'count'
|
||||||
|
// This assumes a successful response looks like:
|
||||||
|
// {'status': 'success', 'message': [{'count': '12'}]}
|
||||||
|
var messageData = d['message'];
|
||||||
|
|
||||||
|
// Check if messageData is actually a List before accessing index [0]
|
||||||
|
if (messageData is List &&
|
||||||
|
messageData.isNotEmpty &&
|
||||||
|
messageData[0] is Map) {
|
||||||
|
return messageData[0]['count'];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fallback if the successful data structure is unexpected
|
||||||
|
return '0';
|
||||||
|
|
||||||
|
// --- FIX END ---
|
||||||
}
|
}
|
||||||
|
|
||||||
void startRideFromStartApp() {
|
void startRideFromStartApp() {
|
||||||
@@ -429,6 +437,11 @@ class MapDriverController extends GetxController {
|
|||||||
'rideTimeStart': DateTime.now().toString(),
|
'rideTimeStart': DateTime.now().toString(),
|
||||||
'status': 'Begin',
|
'status': 'Begin',
|
||||||
});
|
});
|
||||||
|
CRUD().post(link: "${AppLink.server}/ride/rides/update.php", payload: {
|
||||||
|
'id': (rideId),
|
||||||
|
'rideTimeStart': DateTime.now().toString(),
|
||||||
|
'status': 'Begin',
|
||||||
|
});
|
||||||
CRUD().post(link: AppLink.addDriverOrder, payload: {
|
CRUD().post(link: AppLink.addDriverOrder, payload: {
|
||||||
'driver_id': box.read(BoxName.driverID).toString(),
|
'driver_id': box.read(BoxName.driverID).toString(),
|
||||||
'order_id': (rideId).toString(),
|
'order_id': (rideId).toString(),
|
||||||
@@ -547,18 +560,6 @@ class MapDriverController extends GetxController {
|
|||||||
'status': 'CancelAfterWait'
|
'status': 'CancelAfterWait'
|
||||||
});
|
});
|
||||||
|
|
||||||
if (AppLink.endPoint != AppLink.seferCairoServer) {
|
|
||||||
CRUD().post(link: "${AppLink.endPoint}/rides/update.php", payload: {
|
|
||||||
'id': (rideId),
|
|
||||||
'rideTimeStart': DateTime.now().toString(),
|
|
||||||
'status': 'CancelAfterWait',
|
|
||||||
});
|
|
||||||
CRUD().post(link: "${AppLink.endPoint}/rides/update.php", payload: {
|
|
||||||
'driver_id': box.read(BoxName.driverID).toString(),
|
|
||||||
'order_id': (rideId).toString(),
|
|
||||||
'status': 'CancelAfterWait'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
var paymentTokenWait =
|
var paymentTokenWait =
|
||||||
await generateTokenDriver(costOfWaiting5Minute.toString());
|
await generateTokenDriver(costOfWaiting5Minute.toString());
|
||||||
var res = await CRUD().post(link: AppLink.addDrivePayment, payload: {
|
var res = await CRUD().post(link: AppLink.addDrivePayment, payload: {
|
||||||
@@ -734,7 +735,11 @@ class MapDriverController extends GetxController {
|
|||||||
List<Future<dynamic>> apiCalls = [];
|
List<Future<dynamic>> apiCalls = [];
|
||||||
|
|
||||||
apiCalls.add(CRUD().post(
|
apiCalls.add(CRUD().post(
|
||||||
link: "${AppLink.seferCairoServer}/ride/rides//finish_ride_updates.php",
|
link: "${AppLink.rideServer}/ride/rides/finish_ride_updates.php",
|
||||||
|
payload: rideUpdatePayload,
|
||||||
|
));
|
||||||
|
apiCalls.add(CRUD().post(
|
||||||
|
link: "${AppLink.ride}/rides/finish_ride_updates.php",
|
||||||
payload: rideUpdatePayload,
|
payload: rideUpdatePayload,
|
||||||
));
|
));
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ class NavigationView extends StatelessWidget {
|
|||||||
myLocationEnabled: false,
|
myLocationEnabled: false,
|
||||||
myLocationButtonEnabled: false,
|
myLocationButtonEnabled: false,
|
||||||
compassEnabled: false,
|
compassEnabled: false,
|
||||||
zoomControlsEnabled: false,
|
zoomControlsEnabled: false, buildingsEnabled: false,
|
||||||
// تعديل الـ padding لإعطاء مساحة للعناصر العلوية والسفلية
|
// تعديل الـ padding لإعطاء مساحة للعناصر العلوية والسفلية
|
||||||
// مساحة أكبر في الأعلى للبحث + النتائج، ومساحة أكبر بالأسفل للملاحة
|
// مساحة أكبر في الأعلى للبحث + النتائج، ومساحة أكبر بالأسفل للملاحة
|
||||||
padding: EdgeInsets.only(
|
padding: EdgeInsets.only(
|
||||||
|
|||||||
@@ -50,7 +50,17 @@ class MyTranslation extends Translations {
|
|||||||
"message From Driver": "رسالة من السائق",
|
"message From Driver": "رسالة من السائق",
|
||||||
"Trip is Begin": "بدأت الرحلة",
|
"Trip is Begin": "بدأت الرحلة",
|
||||||
'Rides': 'الرحلات',
|
'Rides': 'الرحلات',
|
||||||
|
"Invalid customer MSISDN": "رقم هاتف العميل غير صالح",
|
||||||
'Your Activity': 'نشاطك',
|
'Your Activity': 'نشاطك',
|
||||||
|
"Customer MSISDN doesn’t have customer wallet":
|
||||||
|
"رقم هاتف العميل لا يحتوي على محفظة عميل",
|
||||||
|
'Please enter the number without the leading 0':
|
||||||
|
'يرجى إدخال الرقم بدون الصفر الأولي',
|
||||||
|
'witout zero': 'بدون صفر',
|
||||||
|
'You Can Cancel the Trip and get Cost From ':
|
||||||
|
'يمكنك إلغاء الرحلة واسترداد التكلفة من ',
|
||||||
|
'Please enter your phone number': 'يرجى إدخال رقم هاتفك',
|
||||||
|
'Phone number seems too short': 'يبدو أن رقم الهاتف قصير جدًا',
|
||||||
'You have upload Criminal documents': 'لقد قمت بتحميل وثائق جنائية',
|
'You have upload Criminal documents': 'لقد قمت بتحميل وثائق جنائية',
|
||||||
'Close': 'إغلاق',
|
'Close': 'إغلاق',
|
||||||
"Cancel Trip from driver": "إلغاء الرحلة من السائق",
|
"Cancel Trip from driver": "إلغاء الرحلة من السائق",
|
||||||
|
|||||||
@@ -306,7 +306,8 @@ class _PhoneNumberScreenState extends State<PhoneNumberScreen> {
|
|||||||
final rawPhone = _phoneController.text.trim().replaceFirst('+', '');
|
final rawPhone = _phoneController.text.trim().replaceFirst('+', '');
|
||||||
final success = await PhoneAuthHelper.sendOtp(rawPhone);
|
final success = await PhoneAuthHelper.sendOtp(rawPhone);
|
||||||
if (success && mounted) {
|
if (success && mounted) {
|
||||||
Get.to(() => OtpVerificationScreen(phoneNumber: rawPhone));
|
// Get.to(() => OtpVerificationScreen(phoneNumber: rawPhone));
|
||||||
|
await PhoneAuthHelper.verifyOtp(rawPhone);
|
||||||
}
|
}
|
||||||
if (mounted) setState(() => _isLoading = false);
|
if (mounted) setState(() => _isLoading = false);
|
||||||
}
|
}
|
||||||
@@ -336,6 +337,7 @@ class _PhoneNumberScreenState extends State<PhoneNumberScreen> {
|
|||||||
dropdownTextStyle: const TextStyle(color: Colors.black87),
|
dropdownTextStyle: const TextStyle(color: Colors.black87),
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
labelText: 'Phone Number'.tr,
|
labelText: 'Phone Number'.tr,
|
||||||
|
hintText: 'witout zero'.tr,
|
||||||
labelStyle: const TextStyle(color: Colors.black54),
|
labelStyle: const TextStyle(color: Colors.black54),
|
||||||
enabledBorder: OutlineInputBorder(
|
enabledBorder: OutlineInputBorder(
|
||||||
borderRadius: BorderRadius.circular(12),
|
borderRadius: BorderRadius.circular(12),
|
||||||
@@ -353,10 +355,14 @@ class _PhoneNumberScreenState extends State<PhoneNumberScreen> {
|
|||||||
},
|
},
|
||||||
validator: (phone) {
|
validator: (phone) {
|
||||||
if (phone == null || phone.number.isEmpty) {
|
if (phone == null || phone.number.isEmpty) {
|
||||||
return 'Please enter your phone number';
|
return 'Please enter your phone number'.tr;
|
||||||
|
}
|
||||||
|
// Check if the national number part starts with '0'
|
||||||
|
if (phone.number.startsWith('0')) {
|
||||||
|
return 'Please enter the number without the leading 0'.tr;
|
||||||
}
|
}
|
||||||
if (phone.completeNumber.length < 10) {
|
if (phone.completeNumber.length < 10) {
|
||||||
return 'Phone number seems too short';
|
return 'Phone number seems too short'.tr;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
},
|
},
|
||||||
@@ -405,7 +411,7 @@ class _OtpVerificationScreenState extends State<OtpVerificationScreen> {
|
|||||||
void _submit() async {
|
void _submit() async {
|
||||||
if (_formKey.currentState!.validate()) {
|
if (_formKey.currentState!.validate()) {
|
||||||
setState(() => _isLoading = true);
|
setState(() => _isLoading = true);
|
||||||
await PhoneAuthHelper.verifyOtp(widget.phoneNumber, _otpController.text);
|
await PhoneAuthHelper.verifyOtp(widget.phoneNumber);
|
||||||
if (mounted) setState(() => _isLoading = false);
|
if (mounted) setState(() => _isLoading = false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,10 @@ import 'dart:io';
|
|||||||
import 'dart:ui';
|
import 'dart:ui';
|
||||||
|
|
||||||
import 'package:bubble_head/bubble.dart';
|
import 'package:bubble_head/bubble.dart';
|
||||||
|
// import 'package:google_maps_flutter/google_maps_flutter.dart';
|
||||||
|
// import 'package:flutter_map/flutter_map.dart';
|
||||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
||||||
|
// import 'package:latlong2/latlong.dart' as latlng; // لإحداثيات العرض
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
@@ -32,14 +35,15 @@ import 'widget/left_menu_map_captain.dart';
|
|||||||
class HomeCaptain extends StatelessWidget {
|
class HomeCaptain extends StatelessWidget {
|
||||||
HomeCaptain({super.key});
|
HomeCaptain({super.key});
|
||||||
|
|
||||||
final LocationController locationController = Get.put(LocationController());
|
final LocationController locationController =
|
||||||
|
Get.put(LocationController(), permanent: true);
|
||||||
final HomeCaptainController homeCaptainController =
|
final HomeCaptainController homeCaptainController =
|
||||||
Get.put(HomeCaptainController());
|
Get.put(HomeCaptainController());
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
// Initial calls remain the same.
|
// Initial calls remain the same.
|
||||||
Get.put(HomeCaptainController());
|
// Get.put(HomeCaptainController());
|
||||||
WidgetsBinding.instance.addPostFrameCallback((_) async {
|
WidgetsBinding.instance.addPostFrameCallback((_) async {
|
||||||
closeOverlayIfFound();
|
closeOverlayIfFound();
|
||||||
checkForUpdate(context);
|
checkForUpdate(context);
|
||||||
@@ -201,21 +205,19 @@ class _MapView extends StatelessWidget {
|
|||||||
// هذا الـ Builder يستمع إلى تحديثات الموقع
|
// هذا الـ Builder يستمع إلى تحديثات الموقع
|
||||||
return GetBuilder<LocationController>(
|
return GetBuilder<LocationController>(
|
||||||
builder: (locationController) {
|
builder: (locationController) {
|
||||||
// --- هذا هو الكود الجديد ---
|
// if (homeController.mapHomeCaptainController != null &&
|
||||||
// نقوم بتحريك الكاميرا يدوياً عند كل تحديث للموقع
|
// homeController.isActive) {
|
||||||
if (homeController.mapHomeCaptainController != null &&
|
// homeController.mapHomeCaptainController!.animateCamera(
|
||||||
homeController.isActive) {
|
// CameraUpdate.newCameraPosition(
|
||||||
homeController.mapHomeCaptainController!.animateCamera(
|
// CameraPosition(
|
||||||
CameraUpdate.newCameraPosition(
|
// target: locationController.myLocation, // الموقع الجديد
|
||||||
CameraPosition(
|
// zoom: 17.5, // تقريب لمتابعة السائق
|
||||||
target: locationController.myLocation, // الموقع الجديد
|
// tilt: 50.0, // زاوية رؤية 3D
|
||||||
zoom: 17.5, // تقريب لمتابعة السائق
|
// bearing: locationController.heading, // اتجاه السيارة
|
||||||
tilt: 50.0, // زاوية رؤية 3D
|
// ),
|
||||||
bearing: locationController.heading, // اتجاه السيارة
|
// ),
|
||||||
),
|
// );
|
||||||
),
|
// }
|
||||||
);
|
|
||||||
}
|
|
||||||
// --- نهاية الكود الجديد ---
|
// --- نهاية الكود الجديد ---
|
||||||
|
|
||||||
// إرجاع الخريطة
|
// إرجاع الخريطة
|
||||||
@@ -248,6 +250,71 @@ class _MapView extends StatelessWidget {
|
|||||||
compassEnabled: false,
|
compassEnabled: false,
|
||||||
zoomControlsEnabled: false,
|
zoomControlsEnabled: false,
|
||||||
);
|
);
|
||||||
|
// --- الكود الجديد ---
|
||||||
|
|
||||||
|
// // تحويل الإحداثيات من جوجل (إذا كنت لا تزال تستخدمها) إلى latlong2
|
||||||
|
// final latlng.LatLng currentCarPosition = latlng.LatLng(
|
||||||
|
// locationController.myLocation.latitude,
|
||||||
|
// locationController.myLocation.longitude);
|
||||||
|
|
||||||
|
// return FlutterMap(
|
||||||
|
// // 1. تمرير الـ Controller الذي أنشأناه في الخطوة 2
|
||||||
|
// mapController: homeController.mapController,
|
||||||
|
|
||||||
|
// options: MapOptions(
|
||||||
|
// // 2. هذا بديل initialCameraPosition
|
||||||
|
// initialCenter: currentCarPosition,
|
||||||
|
// initialZoom: 15,
|
||||||
|
// // هذا بديل padding
|
||||||
|
// // (ملاحظة: flutter_map لا يدعم padding مباشرة، قد تحتاج لتعديل الواجهة
|
||||||
|
// // أو استخدام خاصية nonRotatedChildren لبدائل أخرى)
|
||||||
|
|
||||||
|
// // هذا بديل minMaxZoomPreference
|
||||||
|
// minZoom: 12,
|
||||||
|
// maxZoom: 16, onMapReady: homeController.onMapReady,
|
||||||
|
// ),
|
||||||
|
|
||||||
|
// // 3. الخرائط في flutter_map عبارة عن "طبقات" (Layers)
|
||||||
|
// children: [
|
||||||
|
// // --- الطبقة الأولى: الخريطة الأساسية (OSM) ---
|
||||||
|
// TileLayer(
|
||||||
|
// urlTemplate: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png',
|
||||||
|
// userAgentPackageName:
|
||||||
|
// 'com.your.app.name', // هام: ضع اسم تطبيقك هنا
|
||||||
|
// ),
|
||||||
|
|
||||||
|
// // --- (اختياري) طبقة القمر الصناعي بناءً على MapType ---
|
||||||
|
// if (controller.mapType) // إذا كنت لا تزال تستخدم mapType
|
||||||
|
// // TileLayer(
|
||||||
|
// // // ملاحظة: هذا الرابط يحتاج مفتاح API من MapTiler أو مزود آخر
|
||||||
|
// // urlTemplate:
|
||||||
|
// // 'https://api.maptiler.com/maps/satellite/{z}/{x}/{y}.jpg?key=YOUR_API_KEY',
|
||||||
|
// // userAgentPackageName: 'com.your.app.name',
|
||||||
|
// // ),
|
||||||
|
|
||||||
|
// // --- الطبقة الثانية: أيقونة السيارة (Marker) ---
|
||||||
|
// MarkerLayer(
|
||||||
|
// markers: [
|
||||||
|
// Marker(
|
||||||
|
// point: currentCarPosition, // الإحداثيات
|
||||||
|
// width: 80,
|
||||||
|
// height: 80,
|
||||||
|
// child: Transform.rotate(
|
||||||
|
// // 4. هذا بديل rotation
|
||||||
|
// angle: locationController.heading *
|
||||||
|
// (3.1415926535 / 180), // تحويل من درجات إلى راديان
|
||||||
|
// // 5. هذا بديل carIcon (أصبح أسهل!)
|
||||||
|
// child: Image.asset(
|
||||||
|
// 'assets/images/car.png', // نفس المسار الذي استخدمته من قبل
|
||||||
|
// width: 30, // الحجم الذي حددته في addCustomCarIcon
|
||||||
|
// height: 35,
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// ],
|
||||||
|
// ),
|
||||||
|
// ],
|
||||||
|
// );
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -215,7 +215,7 @@ Future<void> checkForPendingOrderFromServer() async {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
// You need to create this CRUD method
|
// You need to create this CRUD method
|
||||||
var response = await CRUD().get(
|
var response = await CRUD().post(
|
||||||
link: AppLink.getArgumentAfterAppliedFromBackground,
|
link: AppLink.getArgumentAfterAppliedFromBackground,
|
||||||
payload: {'driver_id': driverId},
|
payload: {'driver_id': driverId},
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -249,16 +249,9 @@ class PassengerInfoWindow extends StatelessWidget {
|
|||||||
return MyElevatedButton(
|
return MyElevatedButton(
|
||||||
title: 'You Can Cancel the Trip and get Cost From '.tr +
|
title: 'You Can Cancel the Trip and get Cost From '.tr +
|
||||||
AppInformation.appName.tr,
|
AppInformation.appName.tr,
|
||||||
kolor: AppColor.deepPurpleAccent,
|
kolor: AppColor.gold,
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
MyDialog().getDialog('Are you sure to cancel?'.tr, '', () async {
|
MyDialog().getDialog('Are you sure to cancel?'.tr, '', () async {
|
||||||
// fcm.sendNotificationToDriverMAP(
|
|
||||||
// 'Driver Cancelled Your Trip',
|
|
||||||
// 'You will need to pay the cost to the driver, or it will be deducted from your next trip'
|
|
||||||
// .tr,
|
|
||||||
// controller.tokenPassenger,
|
|
||||||
// [],
|
|
||||||
// 'cancel.wav');
|
|
||||||
NotificationService.sendNotification(
|
NotificationService.sendNotification(
|
||||||
target: controller.tokenPassenger.toString(),
|
target: controller.tokenPassenger.toString(),
|
||||||
title: 'Driver Cancelled Your Trip'.tr,
|
title: 'Driver Cancelled Your Trip'.tr,
|
||||||
|
|||||||
@@ -276,6 +276,7 @@ class _OrderRequestPageState extends State<OrderRequestPage> {
|
|||||||
.tr,
|
.tr,
|
||||||
'', () {
|
'', () {
|
||||||
Get.back();
|
Get.back();
|
||||||
|
// Get.back();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
await CRUD().postFromDialogue(
|
await CRUD().postFromDialogue(
|
||||||
|
|||||||
@@ -356,27 +356,26 @@ class OrderSpeedRequest extends StatelessWidget {
|
|||||||
Get.put(HomeCaptainController()).changeRideId();
|
Get.put(HomeCaptainController()).changeRideId();
|
||||||
box.write(BoxName.statusDriverLocation, 'on');
|
box.write(BoxName.statusDriverLocation, 'on');
|
||||||
var res = await CRUD().post(
|
var res = await CRUD().post(
|
||||||
link: AppLink.updateStausFromSpeed,
|
link: AppLink.updateStausFromSpeed,
|
||||||
payload: {
|
payload: {
|
||||||
'id': rideId,
|
'id': rideId,
|
||||||
'rideTimeStart':
|
'rideTimeStart': DateTime.now().toString(),
|
||||||
DateTime.now().toString(),
|
'status': 'Apply',
|
||||||
'status': 'Apply',
|
'driver_id': box.read(BoxName.driverID),
|
||||||
'driver_id': box.read(BoxName.driverID),
|
},
|
||||||
});
|
);
|
||||||
if (AppLink.endPoint !=
|
|
||||||
AppLink.seferCairoServer) {
|
CRUD().post(
|
||||||
CRUD().post(
|
link:
|
||||||
link:
|
"${AppLink.server}/ride/rides/updateStausFromSpeed.php",
|
||||||
"${AppLink.rideServer}/rides/updateStausFromSpeed.php",
|
payload: {
|
||||||
payload: {
|
'id': rideId,
|
||||||
'id': rideId,
|
'rideTimeStart': DateTime.now().toString(),
|
||||||
'rideTimeStart':
|
'status': 'Apply',
|
||||||
DateTime.now().toString(),
|
'driver_id': box.read(BoxName.driverID),
|
||||||
'status': 'Apply',
|
},
|
||||||
'driver_id': box.read(BoxName.driverID),
|
);
|
||||||
});
|
|
||||||
}
|
|
||||||
if (res != "failure") {
|
if (res != "failure") {
|
||||||
box.write(BoxName.statusDriverLocation, 'on');
|
box.write(BoxName.statusDriverLocation, 'on');
|
||||||
controller.changeApplied();
|
controller.changeApplied();
|
||||||
@@ -419,17 +418,14 @@ class OrderSpeedRequest extends StatelessWidget {
|
|||||||
'status': 'Apply'
|
'status': 'Apply'
|
||||||
});
|
});
|
||||||
|
|
||||||
if (AppLink.endPoint !=
|
CRUD().post(
|
||||||
AppLink.seferCairoServer) {
|
link:
|
||||||
CRUD().post(
|
"${AppLink.rideServer}/driver_order/add.php",
|
||||||
link:
|
payload: {
|
||||||
"${AppLink.rideServer}/driver_order/add.php",
|
'driver_id': _getData(6),
|
||||||
payload: {
|
'order_id': rideId,
|
||||||
'driver_id': _getData(6),
|
'status': 'Apply'
|
||||||
'order_id': rideId,
|
});
|
||||||
'status': 'Apply'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
Get.back(); // Go back from order request screen
|
Get.back(); // Go back from order request screen
|
||||||
box.write(BoxName.rideArguments, {
|
box.write(BoxName.rideArguments, {
|
||||||
|
|||||||
@@ -66,48 +66,48 @@ class PointsCaptain extends StatelessWidget {
|
|||||||
color: AppColor.blueColor, size: 70),
|
color: AppColor.blueColor, size: 70),
|
||||||
],
|
],
|
||||||
)),
|
)),
|
||||||
// GestureDetector(
|
GestureDetector(
|
||||||
// onTap: () async {
|
onTap: () async {
|
||||||
// Get.back();
|
Get.back();
|
||||||
// Get.defaultDialog(
|
Get.defaultDialog(
|
||||||
// barrierDismissible: false,
|
barrierDismissible: false,
|
||||||
// title: 'Insert Wallet phone number'.tr,
|
title: 'Insert Wallet phone number'.tr,
|
||||||
// content: Form(
|
content: Form(
|
||||||
// key: paymentController.formKey,
|
key: paymentController.formKey,
|
||||||
// child: MyTextForm(
|
child: MyTextForm(
|
||||||
// controller:
|
controller:
|
||||||
// paymentController.walletphoneController,
|
paymentController.walletphoneController,
|
||||||
// label: 'Insert Wallet phone number'.tr,
|
label: 'Insert Wallet phone number'.tr,
|
||||||
// hint: '963941234567',
|
hint: '963941234567',
|
||||||
// type: TextInputType.phone)),
|
type: TextInputType.phone)),
|
||||||
// confirm: MyElevatedButton(
|
confirm: MyElevatedButton(
|
||||||
// title: 'OK'.tr,
|
title: 'OK'.tr,
|
||||||
// onPressed: () async {
|
onPressed: () async {
|
||||||
// Get.back();
|
Get.back();
|
||||||
// if (paymentController.formKey.currentState!
|
if (paymentController.formKey.currentState!
|
||||||
// .validate()) {
|
.validate()) {
|
||||||
// box.write(
|
box.write(
|
||||||
// BoxName.phoneWallet,
|
BoxName.phoneWallet,
|
||||||
// paymentController
|
paymentController
|
||||||
// .walletphoneController.text);
|
.walletphoneController.text);
|
||||||
// await payWithMTNWallet(
|
await payWithMTNWallet(
|
||||||
// context, pricePoint.toString(), 'SYP');
|
context, pricePoint.toString(), 'SYP');
|
||||||
// }
|
}
|
||||||
// }));
|
}));
|
||||||
// },
|
},
|
||||||
// child: Row(
|
child: Row(
|
||||||
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
// children: [
|
children: [
|
||||||
// Text('Pay by MTN Wallet'.tr),
|
Text('Pay by MTN Wallet'.tr),
|
||||||
// const SizedBox(width: 10),
|
const SizedBox(width: 10),
|
||||||
// Image.asset(
|
Image.asset(
|
||||||
// 'assets/images/cashMTN.png',
|
'assets/images/cashMTN.png',
|
||||||
// width: 70,
|
width: 70,
|
||||||
// height: 70,
|
height: 70,
|
||||||
// fit: BoxFit.fill,
|
fit: BoxFit.fill,
|
||||||
// ),
|
),
|
||||||
// ],
|
],
|
||||||
// )),
|
)),
|
||||||
|
|
||||||
GestureDetector(
|
GestureDetector(
|
||||||
onTap: () async {
|
onTap: () async {
|
||||||
|
|||||||
Reference in New Issue
Block a user