From 229646d664e70f82fabb2eec0967e7b66d160d21 Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Sat, 26 Oct 2024 16:31:17 +0300 Subject: [PATCH] 10/26/1 --- android/app/build.gradle | 4 +- assets/images/arrow.png | Bin 0 -> 2477 bytes assets/images/cardid.jpg | Bin 37245 -> 0 bytes assets/images/s.png | Bin 0 -> 49986 bytes assets/order1.wav | Bin 0 -> 22150 bytes bubble-master/lib/bubble.dart | 4 +- ios/Runner/Info.plist | 8 +- lib/constant/links.dart | 2 + .../auth/captin/login_captin_controller.dart | 164 ++++ .../captin/register_captin_controller.dart | 17 +- lib/controller/auth/google_sign.dart | 26 +- lib/controller/firebase/firbase_messge.dart | 59 +- lib/controller/functions/add_error.dart | 19 + .../functions/audio_controller.dart | 29 + lib/controller/functions/gemeni.dart | 10 +- .../home/captin/map_driver_controller.dart | 141 ++- .../home/captin/order_request_controller.dart | 8 +- lib/controller/local/translations.dart | 12 + lib/views/auth/captin/login_captin.dart | 834 ++++++++++-------- lib/views/home/Captin/driver_map_page.dart | 1 + .../home/Captin/home_captain/home_captin.dart | 186 ++-- .../widget/left_menu_map_captain.dart | 201 +++-- .../passenger_info_window.dart | 156 +--- .../orderCaptin/order_speed_request.dart | 96 +- 24 files changed, 1098 insertions(+), 879 deletions(-) create mode 100644 assets/images/arrow.png delete mode 100644 assets/images/cardid.jpg create mode 100644 assets/images/s.png create mode 100644 assets/order1.wav create mode 100644 lib/controller/functions/add_error.dart create mode 100644 lib/controller/functions/audio_controller.dart diff --git a/android/app/build.gradle b/android/app/build.gradle index 39e9db8..f0a830b 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -54,8 +54,8 @@ android { // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdk = 23 targetSdk = flutter.targetSdkVersion - versionCode = 109 - versionName = '1.5.09' + versionCode = 111 + versionName = '1.5.11' multiDexEnabled =true } diff --git a/assets/images/arrow.png b/assets/images/arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..3d3db758a3b1ec3c793a833737da0ae692fece3f GIT binary patch literal 2477 zcmbtWdpMN&9v_r4sMymM&S8|(q|CfC<34Lf809*P#%)G1W?oElZ7z&aic*wIvGTY) z)M>S&5RAksw;i6+mbh%*k0QpflK@7!e6Zvv>sLOk)cY!D14S!M45_Ux6DK!}5>` z!Gkg~g&|`z9GOUGBHT%ehX}Z!n2wNgIXn?wN*(kRU~m8qhk_6&Q9Msfm!f#0oe%>Yq2?fgB8HG95VQC^ zgo=|M$(M);NF*GwO6?*R3t5qC>^u>gu3nL-Owdr!0G%lUuxO0REd;`81&?=Oid5># zAqT;uYGp;^u+%3B=t2=li5GwbWB@4QON0zi&7d+`C2;PJk+P9M($2YGpO#HH(#etN=gB`R}g-ld)Cu-bK5g`VQ}No8oG5>J}xupD5qaC2Crdr`*uYaz5JM z+_2bf8JJx%KIDx$z4eJ1O@H#Ga05)fLlF{^^xfGk-y1B!|(#v3g$e>5(*-n8pTdde3Lc9@Cug z7*<8Cf|!`zA%&mCFSWUMY?A#nmosLH$IaZ@-M{zK)S~4Jau;!AQrPra6kD!w+OU53 zH7zZsrW&I;*^y^XO;0h{?okSf*j)iCnK&CW)R<)s$y*%8HhX2X=b1nJ3w2{sl24uT z$J@qVyNB^wSo*d}TQu8FUAcaK{79-HV_H-3-o>)nu%vvsXUV@YVeJ0IccJyVdQmqs zdYTtH$cA=7F!n< zVc)5xUDt0Dw!UZc8RNrCfe=3IR_x%q%(wBN&oLvfyz`Ty3x%zIM%2RNdmp^JnA&)2 z_~a#Oa$&1cc!W|;y?#*EBd6ZK>ptR95=^eFaAs2orQID||NHJEJ3*R5uvHy#DJZ+| zK#$B6ZX8slQ@^pu7SpWPG5P{$LPHDen|0cL?Dlh*%0O+~u4Gx;HS3`if9|}bTlD51 z`dNV6=nZ)t<#Om7aQ6_pd!h3Z+y(_9>}B&K=H6NLR$CpOTLTc=bgh^jo!?3y9?i`7 z{#~^3@fIya$={-$W&Wh3!7gy$ioD{oO0ji5BNuU2F)6NY3B#xC1|H3oktXhZ#WwRn zJ~u1&={yS?={}?V(8im=$!`r^-ZzvpPCof$;b}!#p5Y1dhoW9o&E)VaWq9$Ehh_3g zUyW8_h9L}g+4QHH*XY_8d0uVJZGWn&?XvXkok`fB)bL76{_r4os{bqd+1tk|sOK!Y z4f2)_1!fP!PX3DgR%=6LLL$xS%uEw;Do79a;L%(p|4P$LTAD(8`0&89f+j)S^FC5p z$n{`$DaGpWy=yHRCwl`u6ZK&8rr=h1vmJl9V`4uph1b045=q*!cn?-Mx&HX*%l6s! zms9=squ9lbOAA$yt9|~55;S0s_bgXEsd#EqXgYdtu}(IblNef!b9SbfAOPj;luU>r}&^4D9P(4;tX%yt; z{%e5Uaed`LmAoetsnL4NgfY`G(b-UjwIkfE`S2mf}hIwPyw|{7Cdz*8lF~38hP>epF%4m=7k_xaT12&@agnV+RbCAU^=c{CA w{vJ+!bShDhaeCbj^CS-sgrQ;TeYee!t0da8Y)Bpeg literal 0 HcmV?d00001 diff --git a/assets/images/cardid.jpg b/assets/images/cardid.jpg deleted file mode 100644 index 608f2d1088d990076494c2fab412aeec3fce7a84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37245 zcmc$FbyyqS_h$mZ-66QUClK7--6;?}K=D$fMT)z-Yl2g}(Bc#=5WKWSiWXX+lmfM- z@B7>R{{Gl!pJ$(EpJ(r6=AJqCbM86!oOACanVCQ9f3^Xn+Ui>B03Z+uaJb(9f6f5U z4Ba0FJ`8Yw=*uE5Bm#gbYw3YNfWO6!0fPtNq^_)|Dk3T(BI4)>6%oI$Mc`thQh#eH zN%6mY5f_-a*gxmu;*h_!gcIZ+zAGH|_f!N1fl2nmPs@($s01QGexOV^s zDFEQ@6X(a)bx?Dj6E;{@cg@?s&cWuLiW>-@g8Li2nl* z-`OPqe&7D{ez%AF`Ul<{Y2sRES|J%sgwH$#k8CQBX5=#kwS!Z#EvvArm~$>UW7dh}T2&!0bU z0V)7|92{I6YFDsjfk|;z< zMqXZ?Q%F@yMOIT%PG073CqR4x0%9U!22xT686Gwsng8qZX9z%s3tYk�VdFvx(I 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%0AVol!eX~A_kt)Gn07#0P_mR2bVO1 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 diff --git a/assets/images/s.png b/assets/images/s.png new file mode 100644 index 0000000000000000000000000000000000000000..a2dee591ad83214e631a61b44c5317faf80929cd GIT binary patch literal 49986 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 P#SfDGq$pJ-X%O^(seqT{ literal 0 HcmV?d00001 diff --git a/assets/order1.wav b/assets/order1.wav new file mode 100644 index 0000000000000000000000000000000000000000..919fdda66a4f0f7d09e78b7f2f874321559e6098 GIT binary patch literal 22150 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 literal 0 HcmV?d00001 diff --git a/bubble-master/lib/bubble.dart b/bubble-master/lib/bubble.dart index 03820a2..00fa44a 100755 --- a/bubble-master/lib/bubble.dart +++ b/bubble-master/lib/bubble.dart @@ -20,7 +20,9 @@ class Bubble { /// puts app in background and shows floaty-bubble head Future startBubbleHead({bool sendAppToBackground = true}) async { - ByteData bytes = await rootBundle.load('assets/images/logo1.png'); + ByteData bytes = await rootBundle.load( + 'assets/images/s.png', + ); var buffer = bytes.buffer; var encodedImage = base64.encode(Uint8List.view(buffer)); await _channel.invokeMethod('startBubbleHead', { diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index ea458d1..26de01b 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -2,8 +2,8 @@ - LSMinimumSystemVersion - 12.0 + LSMinimumSystemVersion + 12.0 UIBackgroundModes fetch @@ -35,7 +35,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 67 + 70 CFBundleSignature ???? CFBundleURLTypes @@ -50,7 +50,7 @@ CFBundleVersion - 4.0.67 + 4.0.70 FirebaseAppDelegateProxyEnabled NO GMSApiKey diff --git a/lib/constant/links.dart b/lib/constant/links.dart index 8cc7fb8..7cf7500 100644 --- a/lib/constant/links.dart +++ b/lib/constant/links.dart @@ -272,6 +272,8 @@ class AppLink { static String authCaptin = '$server/auth/captin'; static String loginCaptin = "$authCaptin/login.php"; static String loginFromGoogleCaptin = "$authCaptin/loginFromGoogle.php"; + static String loginUsingCredentialsWithoutGoogle = + "$authCaptin/loginUsingCredentialsWithoutGoogle.php"; static String packageInfo = "$server/auth/packageInfo.php"; static String signUpCaptin = "$authCaptin/register.php"; static String addCriminalDocuments = "$authCaptin/addCriminalDocuments.php"; diff --git a/lib/controller/auth/captin/login_captin_controller.dart b/lib/controller/auth/captin/login_captin_controller.dart index 468b323..7637d07 100644 --- a/lib/controller/auth/captin/login_captin_controller.dart +++ b/lib/controller/auth/captin/login_captin_controller.dart @@ -1,4 +1,5 @@ import 'dart:convert'; +import 'dart:math'; import 'package:SEFER/constant/colors.dart'; import 'package:SEFER/controller/functions/location_background_controller.dart'; @@ -25,7 +26,10 @@ class LoginDriverController extends GetxController { TextEditingController emailController = TextEditingController(); TextEditingController phoneController = TextEditingController(); TextEditingController passwordController = TextEditingController(); + TextEditingController passwordController2 = TextEditingController(); bool isAgreeTerms = false; + bool isGoogleDashOpen = false; + bool isGoogleLogin = false; bool isloading = false; late int isTest = 1; final FlutterSecureStorage _storage = const FlutterSecureStorage(); @@ -35,6 +39,11 @@ class LoginDriverController extends GetxController { update(); } + void changeGoogleDashOpen() { + isGoogleDashOpen = !isGoogleDashOpen; + update(); + } + @override void onInit() async { box.read(BoxName.isTest) == null || @@ -80,6 +89,32 @@ class LoginDriverController extends GetxController { update(); } + String generateUniqueIdFromEmail(String email) { + // Step 1: Extract the local part of the email + String localPart = email.split('@')[0]; + + // Step 2: Replace invalid characters (if any) + String cleanLocalPart = localPart.replaceAll(RegExp(r'[^a-zA-Z0-9]'), ''); + + // Step 3: Ensure it does not exceed 24 characters + if (cleanLocalPart.length > 24) { + cleanLocalPart = cleanLocalPart.substring(0, 24); + } + + // Step 4: Generate a random suffix if needed + String suffix = generateRandomSuffix(24 - cleanLocalPart.length); + + return cleanLocalPart + suffix; + } + + String generateRandomSuffix(int length) { + const String chars = + 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; + Random random = Random(); + return List.generate(length, (index) => chars[random.nextInt(chars.length)]) + .join(''); + } + loginUsingCredentials(String driverID, email) async { isloading = true; update(); @@ -207,6 +242,135 @@ class LoginDriverController extends GetxController { } } + loginUsingCredentialsWithoutGoogle(String password, email) async { + isloading = true; + isGoogleLogin = true; + update(); + var res = await CRUD() + .get(link: AppLink.loginUsingCredentialsWithoutGoogle, payload: { + 'email': email, + 'password': password, + }); + box.write(BoxName.emailDriver, email.toString()); + print(res); + if (res == 'failure') { + //Failure + if (box.read(BoxName.phoneVerified).toString() == '1') { + Get.offAll(() => EgyptCardAI()); + } else { + Get.offAll(() => SmsSignupEgypt()); + } + + isloading = false; + update(); + // Get.snackbar('Failure', '', backgroundColor: Colors.red); + } else { + var jsonDecoeded = jsonDecode(res); + if (jsonDecoeded.isNotEmpty) { + if (jsonDecoeded['status'] == 'success' && + jsonDecoeded['data'][0]['is_verified'].toString() == '1') { + box.write(BoxName.emailDriver, jsonDecoeded['data'][0]['email']); + box.write(BoxName.driverID, jsonDecoeded['data'][0]['id']); + box.write(BoxName.isTest, '1'); + box.write(BoxName.gender, jsonDecoeded['data'][0]['gender']); + box.write(BoxName.phoneVerified, + jsonDecoeded['data'][0]['is_verified'].toString()); + box.write(BoxName.phoneDriver, jsonDecoeded['data'][0]['phone']); + box.write(BoxName.nameArabic, jsonDecoeded['data'][0]['name_arabic']); + box.write( + BoxName.bankCodeDriver, jsonDecoeded['data'][0]['bankCode']); + box.write(BoxName.accountBankNumberDriver, + jsonDecoeded['data'][0]['accountBank']); + box.write( + BoxName.nameDriver, + '${jsonDecoeded['data'][0]['first_name']}' + ' ${jsonDecoeded['data'][0]['last_name']}'); + if ((jsonDecoeded['data'][0]['model'].toString().contains('دراجه') || + jsonDecoeded['data'][0]['make'].toString().contains('دراجه '))) { + if (jsonDecoeded['data'][0]['gender'].toString() == 'Male') { + box.write(BoxName.carTypeOfDriver, 'Scooter'); + } else { + box.write(BoxName.carTypeOfDriver, 'Pink Bike'); + } + } else if (int.parse(jsonDecoeded['data'][0]['year'].toString()) > + 2017) { + if (jsonDecoeded['data'][0]['gender'].toString() != 'Male') { + box.write(BoxName.carTypeOfDriver, 'Lady'); + } else { + box.write(BoxName.carTypeOfDriver, 'Comfort'); + } + } else if (int.parse(jsonDecoeded['data'][0]['year'].toString()) > + 2002 && + int.parse(jsonDecoeded['data'][0]['year'].toString()) < 2017) { + box.write(BoxName.carTypeOfDriver, 'Speed'); + } else if (int.parse(jsonDecoeded['data'][0]['year'].toString()) < + 2002) { + box.write(BoxName.carTypeOfDriver, 'Awfar Car'); + } + updateAppTester(AppInformation.appName); + + var token = await CRUD().get( + link: AppLink.getDriverToken, + payload: {'captain_id': box.read(BoxName.driverID).toString()}); + + if (token != 'failure') { + if (jsonDecode(token)['data'][0]['token'] != + box.read(BoxName.tokenDriver)) { + Get.put(FirebaseMessagesController()) + .sendNotificationToAnyWithoutData( + 'token change'.tr, + 'change device'.tr, + jsonDecode(token)['data'][0]['token'].toString(), + 'promo.wav'); + Get.defaultDialog( + title: 'you will use this device?'.tr, + middleText: '', + confirm: MyElevatedButton( + title: 'Ok'.tr, + onPressed: () async { + await CRUD() + .post(link: AppLink.addTokensDriver, payload: { + 'token': box.read(BoxName.tokenDriver), + 'captain_id': box.read(BoxName.driverID).toString() + }); + CRUD().post( + link: + "${AppLink.seferAlexandriaServer}/ride/firebase/addDriver.php", + payload: { + 'token': box.read(BoxName.tokenDriver), + 'captain_id': + box.read(BoxName.driverID).toString() + }); + CRUD().post( + link: + "${AppLink.seferGizaServer}/ride/firebase/addDriver.php", + payload: { + 'token': box.read(BoxName.tokenDriver), + 'captain_id': + box.read(BoxName.driverID).toString() + }); + Get.back(); + })); + } + } + + Get.off(() => HomeCaptain()); + // Get.off(() => LoginCaptin()); + } else { + Get.offAll(() => SmsSignupEgypt()); + // Get.snackbar(jsonDecoeded['status'], jsonDecoeded['data'], + // backgroundColor: Colors.redAccent); + isloading = false; + update(); + } + } else { + Get.snackbar('failure'.tr, '', backgroundColor: AppColor.redColor); + isloading = false; + update(); + } + } + } + void loginByBoxData() async { Get.to(() => HomeCaptain()); await CRUD().post(link: AppLink.addTokensDriver, payload: { diff --git a/lib/controller/auth/captin/register_captin_controller.dart b/lib/controller/auth/captin/register_captin_controller.dart index 2fb27ec..5ab0ea6 100644 --- a/lib/controller/auth/captin/register_captin_controller.dart +++ b/lib/controller/auth/captin/register_captin_controller.dart @@ -296,10 +296,19 @@ class RegisterCaptainController extends GetxController { // link: AppLink.updateAccountBank, // payload: {'phone': '+2${phoneController.text}'}); // if (res1 != 'failure') { - await Get.put(LoginDriverController()).loginUsingCredentials( - box.read(BoxName.driverID).toString(), - box.read(BoxName.emailDriver).toString(), - ); + Get.find().isGoogleLogin == true + ? await Get.put(LoginDriverController()) + .loginUsingCredentialsWithoutGoogle( + Get.find() + .passwordController + .text + .toString(), + box.read(BoxName.emailDriver).toString(), + ) + : await Get.put(LoginDriverController()).loginUsingCredentials( + box.read(BoxName.driverID).toString(), + box.read(BoxName.emailDriver).toString(), + ); // Get.to(EgyptCardAI()); // } else { // Get.snackbar('title', 'message'); diff --git a/lib/controller/auth/google_sign.dart b/lib/controller/auth/google_sign.dart index cfe1e32..05015f8 100644 --- a/lib/controller/auth/google_sign.dart +++ b/lib/controller/auth/google_sign.dart @@ -11,6 +11,7 @@ import 'package:google_sign_in/google_sign_in.dart'; import '../../onbording_page.dart'; import '../../views/auth/captin/ai_page.dart'; +import '../functions/add_error.dart'; class GoogleSignInHelper { static final GoogleSignIn _googleSignIn = GoogleSignIn( @@ -81,7 +82,6 @@ class GoogleSignInHelper { // Get.snackbar('Google Sign-In error', '$error', // backgroundColor: AppColor.redColor); // // Log error details - // print('Google Sign-In error: $error'); // return null; // } // } @@ -97,9 +97,6 @@ class GoogleSignInHelper { final emailDriver = box.read(BoxName.emailDriver)?.toString() ?? 'Unknown Email'; - // print('Driver ID: $driverID'); - // print('Email Driver: $emailDriver'); - await Get.find() .loginUsingCredentials(driverID, emailDriver); } @@ -109,26 +106,10 @@ class GoogleSignInHelper { Get.snackbar('Google Sign-In error', '$error', backgroundColor: AppColor.redColor); addError(error.toString(), 'GoogleSignInAccount?> signInFromLogin()'); - print('Google Sign-In error: $error'); return null; } } - addError(String error, where) async { - CRUD().post(link: AppLink.addError, payload: { - 'error': error.toString(), // Example error description - 'userId': box.read(BoxName.driverID) ?? - box.read(BoxName.passengerID), // Example user ID - 'userType': box.read(BoxName.driverID) != null - ? 'Driver' - : 'passenger', // Example user type - 'phone': box.read(BoxName.phone) ?? - box.read(BoxName.phoneDriver), // Example phone number - - 'device': where - }); - } - // Method to handle Google Sign-Out static Future signOut() async { try { @@ -172,10 +153,7 @@ class GoogleSignInHelper { box.write(BoxName.emailDriver, user.email); // box.write(BoxName.nameDriver, user.displayName); // box.write(BoxName.driverPhotoUrl, user.photoUrl); - print(box.read(BoxName.driverID).toString()); - print( - box.read(BoxName.emailDriver).toString(), - ); + // Perform any additional sign-up tasks or API calls here // For example, you can send the user data to your server for registration } diff --git a/lib/controller/firebase/firbase_messge.dart b/lib/controller/firebase/firbase_messge.dart index 5f8b809..26211c4 100644 --- a/lib/controller/firebase/firbase_messge.dart +++ b/lib/controller/firebase/firbase_messge.dart @@ -113,9 +113,13 @@ class FirebaseMessagesController extends GetxController { } Future fireBaseTitles(RemoteMessage message) async { - if (message.notification!.title! == 'Order'.tr) { + if (message.notification!.title! == 'OrderSpeed'.tr) { if (Platform.isAndroid) { - NotificationController().showNotification('Order'.tr, '', 'order', ''); + NotificationController().showNotification( + message.notification!.title.toString(), + message.notification!.body.toString(), + 'order', + ''); } // await FirebaseMessagesController().showOverlayNotification(message); var myListString = message.data['DriverList']; @@ -157,17 +161,34 @@ class FirebaseMessagesController extends GetxController { // Get.to(const VipOrderPage()); } else if (message.notification!.title! == 'message From passenger'.tr) { - passengerDialog(message.notification!.body!); + // passengerDialog(message.notification!.body!); if (Platform.isAndroid) { NotificationController() .showNotification('message From passenger'.tr, ''.tr, 'ding', ''); } + MyDialog().getDialog( + 'message From passenger'.tr, message.notification!.body!, () { + // FirebaseMessagesController().sendNotificationToPassengerToken( + // 'Hi ,I will go now'.tr, + // 'I will go now'.tr, + // Get.find().driverToken, []); + // Get.find() + // .startTimerDriverWaitPassenger5Minute(); + Get.back(); + }); } else if (message.notification!.title == 'Cancel') { - cancelTripDialog1(); if (Platform.isAndroid) { NotificationController() .showNotification('Cancel'.tr, ''.tr, 'cancel', ''); } + MyDialog().getDialog( + 'Passenger Cancel Trip'.tr, + 'Trip Cancelled. The cost of the trip will be added to your wallet.' + .tr, () { + box.write(BoxName.rideStatus, 'Cancel'); + Get.offAll(HomeCaptain()); + }); + // cancelTripDialog1(); } else if (message.notification!.title! == 'token change') { // NotificationController1() // .showNotification('token change'.tr, 'token change', 'cancel'); @@ -181,24 +202,16 @@ class FirebaseMessagesController extends GetxController { String result0 = await faceDetector(); // Handle the result here, e.g., show a dialog or update the UI var result = jsonDecode(result0); - Get.defaultDialog( - barrierDismissible: false, - title: 'Face Detection Result'.tr, - titleStyle: AppStyle.title, - content: Text( + MyDialogContent().getDialog( + 'Face Detection Result'.tr, + Text( result['similar'].toString() == 'true' ? 'similar'.tr : 'not similar'.tr, style: AppStyle.title, - ), - backgroundColor: result['similar'].toString() == 'true' - ? AppColor.greenColor - : AppColor.redColor, - confirm: MyElevatedButton( - title: 'OK'.tr, - onPressed: () { - Get.back(); - })); + ), () { + Get.back(); + }); update(); } else if (message.notification!.title! == 'Hi ,I will go now') { @@ -279,13 +292,21 @@ class FirebaseMessagesController extends GetxController { backgroundColor: AppColor.yellowColor, snackPosition: SnackPosition.BOTTOM, ); - } else if (message.notification!.title! == 'OrderSpeed') { + } else if (message.notification!.title! == 'Order') { + if (Platform.isAndroid) { + NotificationController().showNotification( + message.notification!.title.toString(), + message.notification!.body.toString(), + 'order', + ''); + } var myListString = message.data['DriverList']; // var points = message.data['PolylineJson']; var myList = jsonDecode(myListString) as List; // var myPoints = jsonDecode(points) as List; driverToken = myList[14].toString(); + Get.put(HomeCaptainController()).changeRideId(); update(); Get.to(() => OrderSpeedRequest(), arguments: { 'myListString': myListString, diff --git a/lib/controller/functions/add_error.dart b/lib/controller/functions/add_error.dart new file mode 100644 index 0000000..320a996 --- /dev/null +++ b/lib/controller/functions/add_error.dart @@ -0,0 +1,19 @@ +import '../../constant/box_name.dart'; +import '../../constant/links.dart'; +import '../../main.dart'; +import 'crud.dart'; + +addError(String error, where) async { + CRUD().post(link: AppLink.addError, payload: { + 'error': error.toString(), // Example error description + 'userId': box.read(BoxName.driverID) ?? + box.read(BoxName.passengerID), // Example user ID + 'userType': box.read(BoxName.driverID) != null + ? 'Driver' + : 'passenger', // Example user type + 'phone': box.read(BoxName.phone) ?? + box.read(BoxName.phoneDriver), // Example phone number + + 'device': where + }); +} diff --git a/lib/controller/functions/audio_controller.dart b/lib/controller/functions/audio_controller.dart new file mode 100644 index 0000000..5d5803a --- /dev/null +++ b/lib/controller/functions/audio_controller.dart @@ -0,0 +1,29 @@ +import 'package:flutter/material.dart'; +import 'package:just_audio/just_audio.dart'; +import 'package:get/get.dart'; + +class AudioController extends GetxController { + final AudioPlayer _audioPlayer = AudioPlayer(); + + Future playAudio() async { + // Check if the platform is Android + if (Theme.of(Get.context!).platform == TargetPlatform.android) { + try { + // Load the audio file from the raw resources + await _audioPlayer.setAsset( + 'assets/order1.wav'); // Adjust the path based on your project structure + _audioPlayer.play(); + } catch (e) { + // Handle errors, such as file not found + print('Error playing audio: $e'); + } + } + } + + @override + void onClose() { + // Release resources when done + _audioPlayer.dispose(); + super.onClose(); + } +} diff --git a/lib/controller/functions/gemeni.dart b/lib/controller/functions/gemeni.dart index 25d8966..8b6bf38 100644 --- a/lib/controller/functions/gemeni.dart +++ b/lib/controller/functions/gemeni.dart @@ -1,9 +1,11 @@ import 'dart:convert'; import 'dart:io'; +import 'dart:math'; import 'package:SEFER/constant/box_name.dart'; import 'package:SEFER/constant/info.dart'; import 'package:SEFER/constant/links.dart'; import 'package:SEFER/constant/style.dart'; +import 'package:SEFER/controller/auth/captin/login_captin_controller.dart'; import 'package:SEFER/controller/functions/crud.dart'; import 'package:SEFER/controller/functions/device_info.dart'; import 'package:SEFER/main.dart'; @@ -312,7 +314,13 @@ class AI extends GetxController { 'email': box.read(BoxName.emailDriver)?.toString() ?? 'Not specified', 'phone': box.read(BoxName.phoneDriver)?.toString() ?? 'Not specified', 'id': box.read(BoxName.driverID)?.toString() ?? 'Not specified', - 'password': '123456', + 'password': + Get.find().passwordController.text.isEmpty + ? box.read(BoxName.emailDriver).toString() + : Get.find() + .passwordController + .text + .toString(), 'gender': responseIdEgyptBack['gender']?.toString() ?? 'Not specified', 'license_type': responseIdEgyptDriverLicense['license_type']?.toString() ?? diff --git a/lib/controller/home/captin/map_driver_controller.dart b/lib/controller/home/captin/map_driver_controller.dart index 5847352..1655976 100644 --- a/lib/controller/home/captin/map_driver_controller.dart +++ b/lib/controller/home/captin/map_driver_controller.dart @@ -1,8 +1,10 @@ import 'dart:async'; import 'dart:convert'; +import 'dart:io'; import 'package:SEFER/controller/home/captin/home_captain_controller.dart'; import 'package:SEFER/controller/home/captin/order_request_controller.dart'; import 'package:SEFER/views/widgets/mydialoug.dart'; +import 'package:bubble_head/bubble.dart'; import 'package:flutter/material.dart'; import 'package:geolocator/geolocator.dart'; import 'package:get/get.dart'; @@ -303,9 +305,6 @@ class MapDriverController extends GetxController { box.read(BoxName.name).toString(), tokenPassenger, 'start.wav'); - if (box.read(BoxName.googlaMapApp) == true) { - await openGoogleMapFromDriverToPassenger(); - } } bool isSocialPressed = false; @@ -346,6 +345,7 @@ class MapDriverController extends GetxController { } void startRideFromStartApp() { + // if (box.read(BoxName.rideStatus) == 'Begin') { changeRideToBeginToPassenger(); isPassengerInfoWindow = false; isRideStarted = true; @@ -354,6 +354,8 @@ class MapDriverController extends GetxController { timeWaitingPassenger = 0; box.write(BoxName.statusDriverLocation, 'on'); update(); + // } + // rideIsBeginPassengerTimer(); } @@ -398,20 +400,15 @@ class MapDriverController extends GetxController { // var d = jsonDecode(res); update(); + Get.back(); // Start updating location and moving camera // updateLocation(); } else { - Get.defaultDialog( - barrierDismissible: false, - title: 'Your are far from passenger location'.tr, - middleText: - 'go to your passenger location before\nPassenger cancel trip'.tr, - confirm: MyElevatedButton( - title: 'Ok', - onPressed: () { - Get.back(); - }), - ); + Get.back(); + MyDialog().getDialog('Your are far from passenger location'.tr, + 'go to your passenger location before\nPassenger cancel trip'.tr, () { + Get.back(); + }); } } @@ -486,15 +483,10 @@ class MapDriverController extends GetxController { await calculateDistanceBetweenDriverAndPassengerLocation(); if (distance2 > 60) { - Get.defaultDialog( - title: 'Your are far from passenger location'.tr, - middleText: - 'go to your passenger location before\nPassenger cancel trip'.tr, - confirm: MyElevatedButton( - title: 'Ok', - onPressed: () { - Get.back(); - })); + MyDialog().getDialog('Your are far from passenger location'.tr, + 'go to your passenger location before\nPassenger cancel trip'.tr, () { + Get.back(); + }); } else { double costOfWaiting5Minute = box.read(BoxName.countryCode) == 'Egypt' ? (distanceBetweenDriverAndPassengerWhenConfirm * .08) + (5 * 1) @@ -559,36 +551,22 @@ class MapDriverController extends GetxController { Get.find().myLocation.latitude, Get.find().myLocation.longitude, ); - Get.defaultDialog( - title: 'Are you sure to exit ride ?'.tr, - titleStyle: AppStyle.title, - middleText: '', - confirm: MyElevatedButton( - title: 'Ok'.tr, - kolor: AppColor.greenColor, - onPressed: () { - if (distanceToDestination > 900 || - (double.parse(distance) < 1000 && - distanceToDestination > 500)) { - Get.back(); - finishRideFromDriver1(); - } else { - Get.back(); - if (distanceToDestination < 150) { - // todo add scam from start point and dont move - // finishRideFromDriver1(); - } - MyDialog().getDialog('you are not moved yet !'.tr, '', () { - Get.back(); - }); - } - }), - cancel: MyElevatedButton( - title: 'Cancel'.tr, - kolor: Colors.red, - onPressed: () { - Get.back(); - })); + MyDialog().getDialog('Are you sure to exit ride ?'.tr, '', () { + if (distanceToDestination > 900 || + (double.parse(distance) < 1000 && distanceToDestination > 150)) { + Get.back(); + finishRideFromDriver1(); + } else { + Get.back(); + if (distanceToDestination <= 150) { + // todo add scam from start point and dont move + // finishRideFromDriver1(); + } + MyDialog().getDialog('you are not moved yet !'.tr, '', () { + Get.back(); + }); + } + }); } String paymentToken = ''; @@ -736,17 +714,12 @@ class MapDriverController extends GetxController { isPassengerInfoWindow = false; clearPolyline(); update(); - Get.defaultDialog( - title: 'Order Cancelled'.tr, - titleStyle: AppStyle.title, - middleText: 'Order Cancelled by Passenger'.tr, - middleTextStyle: AppStyle.title, - confirm: MyElevatedButton( - title: 'Ok'.tr, - onPressed: () { - Get.offAll(HomeCaptain()); - }, - ), + MyDialog().getDialog( + 'Order Cancelled'.tr, + 'Order Cancelled by Passenger'.tr, + () { + Get.offAll(HomeCaptain()); + }, ); } } @@ -827,29 +800,25 @@ class MapDriverController extends GetxController { : (i ~/ 60) * (latePrice + .5) * 2 + (price); } price = carType == 'Comfort' // || carType == 'Free Ride' - ? (i ~/ 60) * (latePrice + .5) + - (price) - - int.parse(duration) * (latePrice + .5) + ? (latePrice + 0.5) * ((i ~/ 60) - int.parse(duration)) + price : carType == 'Lady' - ? (i ~/ 60) * (latePrice + .5) + - (price) - - int.parse(duration) * (latePrice + .5) + ? (latePrice + 0.5) * ((i ~/ 60) - int.parse(duration)) + + price : carType == 'RayehGaiComfort' - ? (i ~/ 60) * (latePrice + .5) + - (price) - - int.parse(duration) * (latePrice + .5) + ? (latePrice + 0.5) * ((i ~/ 60) - int.parse(duration)) + + price : price; } else if (currentTime.hour >= 14 && currentTime.hour <= 17) { price = carType == 'Comfort' // || carType == 'Free Ride' - ? (i ~/ 60) * (Get.find().heavyPrice) + - (price) - - int.parse(duration) * - (Get.find().heavyPrice + .5) + ? Get.find().heavyPrice * + ((i ~/ 60) - int.parse(duration)) + + price - + (0.5 * int.parse(duration)) : carType == 'Lady' - ? (i ~/ 60) * (Get.find().heavyPrice) + - (price) - - int.parse(duration) * - (Get.find().heavyPrice + .5) + ? Get.find().heavyPrice * + ((i ~/ 60) - int.parse(duration)) + + price - + (0.5 * int.parse(duration)) : carType == 'RayehGaiComfort' ? (i ~/ 60) * (Get.find().heavyPrice) + @@ -1191,11 +1160,21 @@ class MapDriverController extends GetxController { late String startNameLocation; late String endNameLocation; + Future runGoogleMapDirectly() async { + if (box.read(BoxName.googlaMapApp) == true) { + if (Platform.isAndroid) { + Bubble().startBubbleHead(sendAppToBackground: true); + } + await openGoogleMapFromDriverToPassenger(); + } + } + @override void onInit() async { mapAPIKEY = await storage.read(key: BoxName.mapAPIKEY); // Get the passenger location from the arguments. // await argumentLoading(); + runGoogleMapDirectly(); addCustomCarIcon(); addCustomPassengerIcon(); addCustomStartIcon(); diff --git a/lib/controller/home/captin/order_request_controller.dart b/lib/controller/home/captin/order_request_controller.dart index aebe104..9a1c1bd 100644 --- a/lib/controller/home/captin/order_request_controller.dart +++ b/lib/controller/home/captin/order_request_controller.dart @@ -3,13 +3,11 @@ import 'dart:convert'; import 'package:flutter/cupertino.dart'; import 'package:get/get.dart'; import 'package:SEFER/constant/links.dart'; -import 'package:SEFER/constant/style.dart'; import 'package:SEFER/main.dart'; -import 'package:SEFER/views/widgets/elevated_btn.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'dart:math' as math; import '../../../constant/box_name.dart'; -import '../../../constant/table_names.dart'; +import '../../functions/audio_controller.dart'; import '../../functions/crud.dart'; import '../../functions/location_controller.dart'; import 'home_captain_controller.dart'; @@ -33,10 +31,14 @@ class OrderRequestController extends GetxController { @override void onInit() { + // AudioController audioController = Get.put(AudioController()); + + // audioController.playAudio(); // getRefusedOrderByCaptain(); initilizeOrderPage(); addCustomStartIcon(); addCustomEndIcon(); + // calculateConsumptionFuel(); update(); super.onInit(); diff --git a/lib/controller/local/translations.dart b/lib/controller/local/translations.dart index 745b844..196f0f8 100644 --- a/lib/controller/local/translations.dart +++ b/lib/controller/local/translations.dart @@ -63,6 +63,7 @@ class MyTranslation extends Translations { "Criminal Record": "السجل الجنائي", "ID Documents Back": "الوثيقه الشخصية - الخلفية", "Driver's License": "رخصة القيادة", + "No, still Waiting.": "لا، ما زلت في انتظار.", "you can show video how to setup": "يمكنك عرض فيديو حول كيفية الإعداد", "don't start trip if not": "لا تبدأ الرحلة إذا لم", @@ -544,6 +545,7 @@ Store your money with us and receive it in your bank as a monthly salary.''': "for your first registration!": "للتسجيل الأول!", "Get it Now!": "احصل عليه الآن!", "before": "قبل", + 'SEFER': 'سفر', "Code not approved": "الرمز غير موافق عليه", "3000 LE": "3000 جنيه مصري", "Do you have an invitation code from another driver?": @@ -1086,6 +1088,16 @@ Store your money with us and receive it in your bank as a monthly salary.''': "Warning: Speeding detected!": "تحذير: تم اكتشاف السرعة الزائدة!", "Please help! Contact me as soon as possible.": "من فضلك ساعدني! تواصل معي في أقرب وقت ممكن.", + "Email": "البريد الإلكتروني", + "Please enter your Email.": "يرجى إدخال بريدك الإلكتروني", + "Email must be correct.": "البريد الإلكتروني يجب أن يكون صحيحاً", + "Password": "كلمة المرور", + "Please enter your Password.": "يرجى إدخال كلمة المرور", + "Password must be at least 6 characters.": + "يجب أن تكون كلمة المرور مكونة من 6 أحرف على الأقل", + "Phone Number": "رقم الهاتف", + "Please enter your phone number.": "يرجى إدخال رقم هاتفك", + "Phone number must be valid.": "يجب أن يكون رقم الهاتف صحيحاً", "Share Trip Details": "شارك تفاصيل الرحلة", "Car Plate is": "لوحة السيارة", 'L.E': 'ج.م', diff --git a/lib/views/auth/captin/login_captin.dart b/lib/views/auth/captin/login_captin.dart index 17bb897..dfc6d60 100644 --- a/lib/views/auth/captin/login_captin.dart +++ b/lib/views/auth/captin/login_captin.dart @@ -2,6 +2,7 @@ import 'dart:io'; import 'package:SEFER/controller/auth/facebook_login.dart'; import 'package:SEFER/views/auth/captin/contact_us_page.dart'; +import 'package:SEFER/views/widgets/my_textField.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; @@ -20,6 +21,7 @@ import '../../../controller/auth/google_sign.dart'; import '../../../controller/functions/location_permission.dart'; import '../../../controller/functions/overlay_permisssion.dart'; import '../../../main.dart'; +import '../../../print.dart'; import '../../widgets/elevated_btn.dart'; import '../../widgets/my_scafold.dart'; import '../../widgets/mycircular.dart'; @@ -48,400 +50,332 @@ class LoginCaptin extends StatelessWidget { else SingleChildScrollView( child: Column( + mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ - Padding( - padding: const EdgeInsets.all(25), - child: - // Container( - // decoration: const BoxDecoration( - // boxShadow: [ - // BoxShadow( - // offset: Offset(3, 3), - // color: AppColor.accentColor, - // blurRadius: 3) - // ], - // color: AppColor.secondaryColor, - // ), - // child: Form( - // key: controller.formKey, - // child: Padding( - // padding: const EdgeInsets.all(16.0), - // child: SingleChildScrollView( - // child: Column( - // children: [ - // TextFormField( - // keyboardType: TextInputType.emailAddress, - // controller: controller.emailController, - // decoration: InputDecoration( - // focusedBorder: OutlineInputBorder( - // borderSide: const BorderSide( - // color: AppColor.primaryColor, - // width: 2.0, - // ), - // borderRadius: BorderRadius.circular(10), - // ), - // fillColor: AppColor.accentColor, - // hoverColor: AppColor.accentColor, - // focusColor: AppColor.accentColor, - // border: const OutlineInputBorder( - // borderRadius: BorderRadius.all( - // Radius.circular(12))), - // labelText: 'Email'.tr, - // hintText: 'Enter your email address'.tr, - // ), - // validator: (value) { - // if (value!.isEmpty || - // (!value.contains('@') || - // !value.contains('.'))) { - // return 'Please enter Your Email.'.tr; - // } - // return null; - // }, - // ), - // const SizedBox( - // height: 30, - // ), - // TextFormField( - // keyboardType: TextInputType.phone, - // cursorColor: AppColor.accentColor, - // controller: controller.phoneController, - // decoration: InputDecoration( - // focusedBorder: OutlineInputBorder( - // borderSide: const BorderSide( - // color: AppColor.primaryColor, - // width: 2.0, - // ), - // borderRadius: BorderRadius.circular(10), - // ), - // focusColor: AppColor.accentColor, - // fillColor: AppColor.accentColor, - // border: const OutlineInputBorder( - // borderRadius: BorderRadius.all( - // Radius.circular(12))), - // labelText: 'Phone'.tr, - // hintText: 'Enter your phone number'.tr, - // ), - // validator: (value) { - // if (value!.isEmpty || - // value.length != 10) { - // return 'Please enter your phone number.' - // .tr; - // } - // return null; - // }, - // ), - // const SizedBox( - // height: 15, - // ), - // TextFormField( - // obscureText: true, - // keyboardType: TextInputType.emailAddress, - // controller: controller.passwordController, - // decoration: InputDecoration( - // focusedBorder: OutlineInputBorder( - // borderSide: const BorderSide( - // color: AppColor.primaryColor, - // width: 2.0, - // ), - // borderRadius: BorderRadius.circular(10), - // ), - // fillColor: AppColor.accentColor, - // hoverColor: AppColor.accentColor, - // focusColor: AppColor.accentColor, - // border: const OutlineInputBorder( - // borderRadius: BorderRadius.all( - // Radius.circular(12))), - // labelText: 'Password'.tr, - // hintText: - // 'Please enter your phone number.'.tr, - // ), - // validator: (value) { - // if (value!.isEmpty) { - // return 'Please enter Your Password.'.tr; - // } - // if (value.length < 6) { - // return 'Password must br at least 6 character.' - // .tr; - // } - // return null; - // }, - // ), - // controller.isloading - // ? const MyCircularProgressIndicator() - // : MyElevatedButton( - // onPressed: () { - // if (controller.formKey.currentState! - // .validate()) { - // controller.login(); - // } - // }, - // title: 'Submit'.tr, - // ), - // ], - // ), - // ), - // ), - // ), - // ) - - Center( + controller.isGoogleDashOpen + ? registerWitoutGoogle(controller) + : Padding( + padding: const EdgeInsets.all(25), + child: Center( child: Container( - decoration: AppStyle.boxDecoration1, - height: Get.height * .7, - width: Get.width * .9, - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Image.asset( - 'assets/images/logo.gif', - height: Get.width * .3, - width: Get.width * .3, - fit: BoxFit.fill, - ), - Platform.isIOS && controller.isTest == 0 - ? Container( - decoration: AppStyle.boxDecoration, - child: Column( - children: [ - Form( - key: controller.formKey, - child: Padding( - padding: const EdgeInsets.all(16.0), - child: SingleChildScrollView( - child: Column( - children: [ - TextFormField( - keyboardType: TextInputType - .emailAddress, - controller: controller - .emailController, - decoration: InputDecoration( - focusedBorder: - OutlineInputBorder( - borderSide: - const BorderSide( - color: AppColor - .primaryColor, - width: 2.0, - ), - borderRadius: - BorderRadius - .circular(10), - ), - fillColor: - AppColor.accentColor, - hoverColor: - AppColor.accentColor, - focusColor: - AppColor.accentColor, - border: const OutlineInputBorder( - borderRadius: - BorderRadius.all( - Radius + decoration: AppStyle.boxDecoration1, + height: Get.height * .7, + width: Get.width * .9, + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Image.asset( + 'assets/images/logo.gif', + height: Get.width * .3, + width: Get.width * .3, + fit: BoxFit.fill, + ), + Platform.isIOS && controller.isTest == 0 + ? Container( + decoration: AppStyle.boxDecoration, + child: Column( + children: [ + Form( + key: controller.formKey, + child: Padding( + padding: + const EdgeInsets.all(16.0), + child: SingleChildScrollView( + child: Column( + children: [ + TextFormField( + keyboardType: + TextInputType + .emailAddress, + controller: controller + .emailController, + decoration: + InputDecoration( + focusedBorder: + OutlineInputBorder( + borderSide: + const BorderSide( + color: AppColor + .primaryColor, + width: 2.0, + ), + borderRadius: + BorderRadius + .circular( + 10), + ), + fillColor: AppColor + .accentColor, + hoverColor: AppColor + .accentColor, + focusColor: AppColor + .accentColor, + border: const OutlineInputBorder( + borderRadius: BorderRadius + .all(Radius .circular( 12))), - labelText: 'Email'.tr, - hintText: - 'Enter your email address' - .tr, - ), - validator: (value) { - if (value!.isEmpty || - (!value.contains( - '@') || - !value.contains( - '.'))) { - return 'Please enter Your Email.' - .tr; - } - return null; - }, - ), - const SizedBox( - height: 15, - ), - TextFormField( - obscureText: true, - keyboardType: TextInputType - .emailAddress, - controller: controller - .passwordController, - decoration: InputDecoration( - focusedBorder: - OutlineInputBorder( - borderSide: - const BorderSide( - color: AppColor - .primaryColor, - width: 2.0, + labelText: 'Email'.tr, + hintText: + 'Enter your email address' + .tr, ), - borderRadius: - BorderRadius - .circular(10), + validator: (value) { + if (value!.isEmpty || + (!value.contains( + '@') || + !value.contains( + '.'))) { + return 'Please enter Your Email.' + .tr; + } + return null; + }, ), - fillColor: - AppColor.accentColor, - hoverColor: - AppColor.accentColor, - focusColor: - AppColor.accentColor, - border: const OutlineInputBorder( - borderRadius: - BorderRadius.all( - Radius + const SizedBox( + height: 15, + ), + TextFormField( + obscureText: true, + keyboardType: + TextInputType + .emailAddress, + controller: controller + .passwordController, + decoration: + InputDecoration( + focusedBorder: + OutlineInputBorder( + borderSide: + const BorderSide( + color: AppColor + .primaryColor, + width: 2.0, + ), + borderRadius: + BorderRadius + .circular( + 10), + ), + fillColor: AppColor + .accentColor, + hoverColor: AppColor + .accentColor, + focusColor: AppColor + .accentColor, + border: const OutlineInputBorder( + borderRadius: BorderRadius + .all(Radius .circular( 12))), - labelText: 'Password'.tr, - hintText: - 'Please enter your phone number.' - .tr, - ), - validator: (value) { - if (value!.isEmpty) { - return 'Please enter Your Password.' - .tr; - } - if (value.length < 6) { - return 'Password must br at least 6 character.' - .tr; - } - return null; - }, + labelText: + 'Password'.tr, + hintText: + 'Please enter your phone number.' + .tr, + ), + validator: (value) { + if (value!.isEmpty) { + return 'Please enter Your Password.' + .tr; + } + if (value.length < + 6) { + return 'Password must br at least 6 character.' + .tr; + } + return null; + }, + ), + GetBuilder< + LoginDriverController>( + builder: (controller) => + controller.isloading + ? const MyCircularProgressIndicator() + : MyElevatedButton( + onPressed: + () async { + if (controller + .formKey + .currentState! + .validate()) { + await Get.find() + .loginUsingCredentials( + controller + .passwordController + .text, + controller + .emailController + .text, + ); + } + }, + title: + 'Submit' + .tr, + ), + ) + ], ), - GetBuilder< - LoginDriverController>( - builder: (controller) => - controller.isloading - ? const MyCircularProgressIndicator() - : MyElevatedButton( - onPressed: - () async { - if (controller - .formKey - .currentState! - .validate()) { - await Get.find< - LoginDriverController>() - .loginUsingCredentials( - controller - .passwordController - .text, - controller - .emailController - .text, - ); - } - }, - title: - 'Submit'.tr, - ), - ) - ], + ), ), ), + const SizedBox( + height: 10, + ), + ], + ), + ) + : Container( + decoration: AppStyle.boxDecoration1, + height: Get.height * .3, + width: Get.width * .8, + child: Center( + child: Column( + mainAxisAlignment: + MainAxisAlignment.spaceAround, + children: [ + Text( + 'Sign in with Google for easier email and name entry' + .tr, + textAlign: TextAlign.center, + style: AppStyle.title, + ), + Text( + 'Or'.tr, + textAlign: TextAlign.center, + style: AppStyle.title, + ), + GestureDetector( + onTap: () async { + controller + .changeGoogleDashOpen(); + }, + child: Container( + padding: const EdgeInsets + .symmetric( + horizontal: 16, + vertical: 10), + decoration: BoxDecoration( + color: AppColor.blueColor, + borderRadius: + BorderRadius.circular( + 8), + ), + child: Row( + mainAxisSize: + MainAxisSize.min, + children: [ + const Icon( + Icons.email, + color: AppColor + .yellowColor, + ), + const SizedBox(width: 8), + Text( + 'Create new Account'.tr, + style: const TextStyle( + color: Colors.white, + fontSize: 16, + fontWeight: + FontWeight.w500, + ), + ), + ], + ), + ), + ), + ], ), ), - const SizedBox( - height: 10, + ), + GestureDetector( + onTap: () async { + await GoogleSignInHelper() + .signInFromLogin(); + }, + child: Container( + padding: const EdgeInsets.symmetric( + horizontal: 16, vertical: 10), + decoration: BoxDecoration( + color: AppColor.redColor, + borderRadius: BorderRadius.circular(8), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + const Icon( + FontAwesome.google, + color: AppColor.blueColor, + ), + const SizedBox(width: 8), + Text( + 'Sign In by Google'.tr, + style: const TextStyle( + color: Colors.white, + fontSize: 16, + fontWeight: FontWeight.w500, + ), ), ], ), - ) - : Container( - decoration: AppStyle.boxDecoration1, - height: Get.height * .3, - width: Get.width * .8, - child: Center( - child: Text( - 'Sign in with Google for easier email and name entry' - .tr, - textAlign: TextAlign.center, - style: AppStyle.title, - ), - ), ), - GestureDetector( - onTap: () async { - await GoogleSignInHelper().signInFromLogin(); - }, - child: Container( - padding: const EdgeInsets.symmetric( - horizontal: 16, vertical: 10), - decoration: BoxDecoration( - color: AppColor.redColor, - borderRadius: BorderRadius.circular(8), ), - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - const Icon( - FontAwesome.google, - color: AppColor.blueColor, - ), - const SizedBox(width: 8), - Text( - 'Sign In by Google'.tr, - style: const TextStyle( - color: Colors.white, - fontSize: 16, - fontWeight: FontWeight.w500, - ), - ), - ], - ), - ), + !Platform.isAndroid + ? GestureDetector( + onTap: () async { + User? user = await authController + .signInWithApple(); + if (user != null) { + box.write( + BoxName.driverID, user.uid); + box.write(BoxName.emailDriver, + user.email); + Get.find() + .loginUsingCredentials( + box + .read(BoxName.driverID) + .toString(), + box + .read(BoxName.emailDriver) + .toString(), + ); + // Navigate to another screen or perform other actions + } else {} + }, + child: Container( + padding: const EdgeInsets.symmetric( + horizontal: 16, vertical: 10), + decoration: BoxDecoration( + color: Colors.black, + borderRadius: + BorderRadius.circular(8), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + const Icon( + Icons.apple, + color: Colors.white, + size: 24, + ), + const SizedBox(width: 8), + Text( + 'Sign in with Apple'.tr, + style: const TextStyle( + color: Colors.white, + fontSize: 16, + fontWeight: FontWeight.w500, + ), + ), + ], + ), + ), + ) + : const SizedBox(), + ], ), - !Platform.isAndroid - ? GestureDetector( - onTap: () async { - User? user = await authController - .signInWithApple(); - if (user != null) { - box.write(BoxName.driverID, user.uid); - box.write( - BoxName.emailDriver, user.email); - Get.find() - .loginUsingCredentials( - box.read(BoxName.driverID).toString(), - box - .read(BoxName.emailDriver) - .toString(), - ); - // Navigate to another screen or perform other actions - } else {} - }, - child: Container( - padding: const EdgeInsets.symmetric( - horizontal: 16, vertical: 10), - decoration: BoxDecoration( - color: Colors.black, - borderRadius: BorderRadius.circular(8), - ), - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - const Icon( - Icons.apple, - color: Colors.white, - size: 24, - ), - const SizedBox(width: 8), - Text( - 'Sign in with Apple'.tr, - style: const TextStyle( - color: Colors.white, - fontSize: 16, - fontWeight: FontWeight.w500, - ), - ), - ], - ), - ), - ) - : const SizedBox(), - ], - ), - ))), + ))), GestureDetector( onTap: () => Get.to(() => ContactUsPage()), child: Text( @@ -458,6 +392,156 @@ class LoginCaptin extends StatelessWidget { ); } + Column registerWitoutGoogle(LoginDriverController controller) { + return Column( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Form( + key: controller.formKey, + child: Padding( + padding: const EdgeInsets.all(16.0), + child: SingleChildScrollView( + child: Column( + children: [ + Padding( + padding: const EdgeInsets.all(16.0), + child: TextFormField( + obscureText: false, // Email should not be obscured + keyboardType: TextInputType.emailAddress, + controller: controller.emailController, + decoration: InputDecoration( + focusedBorder: OutlineInputBorder( + borderSide: const BorderSide( + color: AppColor.primaryColor, + width: 2.0, + ), + borderRadius: BorderRadius.circular(10), + ), + fillColor: AppColor.accentColor, + hoverColor: AppColor.accentColor, + focusColor: AppColor.accentColor, + border: const OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(12)), + ), + labelText: 'Email' + .tr, // English: Email / Arabic: البريد الإلكتروني + hintText: 'Please enter your Email.' + .tr, // English: Please enter your Email / Arabic: يرجى إدخال بريدك الإلكتروني + ), + validator: (value) { + if (value!.isEmpty) { + return 'Please enter your Email.' + .tr; // English: Please enter your Email / Arabic: يرجى إدخال بريدك الإلكتروني + } + if (!value.contains('@')) { + return 'Email must be correct.' + .tr; // English: Email must be correct / Arabic: البريد الإلكتروني يجب أن يكون صحيحاً + } + return null; + }, + ), + ), + Padding( + padding: const EdgeInsets.all(16.0), + child: TextFormField( + obscureText: true, // Password should be obscured + keyboardType: TextInputType.text, + controller: controller.passwordController, + decoration: InputDecoration( + focusedBorder: OutlineInputBorder( + borderSide: const BorderSide( + color: AppColor.primaryColor, + width: 2.0, + ), + borderRadius: BorderRadius.circular(10), + ), + fillColor: AppColor.accentColor, + hoverColor: AppColor.accentColor, + focusColor: AppColor.accentColor, + border: const OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(12)), + ), + labelText: 'Password' + .tr, // English: Password / Arabic: كلمة المرور + hintText: 'Please enter your Password.' + .tr, // English: Please enter your Password / Arabic: يرجى إدخال كلمة المرور + ), + validator: (value) { + if (value!.isEmpty) { + return 'Please enter your Password.' + .tr; // English: Please enter your Password / Arabic: يرجى إدخال كلمة المرور + } + if (value.length < 6) { + return 'Password must be at least 6 characters.' + .tr; // English: Password must be at least 6 characters / Arabic: يجب أن تكون كلمة المرور مكونة من 6 أحرف على الأقل + } + return null; + }, + ), + ), + controller.isloading + ? const MyCircularProgressIndicator() + : MyElevatedButton( + onPressed: () { + if (controller.formKey.currentState!.validate()) { + String email = controller.emailController + .text; // Assume you have this controller + String uniqueId = + controller.generateUniqueIdFromEmail(email); + Log.print('Generated ID: $uniqueId'); + box.write(BoxName.driverID, uniqueId); + box.write(BoxName.emailDriver, + controller.emailController.text.toString()); + controller.loginUsingCredentialsWithoutGoogle( + controller.passwordController.text.toString(), + controller.emailController.text.toString(), + ); + } + }, + title: 'Next'.tr, + ), + ], + ), + ), + ), + ), + const SizedBox( + height: 200, + ), + GestureDetector( + onTap: () async { + await GoogleSignInHelper().signInFromLogin(); + }, + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 10), + decoration: BoxDecoration( + color: AppColor.redColor, + borderRadius: BorderRadius.circular(8), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + const Icon( + FontAwesome.google, + color: AppColor.blueColor, + ), + const SizedBox(width: 8), + Text( + 'Sign In by Google'.tr, + style: const TextStyle( + color: Colors.white, + fontSize: 16, + fontWeight: FontWeight.w500, + ), + ), + ], + ), + ), + ), + ], + ); + } + Padding agreedPage() { return Padding( padding: const EdgeInsets.all(16), diff --git a/lib/views/home/Captin/driver_map_page.dart b/lib/views/home/Captin/driver_map_page.dart index fff673e..ccf7d33 100644 --- a/lib/views/home/Captin/driver_map_page.dart +++ b/lib/views/home/Captin/driver_map_page.dart @@ -37,6 +37,7 @@ class PassengerLocationMapPage extends StatelessWidget { mapDriverController.startTimerToShowPassengerInfoWindowFromDriver(); return Scaffold( + // backgroundColor: AppColor.blueColor, // title: 'Map Passenger'.tr, body: SafeArea( child: Stack( diff --git a/lib/views/home/Captin/home_captain/home_captin.dart b/lib/views/home/Captin/home_captain/home_captin.dart index 3e42faa..693645c 100644 --- a/lib/views/home/Captin/home_captain/home_captin.dart +++ b/lib/views/home/Captin/home_captain/home_captin.dart @@ -5,7 +5,6 @@ import 'package:SEFER/controller/home/captin/map_driver_controller.dart'; import 'package:SEFER/views/notification/available_rides_page.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:flutter_overlay_window/flutter_overlay_window.dart'; import 'package:get/get.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:flutter_font_icons/flutter_font_icons.dart'; @@ -20,7 +19,6 @@ import '../../../../controller/functions/location_controller.dart'; import '../../../../controller/functions/overlay_permisssion.dart'; import '../../../../controller/functions/package_info.dart'; import '../../../../controller/home/captin/home_captain_controller.dart'; -import '../../../../controller/home/captin/order_request_controller.dart'; import '../../../widgets/circle_container.dart'; import '../driver_map_page.dart'; import 'widget/connect.dart'; @@ -37,8 +35,8 @@ class HomeCaptain extends StatelessWidget { @override Widget build(BuildContext context) { // Get.put(OrderRequestController()); - // Get.put(HomeCaptainController()); - Get.put(CaptainWalletController()); + Get.put(HomeCaptainController()); + // Get.put(CaptainWalletController()); WidgetsBinding.instance.addPostFrameCallback((_) async { closeOverlayIfFound(); checkForUpdate(context); @@ -51,25 +49,27 @@ class HomeCaptain extends StatelessWidget { appBar: AppBar( // backgroundColor: AppColor.accentColor, elevation: 1, - title: Text('Home'.tr), + title: Text( + 'SEFER'.tr, + style: AppStyle.title.copyWith(fontSize: 22), + ), actions: [ - GetBuilder( - builder: (orderRequestController) => MyCircleContainer( - child: Text( - orderRequestController.countRefuse.toString(), + MyCircleContainer( + child: Text( + homeCaptainController.countRefuse.toString(), style: AppStyle.title, - )), + ), ), ], ), drawer: CupertinoDrawerCaptain(), body: Stack( children: [ - GetBuilder( - builder: (controller) => controller.isLoading + GetBuilder(builder: (homeCaptainController) { + return homeCaptainController.isLoading ? const MyCircularProgressIndicator() : GoogleMap( - onMapCreated: controller.onMapCreated, + onMapCreated: homeCaptainController.onMapCreated, // cameraTargetBounds: CameraTargetBounds(controller.boundsdata), minMaxZoomPreference: const MinMaxZoomPreference(6, 18), @@ -82,24 +82,24 @@ class HomeCaptain extends StatelessWidget { markerId: MarkerId('MyLocation'.tr), position: locationController.myLocation, draggable: false, - icon: controller.carIcon, + icon: homeCaptainController.carIcon, rotation: locationController.heading) }, - mapType: controller.mapType + mapType: homeCaptainController.mapType ? MapType.satellite : MapType.terrain, myLocationButtonEnabled: true, // liteModeEnabled: true, tiltGesturesEnabled: false, // indoorViewEnabled: true, - trafficEnabled: controller.mapTrafficON, + trafficEnabled: homeCaptainController.mapTrafficON, buildingsEnabled: true, mapToolbarEnabled: true, myLocationEnabled: false, // liteModeEnabled: true, - ), - ), + ); + }), Positioned( bottom: 10, right: Get.width * .1, @@ -109,85 +109,83 @@ class HomeCaptain extends StatelessWidget { top: 5, right: Get.width * .05, left: Get.width * .05, - child: GetBuilder( - builder: (homeCaptainController) => Container( - decoration: AppStyle.boxDecoration, - width: Get.width * .8, - height: 104, - child: Center( - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Icon( - Entypo.wallet, - color: AppColor.greenColor, + child: Container( + decoration: AppStyle.boxDecoration, + width: Get.width * .8, + height: 104, + child: Center( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Icon( + Entypo.wallet, + color: AppColor.greenColor, + ), + Text( + ' You Earn today is '.tr + + homeCaptainController.totalMoneyToday, + style: AppStyle.title, + ), + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Icon( + Entypo.wallet, + color: AppColor.yellowColor, + ), + Text( + '${' You Have in'.tr} ${AppInformation.appName} ${homeCaptainController.totalMoneyInSEFER} ', + style: AppStyle.title, + ), + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Text( + 'Total Budget is '.tr + + Get.find().totalPoints, + style: AppStyle.title, + ), + Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(6), + color: int.parse(Get.find() + .countRideToday) < + 5 + ? AppColor.accentColor + : int.parse(Get.find() + .countRideToday) > + 5 && + int.parse(Get.find< + HomeCaptainController>() + .countRideToday) < + 10 + ? AppColor.yellowColor + : AppColor.greenColor, ), - Text( - ' You Earn today is '.tr + - homeCaptainController.totalMoneyToday, - style: AppStyle.title, - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Icon( - Entypo.wallet, - color: AppColor.yellowColor, - ), - Text( - '${' You Have in'.tr} ${AppInformation.appName} ${homeCaptainController.totalMoneyInSEFER} ', - style: AppStyle.title, - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Text( - 'Total Budget is '.tr + - Get.find().totalPoints, - style: AppStyle.title, - ), - Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(6), - color: int.parse(Get.find() - .countRideToday) < - 5 - ? AppColor.accentColor - : int.parse(Get.find() - .countRideToday) > - 5 && - int.parse(Get.find< - HomeCaptainController>() - .countRideToday) < - 10 - ? AppColor.yellowColor - : AppColor.greenColor, - ), - child: Padding( - padding: const EdgeInsets.symmetric( - horizontal: 8, vertical: 2), - child: Text( - 'Ride Today : '.tr + - Get.find() - .countRideToday, - style: AppStyle.title - .copyWith(color: AppColor.secondaryColor), - ), + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 8, vertical: 2), + child: Text( + 'Ride Today : '.tr + + Get.find() + .countRideToday, + style: AppStyle.title + .copyWith(color: AppColor.secondaryColor), ), ), - ], - ), - ], - ))), - ), + ), + ], + ), + ], + ))), ), Positioned( bottom: 65, diff --git a/lib/views/home/Captin/home_captain/widget/left_menu_map_captain.dart b/lib/views/home/Captin/home_captain/widget/left_menu_map_captain.dart index c54f651..346f368 100644 --- a/lib/views/home/Captin/home_captain/widget/left_menu_map_captain.dart +++ b/lib/views/home/Captin/home_captain/widget/left_menu_map_captain.dart @@ -1,28 +1,21 @@ -import 'dart:io'; +import 'dart:convert'; import 'package:SEFER/constant/box_name.dart'; import 'package:SEFER/controller/firebase/local_notification.dart'; import 'package:SEFER/main.dart'; -import 'package:SEFER/views/auth/captin/cards/egypt_card_a_i.dart'; -import 'package:SEFER/views/auth/captin/cards/sms_signup.dart'; -import 'package:SEFER/views/auth/captin/login_captin.dart'; -import 'package:SEFER/views/home/Captin/driver_map_page.dart'; +import 'package:bubble_head/bubble.dart'; import 'package:flutter/material.dart'; import 'package:flutter_font_icons/flutter_font_icons.dart'; -import 'package:bubble_head/bubble.dart'; -import 'package:flutter_overlay_window/flutter_overlay_window.dart'; import 'package:get/get.dart'; import 'package:SEFER/controller/home/captin/home_captain_controller.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import '../../../../../constant/colors.dart'; -import '../../../../../constant/links.dart'; -import '../../../../../controller/firebase/firbase_messge.dart'; -import '../../../../../controller/functions/location_permission.dart'; -import '../../../../../controller/functions/overlay_permisssion.dart'; -import '../../../../../print.dart'; +import '../../../../../controller/functions/audio_controller.dart'; import '../../../../Rate/ride_calculate_driver.dart'; import '../../../../../controller/functions/location_controller.dart'; +import '../../driver_map_page.dart'; +import '../../orderCaptin/order_speed_request.dart'; GetBuilder leftMainMenuCaptainIcons() { return GetBuilder( @@ -186,32 +179,7 @@ GetBuilder leftMainMenuCaptainIcons() { height: 5, ), // Platform.isAndroid - // ? AnimatedContainer( - // duration: const Duration(microseconds: 200), - // width: controller.widthMapTypeAndTraffic, - // decoration: BoxDecoration( - // color: AppColor.secondaryColor, - // border: Border.all(color: AppColor.blueColor), - // borderRadius: BorderRadius.circular(15)), - // child: Builder(builder: (context) { - // return IconButton( - // onPressed: () async { - // bool isOverlayActive = - // await FlutterOverlayWindow.isActive(); - // if (isOverlayActive) { - // await FlutterOverlayWindow.closeOverlay(); - // } - // // print(box.read(BoxName.tokenDriver)); - // }, - // icon: const Icon( - // FontAwesome5.window_close, - // size: 29, - // color: AppColor.blueColor, - // ), - // ); - // }), - // ) - // : const SizedBox(), + // ? // AnimatedContainer( // duration: const Duration(microseconds: 200), // width: controller.widthMapTypeAndTraffic, @@ -222,63 +190,109 @@ GetBuilder leftMainMenuCaptainIcons() { // child: Builder(builder: (context) { // return IconButton( // onPressed: () async { - // Get.to(() => LoginCaptin()); + // // NotificationController().showNotification( + // // ' message.notification!.title.toString()', + // // ' message.notification!.body.toString()', + // // 'order', + // // ''); + // }, + // icon: const Icon( + // FontAwesome5.window_close, + // size: 29, + // color: AppColor.blueColor, + // ), + // ); + // }), + // ), + // : const SizedBox(), + // AnimatedContainer( + // duration: const Duration(microseconds: 200), + // width: controller.widthMapTypeAndTraffic, + // decoration: BoxDecoration( + // color: AppColor.secondaryColor, + // border: Border.all(color: AppColor.blueColor), + // borderRadius: BorderRadius.circular(15)), + // child: Builder(builder: (context) { + // return IconButton( + // onPressed: () async { + // // Get.to(() => LoginCaptin()); // // print(box.read(BoxName.myList)); + // // Bubble().startBubbleHead(sendAppToBackground: true); + // List d = [ + // "30.003028,31.2419628", + // "30.0955661,31.2665336", + // "160.00", + // "25.92", + // "1488", + // "16.93", + // "114243034311436865474", + // "113172279072358305645", + // "hamza ayed", + // "rlMbi4Hc8L1STMPE99iPKqK4Gddwv8r9qZOCadsz9qTEJZ6KLEE9ruTJI6N8dKfK4CXez5pme5WIs14-1QGo29s07fQOniZgIlJV5XFL3yqzPRSUmn3", + // "+201023248456", + // "1 min", + // "1 m", + // "false", + // "QwUMoyUtZ0J3oR6yXKUavrB_gBl9npUZe-qZtax-Raq4QBbdKv0AmtLKm0BfBd6N_592HBv4CVa41ii4122W3hr-BCUKKzJhzZcK8m0YjbWbtpvgJRD8uD_nuMk9", + // "0", + // "238", + // "false", + // "114243034311436865474", + // "1488", + // "startEnd", + // "30.049307749732176,31.274291574954987", + // "", + // "", + // "", + // "", + // "17.73", + // "0", + // "hamzaayedflutter@gmail.com", + // "الفسطاط، حي مصر القديمة، مصر", + // " الزاوية الحمراء، محافظة القاهرة، مصر", + // "Speed", + // "8", + // "5.00" + // ]; - // // List d = [ - // // "30.003028,31.2419628", - // // "30.0955661,31.2665336", - // // "160.00", - // // "25.92", - // // "1488", - // // "16.93", - // // "114243034311436865474", - // // "113172279072358305645", - // // "hamza ayed", - // // "rlMbi4Hc8L1STMPE99iPKqK4Gddwv8r9qZOCadsz9qTEJZ6KLEE9ruTJI6N8dKfK4CXez5pme5WIs14-1QGo29s07fQOniZgIlJV5XFL3yqzPRSUmn3", - // // "+201023248456", - // // "1 min", - // // "1 m", - // // "false", - // // "QwUMoyUtZ0J3oR6yXKUavrB_gBl9npUZe-qZtax-Raq4QBbdKv0AmtLKm0BfBd6N_592HBv4CVa41ii4122W3hr-BCUKKzJhzZcK8m0YjbWbtpvgJRD8uD_nuMk9", - // // "0", - // // "238", - // // "false", - // // "114243034311436865474", - // // "1488", - // // "startEnd", - // // "30.049307749732176,31.274291574954987", - // // "", - // // "", - // // "", - // // "", - // // "17.73", - // // "0", - // // "hamzaayedflutter@gmail.com", - // // "الفسطاط، حي مصر القديمة، مصر", - // // " الزاوية الحمراء، محافظة القاهرة، مصر", - // // "Speed", - // // "8", - // // "5.00" - // // ]; - // // FirebaseMessagesController().sendNotificationToDriverMAP( - // // 'Order'.tr, - // // 'from: ', - // // // jsonDecode(value)['message'].toString(), - // // 'fKBBB4_1R0q18-byySHUeG:APA91bHk2RmjjMt6eKr7KQnqh4CK02yW3H5E8g_beVcQFgiCG50j9KCtSU1O8PtvS_gA5xuJLhaorDV9AeslcyLFJFf302tICKMiKgsDP5pWkF5WXNw0-4NsoD-BnJxf0-Do9Vs1Zbpq', - // // d, - // // 'order.wav'); - // // NotificationController() - // // .showNotification('VIP Order'.tr, '', 'order', ''); - // // try {} catch (e) { - // // print('Error showing overlay: $e'); - // // } - // // final Bubble _bubble = Bubble(showCloseButton: true); - // // try { - // // await _bubble.startBubbleHead(sendAppToBackground: false); - // // } on PlatformException { - // // print('Failed to call startBubbleHead'); - // // } + // box.write(BoxName.rideArguments, { + // 'passengerLocation': d[0].toString(), + // 'passengerDestination': d[1].toString(), + // 'Duration': d[4].toString(), + // 'totalCost': d[26].toString(), + // 'Distance': d[5].toString(), + // 'name': d[8].toString(), + // 'phone': d[10].toString(), + // 'email': d[28].toString(), + // 'WalletChecked': d[13].toString(), + // 'tokenPassenger': d[9].toString(), + // 'direction': + // 'https://www.google.com/maps/dir/${d[0]}/${d[1]}/', + // 'DurationToPassenger': d[15].toString(), + // 'rideId': d[16].toString(), + // 'passengerId': d[7].toString(), + // 'driverId': d[18].toString(), + // 'durationOfRideValue': d[19].toString(), + // 'paymentAmount': d[2].toString(), + // 'paymentMethod': + // d[13].toString() == 'true' ? 'visa' : 'cash', + // 'isHaveSteps': d[20].toString(), + // 'step0': d[21].toString(), + // 'step1': d[22].toString(), + // 'step2': d[23].toString(), + // 'step3': d[24].toString(), + // 'step4': d[25].toString(), + // 'passengerWalletBurc': d[26].toString(), + // 'timeOfOrder': DateTime.now().toString(), + // 'totalPassenger': d[2].toString(), + // 'carType': d[31].toString(), + // 'kazan': d[32].toString(), + // 'startNameLocation': d[29].toString(), + // 'endNameLocation': d[30].toString(), + // }); + // Get.to(() => PassengerLocationMapPage(), + // arguments: box.read(BoxName.rideArguments)); + // // Get.offAll(() => HomeCaptainController()); // }, // icon: const Icon( // FontAwesome5.grin_tears, @@ -288,6 +302,7 @@ GetBuilder leftMainMenuCaptainIcons() { // ); // }), // ), + // , const SizedBox( height: 5, ), diff --git a/lib/views/home/Captin/mapDriverWidgets/passenger_info_window.dart b/lib/views/home/Captin/mapDriverWidgets/passenger_info_window.dart index 54c6008..6a38d5b 100644 --- a/lib/views/home/Captin/mapDriverWidgets/passenger_info_window.dart +++ b/lib/views/home/Captin/mapDriverWidgets/passenger_info_window.dart @@ -1,4 +1,8 @@ +import 'dart:io'; + import 'package:SEFER/views/widgets/my_textField.dart'; +import 'package:SEFER/views/widgets/mydialoug.dart'; +import 'package:bubble_head/bubble.dart'; import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_font_icons/flutter_font_icons.dart'; @@ -19,7 +23,7 @@ class PassengerInfoWindow extends StatelessWidget { @override Widget build(BuildContext context) { - Get.put(MapDriverController()); + // Get.put(MapDriverController()); return GetBuilder( builder: (controller) => controller.isPassengerInfoWindow == true ? Stack( @@ -275,6 +279,11 @@ class PassengerInfoWindow extends StatelessWidget { AppStyle.boxDecoration, child: IconButton( onPressed: () async { + if (Platform.isAndroid) { + Bubble().startBubbleHead( + sendAppToBackground: + true); + } await controller .openGoogleMapFromDriverToPassenger(); }, @@ -437,30 +446,15 @@ class PassengerInfoWindow extends StatelessWidget { title: 'Start the Ride'.tr, kolor: AppColor.greenColor, onPressed: () { - Get.defaultDialog( - title: - 'Is the Passenger in your Car?' - .tr, - titleStyle: AppStyle.title, - middleText: - "Don't start trip if not".tr, - middleTextStyle: AppStyle.title, - confirm: MyElevatedButton( - title: 'OK'.tr, - kolor: AppColor.greenColor, - onPressed: () async { - await controller - .startRideFromDriver(); - Get.back(); // Close dialog after confirmation - }, - ), - cancel: MyElevatedButton( - title: 'No, still Waiting.'.tr, - kolor: AppColor.redColor, - onPressed: () { - Get.back(); // Close dialog without action - }, - ), + MyDialog().getDialog( + "Is the Passenger in your Car ?" + .tr, + "Don't start trip if not".tr, + () async { + await controller + .startRideFromDriver(); + // Close dialog after confirmation + }, ); }, ), @@ -489,21 +483,14 @@ class PassengerInfoWindow extends StatelessWidget { controller.isArrivedSend = false; } else { + MyDialog().getDialog( + 'You are not near the passenger location' + .tr, + 'Please go to the pickup location exactly' + .tr, () { + Get.back(); + }); // Show error dialog if the driver is far from passenger - Get.defaultDialog( - title: - 'You are not near the passenger location' - .tr, - middleText: - 'Please go to the pickup location exactly' - .tr, - confirm: MyElevatedButton( - title: 'Ok'.tr, - onPressed: () { - Get.back(); - }, - ), - ); } }, ) @@ -561,37 +548,24 @@ class PassengerInfoWindow extends StatelessWidget { AppInformation.appName.tr, kolor: AppColor.deepPurpleAccent, onPressed: () { - Get.defaultDialog( - title: 'Are you sure to cancel?' - .tr, - titleStyle: AppStyle.title, - middleText: '', - confirm: MyElevatedButton( - title: 'Yes'.tr, - onPressed: () async { - FirebaseMessagesController() - .sendNotificationToPassengerToken( - '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', - ); - await controller - .addWaitingTimeCostFromPassengerToDriverWallet(); - controller - .isdriverWaitTimeEnd = - false; - }, - ), - cancel: MyElevatedButton( - title: 'No'.tr, - onPressed: () { - Get.back(); - }, - ), - ); + MyDialog().getDialog( + 'Are you sure to cancel?'.tr, + '', () async { + FirebaseMessagesController() + .sendNotificationToPassengerToken( + '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', + ); + await controller + .addWaitingTimeCostFromPassengerToDriverWallet(); + controller.isdriverWaitTimeEnd = + false; + Get.back(); + }); }, ) : const SizedBox(), @@ -604,48 +578,6 @@ class PassengerInfoWindow extends StatelessWidget { ), ], ) - // : controller.remainingTimeToShowPassengerInfoWindowFromDriver > 0 // - // ? Positioned( - // bottom: Get.height * .2, - // left: 15, - // child: Container( - // decoration: AppStyle.boxDecoration, - // child: Padding( - // padding: const EdgeInsets.all(8.0), - // child: Row( - // children: [ - // Stack( - // alignment: Alignment.center, - // children: [ - // const CircularProgressIndicator( - // backgroundColor: AppColor.redColor, - // strokeWidth: 10, - // color: AppColor.redColor, - // value: 1, - // ), - // CircularProgressIndicator( - // value: controller.progress, - // // Set the color based on the "isNearEnd" condition - // color: AppColor.yellowColor, - // ), - // Text( - // '${controller.remainingTimeToShowPassengerInfoWindowFromDriver}', - // style: AppStyle.number, - // ), - // ], - // ), - // const SizedBox( - // width: 10, - // ), - // Text( - // 'Please Wait If passenger want To Cancel!'.tr, - // style: AppStyle.title, - // ), - // ], - // ), - // ), - // ), - // ) : const SizedBox(), ); } diff --git a/lib/views/home/Captin/orderCaptin/order_speed_request.dart b/lib/views/home/Captin/orderCaptin/order_speed_request.dart index 8215cb2..8c1da67 100644 --- a/lib/views/home/Captin/orderCaptin/order_speed_request.dart +++ b/lib/views/home/Captin/orderCaptin/order_speed_request.dart @@ -327,57 +327,17 @@ class OrderSpeedRequest extends StatelessWidget { 'status': 'Apply', 'driver_id': box.read(BoxName.driverID), }); - CRUD().post( - link: - "${AppLink.seferAlexandriaServer}/rides/updateStausFromSpeed.php", - payload: { - 'id': orderRequestController.myList[16], - 'rideTimeStart': DateTime.now().toString(), - 'status': 'Apply', - 'driver_id': box.read(BoxName.driverID), - }); - CRUD().post( - link: - "${AppLink.seferGizaServer}/rides/updateStausFromSpeed.php", - payload: { - 'id': orderRequestController.myList[16], - 'rideTimeStart': DateTime.now().toString(), - 'status': 'Apply', - 'driver_id': box.read(BoxName.driverID), - }); - await CRUD().postFromDialogue( - link: AppLink.addDriverOrder, - payload: { - 'driver_id': - orderRequestController.myList[6].toString(), - // box.read(BoxName.driverID).toString(), - 'order_id': orderRequestController.myList[16] - .toString(), - 'status': 'Apply' - }); - CRUD().postFromDialogue( - link: - '${AppLink.seferAlexandriaServer}/driver_order/add.php', - payload: { - 'driver_id': - orderRequestController.myList[6].toString(), - // box.read(BoxName.driverID).toString(), - 'order_id': orderRequestController.myList[16] - .toString(), - 'status': 'Apply' - }); - - CRUD().postFromDialogue( - link: - '${AppLink.seferGizaServer}/driver_order/add.php', - payload: { - 'driver_id': - orderRequestController.myList[6].toString(), - // box.read(BoxName.driverID).toString(), - 'order_id': orderRequestController.myList[16] - .toString(), - 'status': 'Apply' - }); + if (AppLink.endPoint != AppLink.seferCairoServer) { + CRUD().post( + link: + "${AppLink.endPoint}/rides/updateStausFromSpeed.php", + payload: { + 'id': orderRequestController.myList[16], + 'rideTimeStart': DateTime.now().toString(), + 'status': 'Apply', + 'driver_id': box.read(BoxName.driverID), + }); + } // .then((value) { // var json = jsonDecode(res); @@ -414,28 +374,32 @@ class OrderSpeedRequest extends StatelessWidget { orderRequestController.body.toString(), 'status': 'Apply' }); - CRUD().postFromDialogue( - link: - '${AppLink.seferAlexandriaServer}/driver_order/add.php', + await CRUD().postFromDialogue( + link: AppLink.addDriverOrder, payload: { 'driver_id': orderRequestController.myList[6] .toString(), // box.read(BoxName.driverID).toString(), - 'order_id': - orderRequestController.body.toString(), - 'status': 'Apply' - }); - CRUD().postFromDialogue( - link: - '${AppLink.seferGizaServer}/driver_order/add.php', - payload: { - 'driver_id': orderRequestController.myList[6] + 'order_id': orderRequestController.myList[16] .toString(), - // box.read(BoxName.driverID).toString(), - 'order_id': - orderRequestController.body.toString(), 'status': 'Apply' }); + + if (AppLink.endPoint != AppLink.seferCairoServer) { + CRUD().post( + link: + "${AppLink.endPoint}/driver_order/add.php", + payload: { + 'driver_id': orderRequestController + .myList[6] + .toString(), + // box.read(BoxName.driverID).toString(), + 'order_id': orderRequestController + .myList[16] + .toString(), + 'status': 'Apply' + }); + } FirebaseMessagesController() .sendNotificationToPassengerToken( 'Apply Ride',