diff --git a/.env b/.env index 79fab3d..db7c03a 100644 --- a/.env +++ b/.env @@ -14,12 +14,11 @@ chatGPTkeySeferNew=zg-Z4AJcAROgNXjgrEIU8fKC9XrxgUE4Qtrrlq1yiux0jL3dITSXrXlBl secretKey=zg_ropj_57Iiv6MFCBFq3C2n6IXlmjykpxDmW93SW3vvXh68UA9T5FORTWgWsT37StKsOPdwDdsy8qR9srMUluahs3nPHvgBa33tGk90vV5XrXlBl stripe_publishableKe=vg_ropj_57Iiv6MFCBFq3C2n6kNJnZByV6nuDtXe9IjEPOfhmpDtWmt3MLR0gQpiHcQmAFMUPrZc3QiCDjxBZLbxDC3efxWxz33bWH1ZgrsXrXlBl llamaKey=RR-EuyoFDUvfRDBj46fZKAtKJ3voM8Mt768cPeJV7GNdAkPTKdY8Odm9n4ggGqI5GyoXrXlBl -serverPHP=https://sefer.click/sefer +serverPHP=https://api.sefer.live/sefer seferAlexandriaServer=https://seferalexandria.site/sefer -seferPaymentServer=https://seferpayment.shop/sefer/ride +seferPaymentServer=https://seferpw.shop/sefer seferCairoServer=https://sefer.click/sefer seferGizaServer=https://sefergiza.site/sefer -# serverPHP=https://api.sefer.live/sefer cohere=Aulwd8y5SPWos0hJhG0toUf8gOhUUrpf5Q2TPmVGXrXlBl claudeAiAPI=zg-qbc-qvo39-xWOxIGwWTOzCFBnIYSKKhfyz_KVAvrH-6_4ZEJL68G_QBH26oeTOMMoQug9KuOjjKSP_A4S3SUDlbxR9duVzoQ-MkX_UQQQXrXlBl payPalClientId=QALymfNI5Tzt4s-ysoz6vD4_nqX0SUtkC_qYV-Ugk5gaM_8Z-kg4L53k8Uux_4jEWXDkNpXGSWPpIzDFXrXlBl @@ -45,7 +44,7 @@ payMobOutClient_id='Z05ut48dVkS2gI2zenFFcKsfDKfHAU0WELqKyJ0LXrXlBl' payMobOutPassword='D2zJFxkE#LN3vz38z2dYxpNfWXrXlBl' payMobOutUserName='zjujl_qvo_fwjfgjlXrXlBl' keyOfApp=nqryjp@1737wqnmqqsjyzjujljksvceiXrXlBl - +privateKeyFCM="-----BEGIN PRIVATE KEY-----\\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD0zH9TQGDQHUv3\\na3/JAD1UKPwAp3wNKT0a6fxiIzjI3JxQWI30QvZCcfl6CdMhIcydX1ncSaYTcEeC\\n/AdPVCPkqyJx1YIGGg6P/mRzCWeaN8fsp6z250m5vcObDCZc3dbJEkepbep+6FPY\\n21m3KO+AHh1glgsTGZOTm5xiU8NGXpdk2QEh8wpiIIlR/HuKwVw9g8urNe3Sno+U\\nDm3z37iFqvZdmpqO8aWTJu6beb3hsREK9XK2I9JqC2JUwiGQRo3idOvPP6hkqrWx\\nKSX96vglQFYfakvJdDp2ZATOlpBYPMtS/IWhJ985u58TSS+Kl8qpnpaZBSxgJirf\\nhWzhnKLfAgMBAAECggEAJP785SePGhS7ZN6ltspm+l+hSjYFrPWFCxq+rlQ1YkHZ\\nC9l+RqKSFhOkiPmQI2s4wbXl3kFxLHHlFNoi/q2wKQBmGb8TQfnRJpjjNHGA61Ev\\n0Ue7/6qPvVb9B2MsLw/FxKiTFPuMG3bgKR9pbSFuJLYoaW7zqITOhVnYphGTqwAY\\nBVVcvISSLvELDmH9VZcv/9DVqVlqbbESHWh1Z4W6XGPoEqeDH/upNTyQQ/46Msgm\\nTGE6VqLHpWuSf6SqHp+r0Y0lI3vIPM1vz5FAJDJbOE/enHa0fSup0OHSMxl0HVMn\\nnO1yrGF3vsIPOej5HKr5d71bEIckzk73/yjNC1/mDQKBgQD7RtUvc9omsSsFMJ6e\\nBASAn6Dktx/QY/XNJjFzHQj69cywLDe5t5AL2gUi3phQ2oqB5XJdwnd5bTIEPEPZ\\nDOuOai2802p6FJk6kjmZAMVGx5JtXBH+vs6jrmQQSMiKbjwN1TT6xIWakvLOonUi\\nX6ZvjYYjU/E0YJU3jSiXWEr76wKBgQD5Zn4SouJ6BCDZMbausJVMBkk3qxsYooip\\np89WakC6e7AZinpkRcqjGGV9GOvc8crJs6fyXAA9ORepGP47Mc0ZrDssOkstznsM\\npr8R0S6MKwEZaT9ixOHdOcLZ47ps+JzA2Wr4KN2OvFHksUkB/46ATD1j9WZVgB8M\\namsYp/Y73QKBgHOo+PvsoZ9psVmkNX6abtAdqdtdB0HOoRea2uwXk0ig12TIFaZg\\nfedWpUKVnxqoXVTJHklV99RmlL0qWDiSH+LfsMnXro0e6iDxqZ1po2Se/CFmXcoa\\nXdctsFVmixhdATuExewfhTfPKABA+xWlXWC/jdy5CK+JPWXijaqMM4edAoGAE5Bj\\nsWiPpYyvWvpYX0nA3G7dzX0hqgQN/mkIjbnWDArp3IcNZNJIvBSM2Yxb7EAXbU0n\\njo6DAkp5Pa2VO+WDNlFZbvW/sf8xjeOCt44WPa6d7nVgIIpbQXRngZoopKW3/jTP\\n/FmQT8McFXmGxZ5belsAsdetSGW9icbLUerTGQ0CgYEAmf/G8Ag3XxmqTXvvHuv2\\n14OP7WnrVqkEMnydrftEwn4peXd/Lz+/GYX5Zc4ZoNgbN8IvZ5z0+OmRsallsbiW\\nBw0/tc68CjzxXOvReWxDluUopqWVGj5tlGqE5xUDku9SWJSxbkiQ3rqutzBdPXpr\\noqHwPyDrmK/Zgqn+uiIm4Ck=\\n-----END PRIVATE KEY-----\\n" a=q diff --git a/.metadata b/.metadata index 30d90a7..8973d6c 100644 --- a/.metadata +++ b/.metadata @@ -1,11 +1,11 @@ # This file tracks properties of this Flutter project. # Used by Flutter tool to assess capabilities and perform upgrades etc. # -# This file should be version controlled. +# This file should be version controlled and should not be manually edited. version: - revision: 796c8ef79279f9c774545b3771238c3098dbefab - channel: stable + revision: "761747bfc538b5af34aa0d3fac380f1bc331ec49" + channel: "stable" project_type: app @@ -13,26 +13,11 @@ project_type: app migration: platforms: - platform: root - create_revision: 796c8ef79279f9c774545b3771238c3098dbefab - base_revision: 796c8ef79279f9c774545b3771238c3098dbefab + create_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + base_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 - platform: android - create_revision: 796c8ef79279f9c774545b3771238c3098dbefab - base_revision: 796c8ef79279f9c774545b3771238c3098dbefab - - platform: ios - create_revision: 796c8ef79279f9c774545b3771238c3098dbefab - base_revision: 796c8ef79279f9c774545b3771238c3098dbefab - - platform: linux - create_revision: 796c8ef79279f9c774545b3771238c3098dbefab - base_revision: 796c8ef79279f9c774545b3771238c3098dbefab - - platform: macos - create_revision: 796c8ef79279f9c774545b3771238c3098dbefab - base_revision: 796c8ef79279f9c774545b3771238c3098dbefab - - platform: web - create_revision: 796c8ef79279f9c774545b3771238c3098dbefab - base_revision: 796c8ef79279f9c774545b3771238c3098dbefab - - platform: windows - create_revision: 796c8ef79279f9c774545b3771238c3098dbefab - base_revision: 796c8ef79279f9c774545b3771238c3098dbefab + create_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + base_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 # User provided section diff --git a/android/app/build.gradle b/android/app/build.gradle index b24bdc6..318b5f3 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -55,8 +55,8 @@ android { // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion 23 targetSdkVersion 34 - versionCode 55 - versionName '1.5.55' + versionCode 61 + versionName '1.5.61' // manifestPlaceholders = [mapsApiKey: 'android/app/src/main/AndroidManifest.xml'] } diff --git a/android/app/google-services.json b/android/app/google-services.json index 55da396..011558e 100644 --- a/android/app/google-services.json +++ b/android/app/google-services.json @@ -121,42 +121,6 @@ } } }, - { - "client_info": { - "mobilesdk_app_id": "1:594687661098:android:b7ce96c17eb928ca595f53", - "android_client_info": { - "package_name": "com.sefer.driver" - } - }, - "oauth_client": [ - { - "client_id": "594687661098-2u640akrb3k7sak5t0nqki6f4v6hq1bq.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyCyfwRXTwSTLOFQSQgN5p7QZgGJVZnEKq0" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "594687661098-2hfb9gumub3j60vb7mqtq794k8spihuh.apps.googleusercontent.com", - "client_type": 3 - }, - { - "client_id": "594687661098-8e26699cris2k3nj5msj1osi59it9kpf.apps.googleusercontent.com", - "client_type": 2, - "ios_info": { - "bundle_id": "com.mobileapp.store.ride" - } - } - ] - } - } - }, { "client_info": { "mobilesdk_app_id": "1:594687661098:android:46557bd4f534b5bb595f53", diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..db77bb4 Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000..17987b7 Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..09d4391 Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..d5f1c8d Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000..4d6372e Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/firebase.json b/firebase.json index 7ca734b..bc568d2 100644 --- a/firebase.json +++ b/firebase.json @@ -1 +1 @@ -{"functions":[{"source":"functions","codebase":"default","ignore":["node_modules",".git","firebase-debug.log","firebase-debug.*.log"],"predeploy":["npm --prefix \"$RESOURCE_DIR\" run lint"]}],"flutter":{"platforms":{"android":{"default":{"projectId":"ride-b1bd8","appId":"1:594687661098:android:683982cbf71fa423595f53","fileOutput":"android/app/google-services.json"}},"dart":{"lib/firebase_options.dart":{"projectId":"ride-b1bd8","configurations":{"android":"1:594687661098:android:683982cbf71fa423595f53","ios":"1:594687661098:ios:6f69eee1449be943595f53","macos":"1:594687661098:ios:6f69eee1449be943595f53","web":"1:594687661098:web:62d8388476ec91ec595f53","windows":"1:594687661098:web:d9f43a2091395d87595f53"}}},"ios":{"default":{"projectId":"ride-b1bd8","appId":"1:594687661098:ios:6f69eee1449be943595f53","uploadDebugSymbols":false,"fileOutput":"ios/Runner/GoogleService-Info.plist"}},"macos":{"default":{"projectId":"ride-b1bd8","appId":"1:594687661098:ios:6f69eee1449be943595f53","uploadDebugSymbols":false,"fileOutput":"macos/Runner/GoogleService-Info.plist"}}}}} \ No newline at end of file +{"functions":[{"source":"functions","codebase":"default","ignore":["node_modules",".git","firebase-debug.log","firebase-debug.*.log"],"predeploy":["npm --prefix \"$RESOURCE_DIR\" run lint"]}],"flutter":{"platforms":{"android":{"default":{"projectId":"ride-b1bd8","appId":"1:594687661098:android:683982cbf71fa423595f53","fileOutput":"android/app/google-services.json"}},"dart":{"lib/firebase_options.dart":{"projectId":"ride-b1bd8","configurations":{"android":"1:594687661098:android:683982cbf71fa423595f53","ios":"1:594687661098:ios:6f69eee1449be943595f53"}}},"ios":{"default":{"projectId":"ride-b1bd8","appId":"1:594687661098:ios:6f69eee1449be943595f53","uploadDebugSymbols":false,"fileOutput":"ios/Runner/GoogleService-Info.plist"}},"macos":{"default":{"projectId":"ride-b1bd8","appId":"1:594687661098:ios:6f69eee1449be943595f53","uploadDebugSymbols":false,"fileOutput":"macos/Runner/GoogleService-Info.plist"}}}}} \ No newline at end of file diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index ade4b34..bab8690 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -37,11 +37,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 47 + 48 CFBundleSignature ???? CFBundleVersion - 4.3.47 + 4.3.48 FirebaseAppDelegateProxyEnabled NO GMSApiKey diff --git a/lib/constant/links.dart b/lib/constant/links.dart index c144f13..76b6a4b 100644 --- a/lib/constant/links.dart +++ b/lib/constant/links.dart @@ -3,14 +3,15 @@ import 'package:SEFER/env/env.dart'; import 'package:SEFER/main.dart'; class AppLink { - // static final String seferPaymentServer = Env.seferPaymentServer; + static final String seferPaymentServer0 = Env.seferPaymentServer; static final String seferPaymentServer = '${Env.seferCairoServer}/ride'; static final String seferAlexandriaServer = Env.seferAlexandriaServer; static final String seferCairoServer = Env.seferCairoServer; static final String seferGizaServer = Env.seferGizaServer; static final String endPoint = box.read(BoxName.serverChosen); - static final String server = endPoint; + static final String server = Env.seferCairoServer; + // static final String server = Env.serverPHP; static String googleMapsLink = 'https://maps.googleapis.com/maps/api/'; static String llama = 'https://api.llama-api.com/chat/completions'; @@ -86,9 +87,9 @@ class AppLink { static String addDriverpayment = "$ride/payment/add.php"; static String addDriverPaymentPoints = "$ride/driverPayment/add.php"; static String addPaymentTokenPassenger = - "$ride/passengerWallet/addPaymentTokenPassenger.php"; + "$seferPaymentServer/passengerWallet/addPaymentTokenPassenger.php"; static String addPaymentTokenDriver = - "$ride/driverWallet/addPaymentToken.php"; + "$seferPaymentServer/driverWallet/addPaymentToken.php"; static String getDriverPaymentPoints = "$ride/driverWallet/get.php"; static String getDriverpaymentToday = "$ride/payment/get.php"; static String getCountRide = "$ride/payment/getCountRide.php"; diff --git a/lib/controller/auth/register_controller.dart b/lib/controller/auth/register_controller.dart index b9626bc..a66d68a 100644 --- a/lib/controller/auth/register_controller.dart +++ b/lib/controller/auth/register_controller.dart @@ -108,6 +108,7 @@ class RegisterController extends GetxController { var responseCheker = await CRUD() .post(link: AppLink.checkPhoneNumberISVerfiedPassenger, payload: { 'phone_number': '+2${phoneController.text}', + 'email': box.read(BoxName.email), }); if (responseCheker != 'failure') { var d = jsonDecode(responseCheker); @@ -194,7 +195,9 @@ class RegisterController extends GetxController { Get.offAll(const MapPagePassenger()); } } else { - Get.snackbar('Error'.tr, '', backgroundColor: Colors.redAccent); + Get.snackbar( + 'Error'.tr, "The email or phone number is already registered.".tr, + backgroundColor: Colors.redAccent); } } } diff --git a/lib/controller/firebase/access_token.dart b/lib/controller/firebase/access_token.dart new file mode 100644 index 0000000..93c6898 --- /dev/null +++ b/lib/controller/firebase/access_token.dart @@ -0,0 +1,50 @@ +import 'dart:convert'; +import 'package:googleapis_auth/auth_io.dart'; + +class AccessTokenManager { + static final AccessTokenManager _instance = AccessTokenManager._internal(); + late final String serviceAccountJsonKey; + AccessToken? _accessToken; + DateTime? _expiryDate; + + AccessTokenManager._internal(); + + factory AccessTokenManager(String jsonKey) { + if (_instance._isServiceAccountKeyInitialized()) { + // Prevent re-initialization + return _instance; + } + _instance.serviceAccountJsonKey = jsonKey; + return _instance; + } + + bool _isServiceAccountKeyInitialized() { + try { + serviceAccountJsonKey; // Access to check if initialized + return true; + } catch (e) { + return false; + } + } + + Future getAccessToken() async { + if (_accessToken != null && DateTime.now().isBefore(_expiryDate!)) { + return _accessToken!.data; + } + try { + final serviceAccountCredentials = ServiceAccountCredentials.fromJson( + json.decode(serviceAccountJsonKey)); + final client = await clientViaServiceAccount( + serviceAccountCredentials, + ['https://www.googleapis.com/auth/firebase.messaging'], + ); + + _accessToken = client.credentials.accessToken; + _expiryDate = client.credentials.accessToken.expiry; + client.close(); + return _accessToken!.data; + } catch (e) { + throw Exception('Failed to obtain access token'); + } + } +} diff --git a/lib/controller/firebase/firbase_messge.dart b/lib/controller/firebase/firbase_messge.dart index 5e78c51..cc46326 100644 --- a/lib/controller/firebase/firbase_messge.dart +++ b/lib/controller/firebase/firbase_messge.dart @@ -1,9 +1,12 @@ import 'dart:convert'; import 'dart:io'; +import 'package:SEFER/env/env.dart'; import 'package:SEFER/views/widgets/my_dialog.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:googleapis_auth/auth_io.dart'; +import 'package:googleapis_auth/googleapis_auth.dart'; import 'package:http/http.dart' as http; import 'package:SEFER/controller/functions/toast.dart'; import 'package:SEFER/views/widgets/elevated_btn.dart'; @@ -21,6 +24,7 @@ import '../../views/home/profile/promos_passenger_page.dart'; import '../auth/google_sign.dart'; import '../functions/audio_record1.dart'; import '../home/map_passenger_controller.dart'; +import 'access_token.dart'; import 'local_notification.dart'; class FirebaseMessagesController extends GetxController { @@ -189,7 +193,7 @@ class FirebaseMessagesController extends GetxController { Get.back(); Get.defaultDialog( title: "The driver canceled your ride.".tr, - middleText: "We will look for a new driver.\nPlease wait.".tr, + middleText: "We will look for a new driver.\\nPlease wait.".tr, confirm: MyElevatedButton( title: 'Ok'.tr, onPressed: () async { @@ -525,84 +529,217 @@ class FirebaseMessagesController extends GetxController { void sendNotificationToAnyWithoutData( String title, String body, String token, String tone) async { try { + String serviceAccountKeyJson = '''{ + "type": "service_account", + "project_id": "ride-b1bd8", + "private_key_id": "75e817c0b902db2ef35edf2c2bd159dec1f13249", + "private_key": "-----BEGIN PRIVATE KEY-----\\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD0zH9TQGDQHUv3\\na3/JAD1UKPwAp3wNKT0a6fxiIzjI3JxQWI30QvZCcfl6CdMhIcydX1ncSaYTcEeC\\n/AdPVCPkqyJx1YIGGg6P/mRzCWeaN8fsp6z250m5vcObDCZc3dbJEkepbep+6FPY\\n21m3KO+AHh1glgsTGZOTm5xiU8NGXpdk2QEh8wpiIIlR/HuKwVw9g8urNe3Sno+U\\nDm3z37iFqvZdmpqO8aWTJu6beb3hsREK9XK2I9JqC2JUwiGQRo3idOvPP6hkqrWx\\nKSX96vglQFYfakvJdDp2ZATOlpBYPMtS/IWhJ985u58TSS+Kl8qpnpaZBSxgJirf\\nhWzhnKLfAgMBAAECggEAJP785SePGhS7ZN6ltspm+l+hSjYFrPWFCxq+rlQ1YkHZ\\nC9l+RqKSFhOkiPmQI2s4wbXl3kFxLHHlFNoi/q2wKQBmGb8TQfnRJpjjNHGA61Ev\\n0Ue7/6qPvVb9B2MsLw/FxKiTFPuMG3bgKR9pbSFuJLYoaW7zqITOhVnYphGTqwAY\\nBVVcvISSLvELDmH9VZcv/9DVqVlqbbESHWh1Z4W6XGPoEqeDH/upNTyQQ/46Msgm\\nTGE6VqLHpWuSf6SqHp+r0Y0lI3vIPM1vz5FAJDJbOE/enHa0fSup0OHSMxl0HVMn\\nnO1yrGF3vsIPOej5HKr5d71bEIckzk73/yjNC1/mDQKBgQD7RtUvc9omsSsFMJ6e\\nBASAn6Dktx/QY/XNJjFzHQj69cywLDe5t5AL2gUi3phQ2oqB5XJdwnd5bTIEPEPZ\\nDOuOai2802p6FJk6kjmZAMVGx5JtXBH+vs6jrmQQSMiKbjwN1TT6xIWakvLOonUi\\nX6ZvjYYjU/E0YJU3jSiXWEr76wKBgQD5Zn4SouJ6BCDZMbausJVMBkk3qxsYooip\\np89WakC6e7AZinpkRcqjGGV9GOvc8crJs6fyXAA9ORepGP47Mc0ZrDssOkstznsM\\npr8R0S6MKwEZaT9ixOHdOcLZ47ps+JzA2Wr4KN2OvFHksUkB/46ATD1j9WZVgB8M\\namsYp/Y73QKBgHOo+PvsoZ9psVmkNX6abtAdqdtdB0HOoRea2uwXk0ig12TIFaZg\\nfedWpUKVnxqoXVTJHklV99RmlL0qWDiSH+LfsMnXro0e6iDxqZ1po2Se/CFmXcoa\\nXdctsFVmixhdATuExewfhTfPKABA+xWlXWC/jdy5CK+JPWXijaqMM4edAoGAE5Bj\\nsWiPpYyvWvpYX0nA3G7dzX0hqgQN/mkIjbnWDArp3IcNZNJIvBSM2Yxb7EAXbU0n\\njo6DAkp5Pa2VO+WDNlFZbvW/sf8xjeOCt44WPa6d7nVgIIpbQXRngZoopKW3/jTP\\n/FmQT8McFXmGxZ5belsAsdetSGW9icbLUerTGQ0CgYEAmf/G8Ag3XxmqTXvvHuv2\\n14OP7WnrVqkEMnydrftEwn4peXd/Lz+/GYX5Zc4ZoNgbN8IvZ5z0+OmRsallsbiW\\nBw0/tc68CjzxXOvReWxDluUopqWVGj5tlGqE5xUDku9SWJSxbkiQ3rqutzBdPXpr\\noqHwPyDrmK/Zgqn+uiIm4Ck=\\n-----END PRIVATE KEY-----\\n", + "client_email": "firebase-adminsdk-o2wqi@ride-b1bd8.iam.gserviceaccount.com", + "client_id": "111210077025005706623", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-o2wqi%40ride-b1bd8.iam.gserviceaccount.com", + "universe_domain": "googleapis.com" +} +'''; // As defined above + + // Initialize AccessTokenManager + final accessTokenManager = AccessTokenManager(serviceAccountKeyJson); + + // Obtain an OAuth 2.0 access token + final accessToken = await accessTokenManager.getAccessToken(); + // Log.print('accessToken: ${accessToken}'); + + // Send the notification final response = await http.post( - Uri.parse('https://fcm.googleapis.com/fcm/send'), + Uri.parse( + 'https://fcm.googleapis.com/v1/projects/ride-b1bd8/messages:send'), headers: { 'Content-Type': 'application/json', - 'Authorization': 'key=${AK.serverAPI}' + 'Authorization': 'Bearer $accessToken', }, body: jsonEncode({ - 'notification': { - 'title': title, - 'body': body, - 'sound': tone + 'message': { + 'token': token, + 'notification': { + 'title': title, + 'body': body, + }, + 'android': { + 'notification': { + 'sound': tone, + }, + }, + 'apns': { + 'payload': { + 'aps': { + 'sound': tone, + }, + }, + }, }, - 'data': { - 'click_action': 'FLUTTER_NOTIFICATION_CLICK', - 'id': '1', - 'status': 'done' - }, - 'priority': 'high', - 'to': token, }), ); if (response.statusCode == 200) { - // Notification sent successfully + print( + 'Notification sent successfully. Status code: ${response.statusCode}'); + print('Response body: ${response.body}'); } else { - // Handle error response - 'Failed to send notification. Status code: ${response.statusCode}'; + print( + 'Failed to send notification. Status code: ${response.statusCode}'); + print('Response body: ${response.body}'); } } catch (e) { - // Handle other exceptions + print('Error sending notification: $e'); } } - void sendNotificationToDriverMAP(String title, String body, String token, - List data, String tone) async { + // void sendNotificationToDriverMAP(String title, String body, String token, + // List data, String tone) async { + // try { + // final response = await http.post( + // // Uri.parse( + // // 'https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send'), + // Uri.parse('https://fcm.googleapis.com/fcm/send'), + // headers: { + // 'Content-Type': 'application/json', + // // 'Authorization': 'Bearer 104815009508844392546' + // 'Authorization': 'key=${AK.serverAPI}' + // }, + // body: jsonEncode({ + // 'notification': { + // 'title': title, + // 'body': body, + // 'sound': tone + // }, + // 'data': { + // 'DriverList': data, + // }, + // 'priority': 'high', + // 'to': token, + // }), + // ); + + // if (response.statusCode == 200) { + // Log.print( + // 'Notification sent successfully. Status code: ${response.statusCode}'); + // Log.print('Response body: ${response.body}'); + // } else { + // Log.print( + // 'Failed to send notification. Status code: ${response.statusCode}'); + // Log.print('Response body: ${response.body}'); + // } + // } catch (e) { + // Log.print('Error sending notification: $e'); + // } + // } + + Future sendNotificationToDriverMAP(String title, String body, + String token, List data, String tone) async { try { + String serviceAccountKeyJson = '''{ + "type": "service_account", + "project_id": "ride-b1bd8", + "private_key_id": "75e817c0b902db2ef35edf2c2bd159dec1f13249", + "private_key": "-----BEGIN PRIVATE KEY-----\\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD0zH9TQGDQHUv3\\na3/JAD1UKPwAp3wNKT0a6fxiIzjI3JxQWI30QvZCcfl6CdMhIcydX1ncSaYTcEeC\\n/AdPVCPkqyJx1YIGGg6P/mRzCWeaN8fsp6z250m5vcObDCZc3dbJEkepbep+6FPY\\n21m3KO+AHh1glgsTGZOTm5xiU8NGXpdk2QEh8wpiIIlR/HuKwVw9g8urNe3Sno+U\\nDm3z37iFqvZdmpqO8aWTJu6beb3hsREK9XK2I9JqC2JUwiGQRo3idOvPP6hkqrWx\\nKSX96vglQFYfakvJdDp2ZATOlpBYPMtS/IWhJ985u58TSS+Kl8qpnpaZBSxgJirf\\nhWzhnKLfAgMBAAECggEAJP785SePGhS7ZN6ltspm+l+hSjYFrPWFCxq+rlQ1YkHZ\\nC9l+RqKSFhOkiPmQI2s4wbXl3kFxLHHlFNoi/q2wKQBmGb8TQfnRJpjjNHGA61Ev\\n0Ue7/6qPvVb9B2MsLw/FxKiTFPuMG3bgKR9pbSFuJLYoaW7zqITOhVnYphGTqwAY\\nBVVcvISSLvELDmH9VZcv/9DVqVlqbbESHWh1Z4W6XGPoEqeDH/upNTyQQ/46Msgm\\nTGE6VqLHpWuSf6SqHp+r0Y0lI3vIPM1vz5FAJDJbOE/enHa0fSup0OHSMxl0HVMn\\nnO1yrGF3vsIPOej5HKr5d71bEIckzk73/yjNC1/mDQKBgQD7RtUvc9omsSsFMJ6e\\nBASAn6Dktx/QY/XNJjFzHQj69cywLDe5t5AL2gUi3phQ2oqB5XJdwnd5bTIEPEPZ\\nDOuOai2802p6FJk6kjmZAMVGx5JtXBH+vs6jrmQQSMiKbjwN1TT6xIWakvLOonUi\\nX6ZvjYYjU/E0YJU3jSiXWEr76wKBgQD5Zn4SouJ6BCDZMbausJVMBkk3qxsYooip\\np89WakC6e7AZinpkRcqjGGV9GOvc8crJs6fyXAA9ORepGP47Mc0ZrDssOkstznsM\\npr8R0S6MKwEZaT9ixOHdOcLZ47ps+JzA2Wr4KN2OvFHksUkB/46ATD1j9WZVgB8M\\namsYp/Y73QKBgHOo+PvsoZ9psVmkNX6abtAdqdtdB0HOoRea2uwXk0ig12TIFaZg\\nfedWpUKVnxqoXVTJHklV99RmlL0qWDiSH+LfsMnXro0e6iDxqZ1po2Se/CFmXcoa\\nXdctsFVmixhdATuExewfhTfPKABA+xWlXWC/jdy5CK+JPWXijaqMM4edAoGAE5Bj\\nsWiPpYyvWvpYX0nA3G7dzX0hqgQN/mkIjbnWDArp3IcNZNJIvBSM2Yxb7EAXbU0n\\njo6DAkp5Pa2VO+WDNlFZbvW/sf8xjeOCt44WPa6d7nVgIIpbQXRngZoopKW3/jTP\\n/FmQT8McFXmGxZ5belsAsdetSGW9icbLUerTGQ0CgYEAmf/G8Ag3XxmqTXvvHuv2\\n14OP7WnrVqkEMnydrftEwn4peXd/Lz+/GYX5Zc4ZoNgbN8IvZ5z0+OmRsallsbiW\\nBw0/tc68CjzxXOvReWxDluUopqWVGj5tlGqE5xUDku9SWJSxbkiQ3rqutzBdPXpr\\noqHwPyDrmK/Zgqn+uiIm4Ck=\\n-----END PRIVATE KEY-----\\n", + "client_email": "firebase-adminsdk-o2wqi@ride-b1bd8.iam.gserviceaccount.com", + "client_id": "111210077025005706623", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-o2wqi%40ride-b1bd8.iam.gserviceaccount.com", + "universe_domain": "googleapis.com" +} +'''; // As defined above + + // Initialize AccessTokenManager + final accessTokenManager = AccessTokenManager(serviceAccountKeyJson); + + // Obtain an OAuth 2.0 access token + final accessToken = await accessTokenManager.getAccessToken(); + Log.print('accessToken: ${accessToken}'); + + // Send the notification final response = await http.post( - Uri.parse('https://fcm.googleapis.com/fcm/send'), + Uri.parse( + 'https://fcm.googleapis.com/v1/projects/ride-b1bd8/messages:send'), headers: { 'Content-Type': 'application/json', - 'Authorization': 'key=${AK.serverAPI}' + 'Authorization': 'Bearer $accessToken', }, body: jsonEncode({ - 'notification': { - 'title': title, - 'body': body, - 'sound': tone + 'message': { + 'token': token, + 'notification': { + 'title': title, + 'body': body, + }, + 'data': { + 'DriverList': jsonEncode(data), + }, + 'android': { + 'notification': { + 'sound': tone, + }, + }, + 'apns': { + 'payload': { + 'aps': { + 'sound': tone, + }, + }, + }, }, - 'data': { - 'DriverList': data, - }, - 'priority': 'high', - 'to': token, }), ); if (response.statusCode == 200) { - Log.print( + print( 'Notification sent successfully. Status code: ${response.statusCode}'); - Log.print('Response body: ${response.body}'); + print('Response body: ${response.body}'); } else { - Log.print( + print( 'Failed to send notification. Status code: ${response.statusCode}'); - Log.print('Response body: ${response.body}'); + print('Response body: ${response.body}'); } } catch (e) { - Log.print('Error sending notification: $e'); + print('Error sending notification: $e'); } } void sendNotificationToDriverMapPolyline(String title, String body, String token, List data, String polylineJson) async { try { + String serviceAccountKeyJson = '''{ + "type": "service_account", + "project_id": "ride-b1bd8", + "private_key_id": "75e817c0b902db2ef35edf2c2bd159dec1f13249", + "private_key": "-----BEGIN PRIVATE KEY-----\\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD0zH9TQGDQHUv3\\na3/JAD1UKPwAp3wNKT0a6fxiIzjI3JxQWI30QvZCcfl6CdMhIcydX1ncSaYTcEeC\\n/AdPVCPkqyJx1YIGGg6P/mRzCWeaN8fsp6z250m5vcObDCZc3dbJEkepbep+6FPY\\n21m3KO+AHh1glgsTGZOTm5xiU8NGXpdk2QEh8wpiIIlR/HuKwVw9g8urNe3Sno+U\\nDm3z37iFqvZdmpqO8aWTJu6beb3hsREK9XK2I9JqC2JUwiGQRo3idOvPP6hkqrWx\\nKSX96vglQFYfakvJdDp2ZATOlpBYPMtS/IWhJ985u58TSS+Kl8qpnpaZBSxgJirf\\nhWzhnKLfAgMBAAECggEAJP785SePGhS7ZN6ltspm+l+hSjYFrPWFCxq+rlQ1YkHZ\\nC9l+RqKSFhOkiPmQI2s4wbXl3kFxLHHlFNoi/q2wKQBmGb8TQfnRJpjjNHGA61Ev\\n0Ue7/6qPvVb9B2MsLw/FxKiTFPuMG3bgKR9pbSFuJLYoaW7zqITOhVnYphGTqwAY\\nBVVcvISSLvELDmH9VZcv/9DVqVlqbbESHWh1Z4W6XGPoEqeDH/upNTyQQ/46Msgm\\nTGE6VqLHpWuSf6SqHp+r0Y0lI3vIPM1vz5FAJDJbOE/enHa0fSup0OHSMxl0HVMn\\nnO1yrGF3vsIPOej5HKr5d71bEIckzk73/yjNC1/mDQKBgQD7RtUvc9omsSsFMJ6e\\nBASAn6Dktx/QY/XNJjFzHQj69cywLDe5t5AL2gUi3phQ2oqB5XJdwnd5bTIEPEPZ\\nDOuOai2802p6FJk6kjmZAMVGx5JtXBH+vs6jrmQQSMiKbjwN1TT6xIWakvLOonUi\\nX6ZvjYYjU/E0YJU3jSiXWEr76wKBgQD5Zn4SouJ6BCDZMbausJVMBkk3qxsYooip\\np89WakC6e7AZinpkRcqjGGV9GOvc8crJs6fyXAA9ORepGP47Mc0ZrDssOkstznsM\\npr8R0S6MKwEZaT9ixOHdOcLZ47ps+JzA2Wr4KN2OvFHksUkB/46ATD1j9WZVgB8M\\namsYp/Y73QKBgHOo+PvsoZ9psVmkNX6abtAdqdtdB0HOoRea2uwXk0ig12TIFaZg\\nfedWpUKVnxqoXVTJHklV99RmlL0qWDiSH+LfsMnXro0e6iDxqZ1po2Se/CFmXcoa\\nXdctsFVmixhdATuExewfhTfPKABA+xWlXWC/jdy5CK+JPWXijaqMM4edAoGAE5Bj\\nsWiPpYyvWvpYX0nA3G7dzX0hqgQN/mkIjbnWDArp3IcNZNJIvBSM2Yxb7EAXbU0n\\njo6DAkp5Pa2VO+WDNlFZbvW/sf8xjeOCt44WPa6d7nVgIIpbQXRngZoopKW3/jTP\\n/FmQT8McFXmGxZ5belsAsdetSGW9icbLUerTGQ0CgYEAmf/G8Ag3XxmqTXvvHuv2\\n14OP7WnrVqkEMnydrftEwn4peXd/Lz+/GYX5Zc4ZoNgbN8IvZ5z0+OmRsallsbiW\\nBw0/tc68CjzxXOvReWxDluUopqWVGj5tlGqE5xUDku9SWJSxbkiQ3rqutzBdPXpr\\noqHwPyDrmK/Zgqn+uiIm4Ck=\\n-----END PRIVATE KEY-----\\n", + "client_email": "firebase-adminsdk-o2wqi@ride-b1bd8.iam.gserviceaccount.com", + "client_id": "111210077025005706623", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-o2wqi%40ride-b1bd8.iam.gserviceaccount.com", + "universe_domain": "googleapis.com" +} +'''; // As defined above + + // Initialize AccessTokenManager + final accessTokenManager = AccessTokenManager(serviceAccountKeyJson); + + // Obtain an OAuth 2.0 access token + final accessToken = await accessTokenManager.getAccessToken(); + + // Send the notification final response = await http.post( - Uri.parse('https://fcm.googleapis.com/fcm/send'), + Uri.parse( + 'https://fcm.googleapis.com/v1/projects/ride-b1bd8/messages:send'), headers: { 'Content-Type': 'application/json', - 'Authorization': 'key=${AK.serverAPI}' + 'Authorization': 'Bearer $accessToken', }, body: jsonEncode({ 'notification': { diff --git a/lib/controller/functions/crud.dart b/lib/controller/functions/crud.dart index 8242270..8efc675 100644 --- a/lib/controller/functions/crud.dart +++ b/lib/controller/functions/crud.dart @@ -234,7 +234,6 @@ class CRUD { }, ); Log.print('payload: ${payload}'); - // print(response.request); Log.print('response.request: ${response.request}'); Log.print('response.body: ${response.body}'); var jsonData = jsonDecode(response.body); diff --git a/lib/controller/home/map_passenger_controller.dart b/lib/controller/home/map_passenger_controller.dart index 19f3106..2d33697 100644 --- a/lib/controller/home/map_passenger_controller.dart +++ b/lib/controller/home/map_passenger_controller.dart @@ -1016,11 +1016,11 @@ class MapPassengerController extends GetxController { late String make = ''; late String licensePlate = ''; confirmRideForFirstDriver() async { - // startCarLocationSearch(box.read(BoxName.carType)); - await getCarsLocationByPassengerAndReloadMarker( - box.read(BoxName.carType), 7000); + startCarLocationSearch(box.read(BoxName.carType)); + // await getCarsLocationByPassengerAndReloadMarker( + // box.read(BoxName.carType), 7000); await getNearestDriverByPassengerLocationAPIGOOGLE(); - + Log.print('dataCarsLocationByPassenger: ${dataCarsLocationByPassenger}'); if (dataCarsLocationByPassenger != 'failure' || dataCarsLocationByPassenger != null) { driverToken = @@ -1132,50 +1132,50 @@ class MapPassengerController extends GetxController { Log.print( 'body: ${dataCarsLocationByPassenger['message'][carsOrder]['token']}'); }); - CRUD().post( - link: '${AppLink.seferAlexandriaServer}/ride/rides/add.php', - payload: { - "start_location": //'${data[0]['start_address']}', - '${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}', - "end_location": //'${data[0]['end_address']}', - '${data[0]["end_location"]['lat']},${data[0]["end_location"]['lng']}', - "date": DateTime.now().toString(), - "time": DateTime.now().toString(), - "endtime": durationToAdd.toString(), - "price": totalPassenger.toStringAsFixed(2), - "passenger_id": box.read(BoxName.passengerID).toString(), - "driver_id": dataCarsLocationByPassenger['message'][carsOrder] - ['driver_id'] - .toString(), - "status": "waiting", - 'carType': box.read(BoxName.carType), - "price_for_driver": totalPassenger.toString(), - "price_for_passenger": totalME.toString(), - "distance": distance.toString(), - "paymentMethod": paymentController.isWalletChecked.toString(), - }); - CRUD().post( - link: '${AppLink.seferGizaServer}/ride/rides/add.php', - payload: { - "start_location": //'${data[0]['start_address']}', - '${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}', - "end_location": //'${data[0]['end_address']}', - '${data[0]["end_location"]['lat']},${data[0]["end_location"]['lng']}', - "date": DateTime.now().toString(), - "time": DateTime.now().toString(), - "endtime": durationToAdd.toString(), - "price": totalPassenger.toStringAsFixed(2), - "passenger_id": box.read(BoxName.passengerID).toString(), - "driver_id": dataCarsLocationByPassenger['message'][carsOrder] - ['driver_id'] - .toString(), - "status": "waiting", - 'carType': box.read(BoxName.carType), - "price_for_driver": totalPassenger.toString(), - "price_for_passenger": totalME.toString(), - "distance": distance.toString(), - "paymentMethod": paymentController.isWalletChecked.toString(), - }); + // CRUD().post( + // link: '${AppLink.seferAlexandriaServer}/ride/rides/add.php', + // payload: { + // "start_location": //'${data[0]['start_address']}', + // '${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}', + // "end_location": //'${data[0]['end_address']}', + // '${data[0]["end_location"]['lat']},${data[0]["end_location"]['lng']}', + // "date": DateTime.now().toString(), + // "time": DateTime.now().toString(), + // "endtime": durationToAdd.toString(), + // "price": totalPassenger.toStringAsFixed(2), + // "passenger_id": box.read(BoxName.passengerID).toString(), + // "driver_id": dataCarsLocationByPassenger['message'][carsOrder] + // ['driver_id'] + // .toString(), + // "status": "waiting", + // 'carType': box.read(BoxName.carType), + // "price_for_driver": totalPassenger.toString(), + // "price_for_passenger": totalME.toString(), + // "distance": distance.toString(), + // "paymentMethod": paymentController.isWalletChecked.toString(), + // }); + // CRUD().post( + // link: '${AppLink.seferGizaServer}/ride/rides/add.php', + // payload: { + // "start_location": //'${data[0]['start_address']}', + // '${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}', + // "end_location": //'${data[0]['end_address']}', + // '${data[0]["end_location"]['lat']},${data[0]["end_location"]['lng']}', + // "date": DateTime.now().toString(), + // "time": DateTime.now().toString(), + // "endtime": durationToAdd.toString(), + // "price": totalPassenger.toStringAsFixed(2), + // "passenger_id": box.read(BoxName.passengerID).toString(), + // "driver_id": dataCarsLocationByPassenger['message'][carsOrder] + // ['driver_id'] + // .toString(), + // "status": "waiting", + // 'carType': box.read(BoxName.carType), + // "price_for_driver": totalPassenger.toString(), + // "price_for_passenger": totalME.toString(), + // "distance": distance.toString(), + // "paymentMethod": paymentController.isWalletChecked.toString(), + // }); delayAndFetchRideStatus(rideId); if (shouldFetch == false) { @@ -1202,67 +1202,79 @@ class MapPassengerController extends GetxController { bool isDriversTokensSend = false; confirmRideForAllDriverAvailable() async { - driversToken.remove(driverToken); - PaymentController paymentController = Get.find(); - rideConfirm = true; - shouldFetch = true; - isBottomSheetShown = false; - timeToPassengerFromDriverAfterApplied = 60; + await getCarsLocationByPassengerAndReloadMarker( + box.read(BoxName.carType), 7000); + if (dataCarsLocationByPassenger != 'failure') { + driversToken.remove(driverToken); + PaymentController paymentController = Get.find(); + rideConfirm = true; + shouldFetch = true; + isBottomSheetShown = false; + timeToPassengerFromDriverAfterApplied = 60; - List body = [ - '${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}', - '${data[0]["end_location"]['lat']},${data[0]["end_location"]['lng']}', - totalPassenger.toStringAsFixed(2), - totalDriver.toStringAsFixed(2), - durationToRide.toString(), - distance.toStringAsFixed(2), - dataCarsLocationByPassenger['message'][carsOrder]['driver_id'].toString(), - box.read(BoxName.passengerID).toString(), - box.read(BoxName.name).toString(), - box.read(BoxName.tokenFCM).toString(), - box.read(BoxName.phone).toString(), - durationByPassenger.toString(), - distanceByPassenger.toString(), - paymentController.isWalletChecked.toString(), - dataCarsLocationByPassenger['message'][carsOrder]['token'].toString(), - durationToPassenger.toString(), - rideId, - rideTimerBegin.toString(), - dataCarsLocationByPassenger['message'][carsOrder]['driver_id'].toString(), - durationToRide.toString(), - Get.find().wayPoints.length > 1 - ? 'haveSteps' - : 'startEnd', - placesCoordinate[0], - placesCoordinate[1], - placesCoordinate[2], - placesCoordinate[3], - placesCoordinate[4], - costForDriver.toStringAsFixed(2), - double.parse(box.read(BoxName.passengerWalletTotal)) < 0 - ? double.parse(box.read(BoxName.passengerWalletTotal)) - .toStringAsFixed(2) - : '0', - box.read(BoxName.email).toString(), - startNameAddress, - endNameAddress, - box.read(BoxName.carType), - kazan.toStringAsFixed(0), - passengerRate.toStringAsFixed(2), - ]; - Log.print('body: ${body}'); - for (var i = 1; i < driversToken.length; i++) { - FirebaseMessagesController().sendNotificationToDriverMapPolyline( - 'OrderSpeed', - rideId.toString(), - driversToken[i], - body, - polylineCoordinates.toString()); + List body = [ + '${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}', + '${data[0]["end_location"]['lat']},${data[0]["end_location"]['lng']}', + totalPassenger.toStringAsFixed(2), + totalDriver.toStringAsFixed(2), + durationToRide.toString(), + distance.toStringAsFixed(2), + dataCarsLocationByPassenger['message'][carsOrder]['driver_id'] + .toString(), + box.read(BoxName.passengerID).toString(), + box.read(BoxName.name).toString(), + box.read(BoxName.tokenFCM).toString(), + box.read(BoxName.phone).toString(), + durationByPassenger.toString(), + distanceByPassenger.toString(), + paymentController.isWalletChecked.toString(), + dataCarsLocationByPassenger['message'][carsOrder]['token'].toString(), + durationToPassenger.toString(), + rideId, + rideTimerBegin.toString(), + dataCarsLocationByPassenger['message'][carsOrder]['driver_id'] + .toString(), + durationToRide.toString(), + Get.find().wayPoints.length > 1 + ? 'haveSteps' + : 'startEnd', + placesCoordinate[0], + placesCoordinate[1], + placesCoordinate[2], + placesCoordinate[3], + placesCoordinate[4], + costForDriver.toStringAsFixed(2), + double.parse(box.read(BoxName.passengerWalletTotal)) < 0 + ? double.parse(box.read(BoxName.passengerWalletTotal)) + .toStringAsFixed(2) + : '0', + box.read(BoxName.email).toString(), + startNameAddress, + endNameAddress, + box.read(BoxName.carType), + kazan.toStringAsFixed(0), + passengerRate.toStringAsFixed(2), + ]; + Log.print('body: ${body}'); + for (var i = 1; i < driversToken.length; i++) { + FirebaseMessagesController().sendNotificationToDriverMapPolyline( + 'OrderSpeed', + rideId.toString(), + driversToken[i], + body, + polylineCoordinates.toString()); + } + + (rideId); + + update(); + } else { + MyDialog().getDialog("No Car or Driver Found in your area.".tr, + "No Car or Driver Found in your area.".tr, () { + Get.back(); + Get.offAll(const MapPagePassenger()); + }); } - - (rideId); - - update(); } int tick = 0; // Move tick outside the function to maintain its state @@ -1679,33 +1691,28 @@ class MapPassengerController extends GetxController { } String getLocationArea(double latitude, double longitude) { - // Giza Boundary Check - if (latitude >= 29.904975 && - latitude <= 30.143372 && - longitude >= 30.787030 && - longitude <= 31.238843) { - box.write(BoxName.serverChosen, AppLink.seferGizaServer); - return 'Giza'; - } - // Cairo Boundary Check - else if (latitude >= 29.918901 && + if (latitude >= 29.918901 && latitude <= 30.198857 && longitude >= 31.215009 && longitude <= 31.532186) { box.write(BoxName.serverChosen, AppLink.seferCairoServer); return 'Cairo'; - } - // Alexandria Boundary Check - else if (latitude >= 30.396286 && + } else if (latitude >= 29.904975 && + latitude <= 30.143372 && + longitude >= 30.787030 && + longitude <= 31.238843) { + box.write(BoxName.serverChosen, AppLink.seferGizaServer); + return 'Giza'; + } else if (latitude >= 30.396286 && latitude <= 31.654458 && longitude >= 29.041139 && longitude <= 32.626259) { box.write(BoxName.serverChosen, AppLink.seferAlexandriaServer); return 'Alexandria'; + } else { + box.write(BoxName.serverChosen, AppLink.seferCairoServer); + return 'Outside'; } - - // Return 'Unknown' if outside defined areas - return 'Unknown'; } Future getCarsLocationByPassengerAndReloadMarker( diff --git a/lib/views/home/map_widget.dart/left_main_menu_icons.dart b/lib/views/home/map_widget.dart/left_main_menu_icons.dart index 55e85ca..811ca09 100644 --- a/lib/views/home/map_widget.dart/left_main_menu_icons.dart +++ b/lib/views/home/map_widget.dart/left_main_menu_icons.dart @@ -1,7 +1,10 @@ +import 'package:SEFER/constant/box_name.dart'; +import 'package:SEFER/main.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import '../../../constant/colors.dart'; +import '../../../controller/firebase/firbase_messge.dart'; import '../../../controller/functions/tts.dart'; import '../../../controller/home/map_passenger_controller.dart'; @@ -89,8 +92,17 @@ GetBuilder leftMainMenuIcons() { // borderRadius: BorderRadius.circular(15)), // child: IconButton( // onPressed: () async { - // box.remove(BoxName.isVerified); - // Get.to(() => SmsSignupEgypt()); + // FirebaseMessagesController().sendNotificationToAnyWithoutData( + // 'Order'.tr, + // 'from: ', + // // jsonDecode(value)['message'].toString(), + // 'dEugS-JOT4Ka5riF4s5TEN:APA91bEDL_W7BuEQGbyL-RMaKiMWDlURXhFuaybe5WurTUV8K5eIooSGe22yY22_U2hEZcfPr46ig1v--l00dbOGiivazxvmTyhUyQQW6lJsuIN-wordGtBxtREyeYtEKvxIa1J4ApEu', + // 'order.wav' + + // // polylineCoordinates.toString() + // ); + // // print(box.read(BoxName.tokenFCM)); + // // // }, // icon: const Icon( // Icons.voice_chat, @@ -98,32 +110,31 @@ GetBuilder leftMainMenuIcons() { // ), // ), // ), - // AnimatedContainer( - // duration: const Duration(microseconds: 200), - // width: controller.widthMapTypeAndTraffic, - // decoration: BoxDecoration( - // color: AppColor.secondaryColor, - // border: Border.all(), - // borderRadius: BorderRadius.circular(15)), - // child: IconButton( - // onPressed: () async { - // FirebaseMessagesController().sendNotificationToDriverMAP( - // '', - // 'from: ', - // // jsonDecode(value)['message'].toString(), - // 'cXavJMQgRACEfYdOnSLDU4:-KwZqsbJvYyIqgkI9oxZCiqyVv9ZnVG7rN0LBf7Nxe9AEcatgHNo0fEomaMWB3ff_SagtNkUuYeHc-GaPETq6Oa', - // [], - // 'order.wav' - - // // polylineCoordinates.toString() - // ); - // }, - // icon: const Icon( - // Icons.chat, - // size: 29, - // ), - // ), - // ), + AnimatedContainer( + duration: const Duration(microseconds: 200), + width: controller.widthMapTypeAndTraffic, + decoration: BoxDecoration( + color: AppColor.secondaryColor, + border: Border.all(), + borderRadius: BorderRadius.circular(15)), + child: IconButton( + onPressed: () async { + FirebaseMessagesController().sendNotificationToDriverMAP( + 'message From passenger'.tr, + 'My location is correct. You can search for me using the navigation app' + .tr, + 'db9hQ9BfT_2U-ocVHbEAej:APA91bG2YiVN8Dw3bNitehENk0sUPKt7A3zoT6GY_NdbxsMVKX8ouZRI6Ix9ScLSGYz31gugsb2Ag087FXmbPbQkD9E7nwOR7USPrai5euFjZXVHNrz2Byacn8gBTGr8HPV-CGHG81lk', + [], + 'ding.wav', + ); + // print(box.read(BoxName.tokenFCM)); + }, + icon: const Icon( + Icons.chat, + size: 29, + ), + ), + ), // AnimatedContainer( // duration: const Duration(microseconds: 200), // width: controller.widthMapTypeAndTraffic, diff --git a/pubspec.lock b/pubspec.lock index f445950..ef5874b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -912,6 +912,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.12.4+1" + googleapis_auth: + dependency: "direct main" + description: + name: googleapis_auth + sha256: befd71383a955535060acde8792e7efc11d2fccd03dd1d3ec434e85b68775938 + url: "https://pub.dev" + source: hosted + version: "1.6.0" graphs: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 3ccfc8c..c393816 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -60,6 +60,7 @@ dependencies: firebase_auth: ^5.1.2 package_info_plus: ^8.0.0 uni_links: ^0.5.1 + googleapis_auth: ^1.6.0 dev_dependencies: flutter_test: