From 46709df1e65dcacf126d7f68b192495139d0fea2 Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Sat, 25 Jan 2025 00:02:17 +0300 Subject: [PATCH] 25-1/25/1-secure and links --- lib/constant/box_name.dart | 2 + lib/constant/info.dart | 78 ++++++------- lib/constant/links.dart | 11 +- lib/controller/auth/google_sign.dart | 6 +- .../auth/onboarding_controller.dart | 3 +- .../functions/location_controller.dart | 4 +- lib/controller/functions/secure_storage.dart | 13 +++ .../captin/help/assurance_controller.dart | 2 - lib/controller/rate/rate_app_controller.dart | 19 ++-- lib/env.zip | Bin 0 -> 35470 bytes lib/main.dart | 6 +- lib/views/auth/captin/cards/sms_signup.dart | 103 +++++++++++++++++- .../Captin/home_captain/drawer_captain.dart | 2 +- .../home/Captin/home_captain/home_captin.dart | 32 ++---- .../Captin/home_captain/widget/connect.dart | 22 ++-- .../widget/left_menu_map_captain.dart | 91 ++++++++++++++-- lib/views/home/profile/profile_captain.dart | 14 ++- 17 files changed, 295 insertions(+), 113 deletions(-) create mode 100644 lib/env.zip diff --git a/lib/constant/box_name.dart b/lib/constant/box_name.dart index 20d6a20..e5d1beb 100644 --- a/lib/constant/box_name.dart +++ b/lib/constant/box_name.dart @@ -11,6 +11,8 @@ class BoxName { static const String gender = "gender"; static const String phoneWallet = "phoneWallet"; static const String locationName = "locationName"; + static const String basicLink = "basicLink"; + static const String paymentLink = "paymentLink"; static const String isSavedPhones = "IsSavedPhones"; static const String isTest = "isTest"; static const String carType = "carType"; diff --git a/lib/constant/info.dart b/lib/constant/info.dart index 4b03b15..9902ef7 100644 --- a/lib/constant/info.dart +++ b/lib/constant/info.dart @@ -1,12 +1,12 @@ class AppInformation { - static const String companyName = 'Swifti'; - static const String appName = 'Swifti DRIVER'; - static const String appVersion = 'Swifti Captain'; + static const String companyName = 'Sefer'; + static const String appName = 'Sefer DRIVER'; + static const String appVersion = 'Sefer Captain'; static const String phoneNumber = '962798583052'; static const String linkedInProfile = 'https://www.linkedin.com/in/hamza-ayed/'; - static const String website = 'https://Swifti.live'; - static const String email = 'hamzaayed@Swifti.live'; + static const String website = 'https://Sefer.live'; + static const String email = 'hamzaayed@Sefer.live'; static const String complaintPrompt = 'for this data for complaint from driver or passenger i collect all data i want you analyze this complaint and show what is reason and what is solution .this data collected from many table to find solution if payment in visa not complete and if ride status is finished it will be paymnet in payment table if ride status is not finished there is no need to pay and payment table is null for this ride and if paymentFromPaymentTable not null and visa type not cash the payment sucssessed . if ratingpassenger is low or passengr rating drivers low grade then dont mine of this passenger ,look at driver too like passengerratingdriver with rating or ratingtopassenger .in json add status of complaint and message to passenger and message to driver and message to call center write in arabic in json output with key in english .for output please just json i want'; @@ -78,10 +78,10 @@ class AppInformation {

Terms and Conditions

1 TERMS OF USE

-

By downloading, browsing, accessing or using the Mobile Application; “Swifti”, Users agree to be bound by these Terms and Conditions of Use. We reserve the right to amend these terms and conditions at any time. If the User disagrees with any of these Terms and Conditions of Use, the User must immediately discontinue their access to the Mobile Application and their use of the services offered on the Mobile Application. Continued use of the Mobile Application will constitute acceptance of these Terms and Conditions of Use, as may be amended from time to time.

+

By downloading, browsing, accessing or using the Mobile Application; “Sefer”, Users agree to be bound by these Terms and Conditions of Use. We reserve the right to amend these terms and conditions at any time. If the User disagrees with any of these Terms and Conditions of Use, the User must immediately discontinue their access to the Mobile Application and their use of the services offered on the Mobile Application. Continued use of the Mobile Application will constitute acceptance of these Terms and Conditions of Use, as may be amended from time to time.

2.1. DEFINITIONS

In these Terms and Conditions of Use, the following capitalized terms shall have the following meanings, except where the context otherwise requires:

-

“Mobile Application” or “Swifti” refers to the smartphone software through which the company mediates services between Users and Service Providers.

+

“Mobile Application” or “Sefer” refers to the smartphone software through which the company mediates services between Users and Service Providers.

"Account" means an account created by a User or a Service Provider on the Mobile Application as part of Registration.

“Service Providers” refers to the individuals or companies registered within the Company to provide products or services approved and mediated by the Company/Mobile Application and that are requested/purchased by “Users”. “Service Provider” means any one of them.

"Users" means users of the Mobile Application, including you and "User" means any one of them. “Users” also includes Service Providers using the Mobile Application version dedicated to the use of Service Providers.

@@ -90,8 +90,8 @@ class AppInformation {

"Redemption" means the act of redeeming such products or services.

"Register" means to create an Account on the Mobile Application and "Registration" means the act of creating such an Account.

"Services" means all the services provided by Service Providers via the Mobile Application and mediated by the Company to Users, and "Service" means any one of them.

-

2.2. WHAT IS THE MOBILE APPLICATION, “Swifti”?

-

The “Swifti” Mobile Application consists in a specialize service with the purpose to schedule/match the Service Provider with the User, however without creating any employee relationship with the Service Provider, meaning that the Mobile Application should be considered only as a service mediator with the purpose of scheduling/matching between Users and Service Providers for the latter to fulfill the service requested by Users. Through the system, the Company allows, totally free of charge, the Users to sign up and request the desired available services from Service Providers in a more efficient way than the conventional existing methods. The Service Providers, by their means, can register on the Mobile Application dedicated for Service Providers through the methods indicated by the Company, pending an evaluation from the Company and the necessary documentation when signing up in accordance with guidelines set by the Transportation General Authority (TGA) to provide services through the Mobile Application. The Service Provider will pay a profit margin fee determined by the Company -in knowledge of the Service Provider- per completed service. Users can pay their ride fare using Apple Pay as an additional payment method in Saudi Arabia on iPhones

+

2.2. WHAT IS THE MOBILE APPLICATION, “Sefer”?

+

The “Sefer” Mobile Application consists in a specialize service with the purpose to schedule/match the Service Provider with the User, however without creating any employee relationship with the Service Provider, meaning that the Mobile Application should be considered only as a service mediator with the purpose of scheduling/matching between Users and Service Providers for the latter to fulfill the service requested by Users. Through the system, the Company allows, totally free of charge, the Users to sign up and request the desired available services from Service Providers in a more efficient way than the conventional existing methods. The Service Providers, by their means, can register on the Mobile Application dedicated for Service Providers through the methods indicated by the Company, pending an evaluation from the Company and the necessary documentation when signing up in accordance with guidelines set by the Transportation General Authority (TGA) to provide services through the Mobile Application. The Service Provider will pay a profit margin fee determined by the Company -in knowledge of the Service Provider- per completed service. Users can pay their ride fare using Apple Pay as an additional payment method in Saudi Arabia on iPhones

3. GENERAL ISSUES ABOUT THE MOBILE APPLICATION AND THE SERVICES

3.1 Applicability of terms and conditions: The use of any Services and/or the Mobile Application and the making of any Redemptions are subject to these Terms and Conditions of Use.

@@ -146,7 +146,7 @@ class AppInformation {

7.3 We do not give any warranty that the Services and the Mobile Application are free from viruses or anything else which may have a harmful effect on any technology.

7.4 We reserve the right to change, modify, substitute, suspend or remove without notice any information or Services on the Mobile Application from time to time. Users’ access to the Mobile Application and/or the Services may also be occasionally restricted to allow for repairs, maintenance or the introduction of new facilities or services. We will attempt to restore such access as soon as we reasonably can. For the avoidance of doubt, we reserve the right to withdraw any information or Services from the Mobile Application at any time.

7.5 We reserve the right to block access to and/or to edit or remove any material which in our reasonable opinion may give rise to a breach of these Terms and Conditions of Use.

-

7.6 The acceptance and denial of the service request may occur at first by the Service Provider, who can accept or deny the service when receiving a notification for a request. The User may cancel the contract for any reason which may or may not apply cancellation fees for which the conditions and amount is determined and communicated by the Company. Both recognize that “Swifti” is not liable for any delays, cancellations, failure to cancel the contract and miscommunication between the User and the Service Provider, nor for any delay or failure in the delivery of services from the Service Provider.

+

7.6 The acceptance and denial of the service request may occur at first by the Service Provider, who can accept or deny the service when receiving a notification for a request. The User may cancel the contract for any reason which may or may not apply cancellation fees for which the conditions and amount is determined and communicated by the Company. Both recognize that “Sefer” is not liable for any delays, cancellations, failure to cancel the contract and miscommunication between the User and the Service Provider, nor for any delay or failure in the delivery of services from the Service Provider.

8. SUSPENSION AND TERMINATION

8.1 If the User uses (or others, with the User’s permission use) the Mobile Application, any Services in contravention of these Terms and Conditions of Use, we may suspend their use of the Services and/or Mobile Application.

@@ -197,10 +197,10 @@ class AppInformation {

(f) We will protect personal information by reasonable security safeguards against loss or theft, as well as unauthorized access, disclosure, copying, use or modification.

(g) The Company further reserves the right to use all legal means possible and to identify the Users, as well as to request, at any time, additional data and documents it considers appropriate in order to verify personal data informed by the user.

We are committed to conducting our business in accordance with these principles in order to ensure that the confidentiality of personal information is protected and maintained.

-

14.3 Social logins policy
Our Services offers you the ability to register and login using Facebook. Where you choose to do this, we will receive certain profile information about you from your social media provider. The profile Information may include your name and social token.
We will use the information we receive only to associate your social token with your Swifti account or for the purposes that are described in this privacy policy.

14.4 Account and data deletion
Based on the applicable laws of your country, you may have the right to request the deletion of your personal data in some circumstances. If you want to delete your account or personal data in the application, please contact us via e-mail: support@mobile-app.store. We will respond to your request within 30 days.

+

14.3 Social logins policy
Our Services offers you the ability to register and login using Facebook. Where you choose to do this, we will receive certain profile information about you from your social media provider. The profile Information may include your name and social token.
We will use the information we receive only to associate your social token with your Sefer account or for the purposes that are described in this privacy policy.

14.4 Account and data deletion
Based on the applicable laws of your country, you may have the right to request the deletion of your personal data in some circumstances. If you want to delete your account or personal data in the application, please contact us via e-mail: support@mobile-app.store. We will respond to your request within 30 days.

15. In-Ride Policy

15.1 Smoking Policy:

-

No smoking or other use of tobacco products (including, but not limited to, cigarettes, pipes, cigars, snuff, or chewing tobacco) is permitted during rides. No cigarette butts or other traces of smell, litter, or tobacco use should be present in the vehicle. image

+

No smoking or other use of tobacco products (including, but not limited to, cigarettes, pipes, cigars, snuff, or chewing tobacco) is permitted during rides. No cigarette butts or other traces of smell, litter, or tobacco use should be present in the vehicle. image

15.2 COVID-19 Policy: Face masks must be always worn during rides.

@@ -217,33 +217,33 @@ class AppInformation {
@@ -257,13 +257,13 @@ class AppInformation {
- My image + My image - My image + My image - My image + My image
@@ -2338,7 +2338,7 @@ double nearestDistance = double.infinity; Arabic (Egypt) - Swifti + Sefer سفر
@@ -2362,8 +2362,8 @@ double nearestDistance = double.infinity; Arabic (Egypt)
- write short description for my app Swifti in en and ar and tr - اكتب وصفًا مختصرًا لتطبيقي Swifti باللغة en وar وtr + write short description for my app Sefer in en and ar and tr + اكتب وصفًا مختصرًا لتطبيقي Sefer باللغة en وar وtr
delete history element @@ -2386,8 +2386,8 @@ double nearestDistance = double.infinity; Arabic (Egypt)
- Swifti, güvenilir ve uygun fiyatlı sürücülerle buluşan bir taksi çağırma uygulamasıdır. - Swifti, güvenilir ve uygun fiyatlı sürüculerle bluşan bil taksi çağırma uygulamasıdır. + Sefer, güvenilir ve uygun fiyatlı sürücülerle buluşan bir taksi çağırma uygulamasıdır. + Sefer, güvenilir ve uygun fiyatlı sürüculerle bluşan bil taksi çağırma uygulamasıdır.
delete history element @@ -2410,7 +2410,7 @@ double nearestDistance = double.infinity; Arabic (Egypt)
- Swifti, sizi bölgenizdeki güvenilir ve uygun fiyatlı sürücülerle buluşturan bir taksi çağırma uygulamasıdır. + Sefer, sizi bölgenizdeki güvenilir ve uygun fiyatlı sürücülerle buluşturan bir taksi çağırma uygulamasıdır. علاوة على ذلك، فإن جميع أفراد العائلة والأصدقاء يستمتعون بالمزيد من الراحة من خلال سيارات الأجرة.
@@ -2458,8 +2458,8 @@ double nearestDistance = double.infinity; Arabic (Egypt)
- Swifti: Ride-hailing app for a seamless and affordable travel experience - Swifti: تطبيق نقل الركاب لتجربة سفر سلسة وبأسعار معقولة + Sefer: Ride-hailing app for a seamless and affordable travel experience + Sefer: تطبيق نقل الركاب لتجربة سفر سلسة وبأسعار معقولة
delete history element diff --git a/lib/constant/links.dart b/lib/constant/links.dart index 17e9308..705d595 100644 --- a/lib/constant/links.dart +++ b/lib/constant/links.dart @@ -6,8 +6,7 @@ import 'box_name.dart'; class AppLink { static String serverPHP = box.read('serverPHP'); - static String seferPaymentServer = - 'https://wallet.sefer.live/seferpw.shop/sefer/'; + static String seferPaymentServer = box.read(BoxName.paymentLink); static String seferPaymentServer0 = box.read('seferPaymentServer'); // static final String seferPaymentServer0 = Env.seferPaymentServer; // static final String seferPaymentServer = '${Env.seferPaymentServer}/ride'; @@ -21,11 +20,13 @@ class AppLink { // static final String seferPaymentServer0 = Env.seferCairoServer; // static const String seferGizaServer = 'https://gizasefer.online/sefer'; // static final String seferGizaServer = Env.seferGizaServer; - static final String endPoint = box.read(BoxName.serverChosen); + static final String endPoint = + box.read(BoxName.serverChosen) ?? box.read(BoxName.basicLink); + // 'https://server.sefer.live/sefer.click/sefer'; static final String server = endPoint; static String seferCairoServer = endPoint; - static String seferGizaServer = box.read('seferGizaServer'); - static String seferAlexandriaServer = box.read('seferAlexandriaServer'); + static String seferGizaServer = box.read('Giza'); + static String seferAlexandriaServer = box.read('Alexandria'); // static final String server = Env.serverPHP; static String googleMapsLink = 'https://maps.googleapis.com/maps/api/'; diff --git a/lib/controller/auth/google_sign.dart b/lib/controller/auth/google_sign.dart index ff5db07..576fd3f 100644 --- a/lib/controller/auth/google_sign.dart +++ b/lib/controller/auth/google_sign.dart @@ -123,10 +123,8 @@ class GoogleSignInHelper { static Future _handleSignUp(GoogleSignInAccount user) async { // Store driver information - box.write( - BoxName.driverID, - encryptionHelper.encryptData(user.id) ?? - 'Unknown ID'); // Ensure there's a fallback value + box.write(BoxName.driverID, + (user.id) ?? 'Unknown ID'); // Ensure there's a fallback value box.write(BoxName.emailDriver, encryptionHelper.encryptData(user.email) ?? 'Unknown Email'); } diff --git a/lib/controller/auth/onboarding_controller.dart b/lib/controller/auth/onboarding_controller.dart index 73c7bdf..256ec6d 100644 --- a/lib/controller/auth/onboarding_controller.dart +++ b/lib/controller/auth/onboarding_controller.dart @@ -2,7 +2,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:sefer_driver/constant/box_name.dart'; import 'package:sefer_driver/main.dart'; -import 'package:sefer_driver/views/auth/login_page.dart'; import '../../models/model/onboarding_model.dart'; import '../../views/auth/captin/login_captin.dart'; @@ -23,7 +22,7 @@ class OnBoardingControllerImp extends OnBoardingController { if (currentPage > onBoardingList.length - 1) { box.write(BoxName.onBoarding, 'yes'); - Get.offAll(LoginCaptin()); + Get.offAll(() => LoginCaptin()); } else { pageController.animateToPage(currentPage, duration: const Duration(milliseconds: 900), curve: Curves.easeInOut); diff --git a/lib/controller/functions/location_controller.dart b/lib/controller/functions/location_controller.dart index e73c926..61e5677 100644 --- a/lib/controller/functions/location_controller.dart +++ b/lib/controller/functions/location_controller.dart @@ -11,6 +11,7 @@ import '../../print.dart'; import '../home/captin/home_captain_controller.dart'; import '../home/payment/captain_wallet_controller.dart'; import 'crud.dart'; +import 'encrypt_decrypt.dart'; class LocationController extends GetxController { LocationData? _currentLocation; @@ -89,7 +90,8 @@ class LocationController extends GetxController { latitude <= maxLatitude && longitude >= minLongitude && longitude <= maxLongitude) { - box.write(BoxName.serverChosen, locationData['server_link']); + box.write(BoxName.serverChosen, + encryptionHelper.decryptData(locationData['server_link'])); // Log.print( // 'locationData----server_link: ${locationData['server_link']}'); return locationData['name']; diff --git a/lib/controller/functions/secure_storage.dart b/lib/controller/functions/secure_storage.dart index 926e405..df15156 100644 --- a/lib/controller/functions/secure_storage.dart +++ b/lib/controller/functions/secure_storage.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import 'package:sefer_driver/controller/functions/encrypt_decrypt.dart'; import '../../constant/box_name.dart'; import '../../constant/links.dart'; @@ -44,7 +45,19 @@ class AppInitializer { if (res != 'failure') { links = List>.from(jsonDecode(res)['message']); await box.remove(BoxName.locationName); + await box.remove(BoxName.basicLink); + await box.remove(links[4]['name']); + await box.remove(links[1]['name']); + await box.remove(links[2]['name']); await box.write(BoxName.locationName, links); + await box.write(BoxName.basicLink, + encryptionHelper.decryptData(links[0]['server_link'])); + await box.write(links[2]['name'], + encryptionHelper.decryptData(links[2]['server_link'])); + await box.write(links[1]['name'], + encryptionHelper.decryptData(links[1]['server_link'])); + await box.write(BoxName.paymentLink, + encryptionHelper.decryptData(links[4]['server_link'])); } } catch (e) { print('Error fetching or decoding location data: $e'); diff --git a/lib/controller/home/captin/help/assurance_controller.dart b/lib/controller/home/captin/help/assurance_controller.dart index 7dbeb69..cb30780 100644 --- a/lib/controller/home/captin/help/assurance_controller.dart +++ b/lib/controller/home/captin/help/assurance_controller.dart @@ -7,8 +7,6 @@ import 'package:sefer_driver/main.dart'; import 'package:sefer_driver/views/widgets/error_snakbar.dart'; import 'package:get/get.dart'; -import '../../../../constant/colors.dart'; - class AssuranceHealthController extends GetxController { bool isLoading = false; Map tripCount = {}; diff --git a/lib/controller/rate/rate_app_controller.dart b/lib/controller/rate/rate_app_controller.dart index 9d55331..7944d94 100644 --- a/lib/controller/rate/rate_app_controller.dart +++ b/lib/controller/rate/rate_app_controller.dart @@ -4,6 +4,7 @@ import 'package:sefer_driver/constant/box_name.dart'; import 'package:sefer_driver/constant/colors.dart'; import 'package:sefer_driver/constant/links.dart'; import 'package:sefer_driver/controller/functions/crud.dart'; +import 'package:sefer_driver/controller/functions/encrypt_decrypt.dart'; import 'package:sefer_driver/main.dart'; import 'package:sefer_driver/views/widgets/error_snakbar.dart'; import 'package:sefer_driver/views/widgets/mydialoug.dart'; @@ -41,14 +42,14 @@ class RatingController extends GetxController { "name": box.read(BoxName.driverID) != null ? box.read(BoxName.nameDriver) : box.read(BoxName.name), - "email": box.read(BoxName.driverID) == null - ? box.read(BoxName.email).toString() - : box.read(BoxName.emailDriver).toString(), - "phone": box.read(BoxName.driverID) == null - ? box.read(BoxName.phone) - : box.read(BoxName.phoneDriver), - "userId": box.read(BoxName.driverID) ?? box.read(BoxName.passengerID), - "userType": box.read(BoxName.driverID) != null ? "driver" : "passenger", + "email": encryptionHelper + .decryptData(box.read(BoxName.emailDriver)) + .toString(), + "phone": encryptionHelper + .decryptData(box.read(BoxName.phoneDriver)) + .toString(), + "userId": box.read(BoxName.driverID), + "userType": "driver", "rating": rating.toString(), "comment": comment.text.isEmpty ? 'nothing' @@ -66,7 +67,7 @@ class RatingController extends GetxController { if (parsedResponse['status'] == 'success') { // Display a success message - await CRUD().post(link: AppLink.sendEmailRateingApp, payload: { + CRUD().post(link: AppLink.sendEmailRateingApp, payload: { "name": payload["name"], "email": payload["email"], "rating": rating.toString(), diff --git a/lib/env.zip b/lib/env.zip new file mode 100644 index 0000000000000000000000000000000000000000..1df9461f78a134d3d0b2bf4cf921ba6203eb6c61 GIT binary patch literal 35470 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 literal 0 HcmV?d00001 diff --git a/lib/main.dart b/lib/main.dart index 7006575..69f0607 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -24,6 +24,7 @@ import 'controller/firebase/firbase_messge.dart'; import 'controller/firebase/local_notification.dart'; import 'controller/functions/location_controller.dart'; import 'controller/functions/secure_storage.dart'; +import 'controller/home/payment/captain_wallet_controller.dart'; import 'controller/local/local_controller.dart'; import 'controller/local/translations.dart'; import 'controller/payment/paymob/paymob_wallet.dart'; @@ -124,7 +125,8 @@ void main() async { await GetStorage.init(); Stripe.publishableKey = AK.publishableKeyStripe; - + final AppInitializer initializer = AppInitializer(); + await initializer.initializeApp(); PermissionStatus status1 = await Permission.location.status; if (status1.isGranted) { await LocationController().startLocationUpdates(); @@ -183,8 +185,6 @@ void main() async { userTokenExpiration: 200, iFrameID: 837992, ); - final AppInitializer initializer = AppInitializer(); - await initializer.initializeApp(); runApp(MyApp()); } diff --git a/lib/views/auth/captin/cards/sms_signup.dart b/lib/views/auth/captin/cards/sms_signup.dart index 9337760..094db4d 100644 --- a/lib/views/auth/captin/cards/sms_signup.dart +++ b/lib/views/auth/captin/cards/sms_signup.dart @@ -1,3 +1,6 @@ +import 'dart:convert'; + +import 'package:flutter_font_icons/flutter_font_icons.dart'; import 'package:sefer_driver/constant/colors.dart'; import 'package:sefer_driver/constant/style.dart'; import 'package:sefer_driver/controller/auth/captin/register_captin_controller.dart'; @@ -7,7 +10,11 @@ import 'package:sefer_driver/views/widgets/my_textField.dart'; import 'package:sefer_driver/views/widgets/mycircular.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:sefer_driver/views/widgets/mydialoug.dart'; +import '../../../../controller/functions/crud.dart'; +import '../../../../controller/functions/encrypt_decrypt.dart'; +import '../../../../print.dart'; import '../../../Rate/rate_app_page.dart'; class SmsSignupEgypt extends StatelessWidget { @@ -113,7 +120,101 @@ class SmsSignupEgypt extends StatelessWidget { onPressed: () { Get.to(RatingScreen()); }), - ) + ), + IconButton( + onPressed: () async { + // final plainText = + // 'https://server.sefer.live/sefer.click/sefer'; + // debugPrint('Plain Text: $plainText'); + + // Encrypt the data + // final encryptedData = encryptionHelper.encryptData(plainText); + // debugPrint('Encrypted: $encryptedData'); + + // Decrypt the data + // final decryptedData = encryptionHelper.decryptData( + // encryptedData); // Use the encryptedData variable + // debugPrint('Decrypted: $decryptedData'); + // box.remove('DriversSecure'); + var drivers0 = await CRUD().get( + link: + 'https://server.sefer.live/sefer.click/sefer/auth/captin/getAllDriverSecure.php', + payload: {}); + var decodedDriver; + if (drivers0 != 'failure') { + decodedDriver = jsonDecode(drivers0); + + // box.write('DriversSecure', decodedDriver['message']); + } + var drivers = decodedDriver['message']; + Log.print('drivers.length: ${drivers.length}'); + for (var i = 0; i < drivers.length; i++) { + Log.print('drivers: ${drivers[i]['id']}'); + var payload = { + "phone": encryptionHelper + .encryptData(drivers[i]['phone'].toString()), + "email": encryptionHelper + .encryptData(drivers[i]['email'].toString()), + "gender": encryptionHelper + .encryptData(drivers[i]['gender'].toString()), + "license_type": encryptionHelper + .encryptData(drivers[i]['license_type'].toString()), + "national_number": encryptionHelper.encryptData( + drivers[i]['national_number'].toString()), + "name_arabic": encryptionHelper + .encryptData(drivers[i]['name_arabic'].toString()), + "name_english": encryptionHelper + .encryptData(drivers[i]['name_english'].toString()), + "address": encryptionHelper + .encryptData(drivers[i]['address'].toString()), + "card_id": encryptionHelper + .encryptData(drivers[i]['card_id'].toString()), + "occupation": encryptionHelper + .encryptData(drivers[i]['occupation'].toString()), + "religion": encryptionHelper + .encryptData(drivers[i]['religion'].toString()), + "birthdate": encryptionHelper + .encryptData(drivers[i]['birthdate'].toString()), + "site": encryptionHelper + .encryptData(drivers[i]['site'].toString()), + "first_name": encryptionHelper + .encryptData(drivers[i]['first_name'].toString()), + "last_name": encryptionHelper + .encryptData(drivers[i]['last_name'].toString()), + "education": encryptionHelper + .encryptData(drivers[i]['education'].toString()), + "employmentType": encryptionHelper + .encryptData(drivers[i]['employmentType'].toString()), + "maritalStatus": (drivers[i]['maritalStatus'].toString()), + "fullNameMaritial": encryptionHelper.encryptData( + drivers[i]['fullNameMaritial'].toString()), + 'id': drivers[i]['id'].toString() + }; + print(payload); + // if (drivers[i]['id'].toString() != + // '01002165502a9sHC1tbrUrUw') { + var result = await CRUD().post( + link: + 'https://server.sefer.live/sefer.click/sefer/auth/captin/updateDriverSecure.php', + payload: payload); + if (result != 'failure') { + print(result); + } else { + print('failure'); + } + Future.delayed(Duration(microseconds: 200)); + // } + } + MyDialog().getDialog('title', 'midTitle', () { + Get.back(); + }); + }, + icon: const Icon( + FontAwesome5.grin_tears, + size: 29, + color: AppColor.blueColor, + ), + ), ], ); }), diff --git a/lib/views/home/Captin/home_captain/drawer_captain.dart b/lib/views/home/Captin/home_captain/drawer_captain.dart index 68b42bb..f5bbff9 100644 --- a/lib/views/home/Captin/home_captain/drawer_captain.dart +++ b/lib/views/home/Captin/home_captain/drawer_captain.dart @@ -486,7 +486,7 @@ class UserAccountHeader extends StatelessWidget { : ClipRRect( borderRadius: BorderRadius.circular(50), child: Image.network( - '${AppLink.seferCairoServer}/portrate_captain_image/${encryptionHelper.decryptData(box.read(BoxName.driverID))}.jpg', + '${AppLink.seferCairoServer}/portrate_captain_image/${(box.read(BoxName.driverID))}.jpg', fit: BoxFit.cover, ), ), diff --git a/lib/views/home/Captin/home_captain/home_captin.dart b/lib/views/home/Captin/home_captain/home_captin.dart index cb4c046..5f2c5fa 100644 --- a/lib/views/home/Captin/home_captain/home_captin.dart +++ b/lib/views/home/Captin/home_captain/home_captin.dart @@ -15,7 +15,6 @@ import 'package:bubble_head/bubble.dart'; import '../../../../constant/colors.dart'; import '../../../../constant/info.dart'; import '../../../../constant/style.dart'; -import '../../../../controller/functions/encrypt_decrypt.dart'; import '../../../../controller/functions/location_controller.dart'; import '../../../../controller/functions/overlay_permisssion.dart'; import '../../../../controller/functions/package_info.dart'; @@ -24,7 +23,6 @@ import '../../../widgets/circle_container.dart'; import '../driver_map_page.dart'; import 'widget/connect.dart'; import 'widget/left_menu_map_captain.dart'; -import '../../../../controller/home/payment/captain_wallet_controller.dart'; import '../../../../main.dart'; class HomeCaptain extends StatelessWidget { @@ -229,7 +227,7 @@ class HomeCaptain extends StatelessWidget { ), const SizedBox(width: 8), Text( - '${"Today".tr}: ${encryptionHelper.decryptData(homeCaptainController.totalMoneyToday)}', + '${"Today".tr}: ${(homeCaptainController.totalMoneyToday)}', style: AppStyle.title.copyWith( color: AppColor.greenColor, fontWeight: FontWeight.bold, @@ -253,7 +251,7 @@ class HomeCaptain extends StatelessWidget { ), const SizedBox(width: 8), Text( - '${AppInformation.appName}: ${encryptionHelper.decryptData(homeCaptainController.totalMoneyInSEFER)}', + '${AppInformation.appName}: ${(homeCaptainController.totalMoneyInSEFER)}', style: AppStyle.title.copyWith( color: AppColor.yellowColor, fontWeight: FontWeight.bold, @@ -268,7 +266,7 @@ class HomeCaptain extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( - '${'Total Points is'.tr}: ${encryptionHelper.decryptData(homeCaptainController.totalPoints)}', + '${'Total Points is'.tr}: ${(homeCaptainController.totalPoints)}', style: AppStyle.title.copyWith( fontSize: 16, fontWeight: FontWeight.w600, @@ -279,19 +277,15 @@ class HomeCaptain extends StatelessWidget { horizontal: 12, vertical: 6), decoration: BoxDecoration( borderRadius: BorderRadius.circular(20), - color: int.parse(encryptionHelper.decryptData( - homeCaptainController - .countRideToday)) < + color: int.parse((homeCaptainController + .countRideToday)) < 5 ? AppColor.accentColor - : int.parse(encryptionHelper.decryptData( - homeCaptainController - .countRideToday)) > + : int.parse((homeCaptainController + .countRideToday)) > 5 && - int.parse( - encryptionHelper.decryptData( - homeCaptainController - .countRideToday)) < + int.parse((homeCaptainController + .countRideToday)) < 10 ? AppColor.yellowColor : AppColor.greenColor, @@ -305,7 +299,7 @@ class HomeCaptain extends StatelessWidget { ), const SizedBox(width: 4), Text( - '${"Ride Today : ".tr}: ${encryptionHelper.decryptData(homeCaptainController.countRideToday)}', + '${"Ride Today : ".tr}: ${(homeCaptainController.countRideToday)}', style: AppStyle.title.copyWith( color: Colors.white, fontWeight: FontWeight.bold, @@ -356,8 +350,7 @@ class HomeCaptain extends StatelessWidget { ), const SizedBox(width: 4), Text( - encryptionHelper.decryptData( - homeCaptainController.stringActiveDuration), + (homeCaptainController.stringActiveDuration), style: AppStyle.title.copyWith( fontWeight: FontWeight.bold, color: AppColor.greenColor, @@ -378,8 +371,7 @@ class HomeCaptain extends StatelessWidget { ), const SizedBox(width: 4), Text( - encryptionHelper.decryptData( - homeCaptainController.totalDurationToday), + (homeCaptainController.totalDurationToday), style: AppStyle.title.copyWith( fontWeight: FontWeight.bold, color: AppColor.accentColor, diff --git a/lib/views/home/Captin/home_captain/widget/connect.dart b/lib/views/home/Captin/home_captain/widget/connect.dart index aad54f8..40d1c47 100644 --- a/lib/views/home/Captin/home_captain/widget/connect.dart +++ b/lib/views/home/Captin/home_captain/widget/connect.dart @@ -24,16 +24,16 @@ class ConnectWidget extends StatelessWidget { captainWalletController.getCaptainWalletFromBuyPoints(); return Center( child: GetBuilder( - builder: (homeCaptainController) => double.parse(encryptionHelper - .decryptData(captainWalletController.totalPoints)) < + builder: (homeCaptainController) => double.parse( + (captainWalletController.totalPoints)) < -300 ? CupertinoButton( onPressed: () { Get.defaultDialog( // backgroundColor: CupertinoColors.destructiveRed, barrierDismissible: false, - title: double.parse(encryptionHelper.decryptData( - captainWalletController.totalPoints)) < + title: double.parse( + (captainWalletController.totalPoints)) < -300 ? 'You dont have Points'.tr : 'You Are Stopped For this Day !'.tr, @@ -42,9 +42,8 @@ class ConnectWidget extends StatelessWidget { children: [ IconButton( onPressed: () async { - double.parse(encryptionHelper.decryptData( - captainWalletController - .totalPoints)) < + double.parse((captainWalletController + .totalPoints)) < -300 ? await Get.find() .speakText( @@ -58,9 +57,8 @@ class ConnectWidget extends StatelessWidget { icon: const Icon(Icons.headphones), ), Text( - double.parse(encryptionHelper.decryptData( - captainWalletController - .totalPoints)) < + double.parse((captainWalletController + .totalPoints)) < -300 ? 'You must be recharge your Account'.tr : 'You Refused 3 Rides this Day that is the reason \nSee you Tomorrow!' @@ -69,8 +67,8 @@ class ConnectWidget extends StatelessWidget { ), ], ), - confirm: double.parse(encryptionHelper.decryptData( - captainWalletController.totalPoints)) < + confirm: double.parse( + (captainWalletController.totalPoints)) < -300 ? MyElevatedButton( title: 'Recharge my Account'.tr, 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 e125a46..dbfc21a 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,5 +1,8 @@ +import 'dart:convert'; + import 'package:sefer_driver/constant/box_name.dart'; import 'package:sefer_driver/controller/firebase/local_notification.dart'; +import 'package:sefer_driver/controller/functions/crud.dart'; import 'package:sefer_driver/main.dart'; import 'package:sefer_driver/views/home/Captin/orderCaptin/vip_order_page.dart'; import 'package:flutter/material.dart'; @@ -9,6 +12,7 @@ import 'package:sefer_driver/controller/home/captin/home_captain_controller.dart import '../../../../../constant/colors.dart'; import '../../../../../controller/functions/encrypt_decrypt.dart'; +import '../../../../../print.dart'; import '../../../../Rate/ride_calculate_driver.dart'; GetBuilder leftMainMenuCaptainIcons() { @@ -101,19 +105,88 @@ GetBuilder leftMainMenuCaptainIcons() { child: Builder(builder: (context) { return IconButton( onPressed: () async { - final plainText = 'Al-sayyd'; - debugPrint('Plain Text: $plainText'); + // final plainText = + // 'https://server.sefer.live/sefer.click/sefer'; + // debugPrint('Plain Text: $plainText'); // Encrypt the data - final encryptedData = encryptionHelper.encryptData(plainText); - debugPrint('Encrypted: $encryptedData'); + // final encryptedData = encryptionHelper.encryptData(plainText); + // debugPrint('Encrypted: $encryptedData'); // Decrypt the data - final decryptedData = encryptionHelper.decryptData( - encryptedData); // Use the encryptedData variable - debugPrint('Decrypted: $decryptedData'); - // rlyouFVUqI7TEhu9UEMangaIViglSgxLk3/d1c0Yo7g= - // rlyouFVUqI7TEhu9UEMangaIViglSgxLk3/d1c0Yo7g= + // final decryptedData = encryptionHelper.decryptData( + // encryptedData); // Use the encryptedData variable + // debugPrint('Decrypted: $decryptedData'); + // box.remove('DriversSecure'); + var drivers0 = await CRUD().post( + link: + 'https://server.sefer.live/sefer.click/sefer/auth/captin/getAllDriverSecure.php', + payload: {}); + var decodedDriver; + if (drivers0 != 'failure') { + decodedDriver = jsonDecode(drivers0); + + // box.write('DriversSecure', decodedDriver['message']); + } + var drivers = decodedDriver['message']; + Log.print('drivers.length: ${drivers.length}'); + for (var i = 0; i < drivers.length; i++) { + Log.print('drivers: ${drivers[i]['id']}'); + var payload = { + "phone": encryptionHelper + .encryptData(drivers[i]['phone'].toString()), + "email": encryptionHelper + .encryptData(drivers[i]['email'].toString()), + "gender": encryptionHelper + .encryptData(drivers[i]['gender'].toString()), + "license_type": encryptionHelper + .encryptData(drivers[i]['license_type'].toString()), + "national_number": encryptionHelper.encryptData( + drivers[i]['national_number'].toString()), + "name_arabic": encryptionHelper + .encryptData(drivers[i]['name_arabic'].toString()), + "name_english": encryptionHelper + .encryptData(drivers[i]['name_english'].toString()), + "address": encryptionHelper + .encryptData(drivers[i]['address'].toString()), + "card_id": encryptionHelper + .encryptData(drivers[i]['card_id'].toString()), + "occupation": encryptionHelper + .encryptData(drivers[i]['occupation'].toString()), + "religion": encryptionHelper + .encryptData(drivers[i]['religion'].toString()), + "birthdate": encryptionHelper + .encryptData(drivers[i]['birthdate'].toString()), + "site": encryptionHelper + .encryptData(drivers[i]['site'].toString()), + "first_name": encryptionHelper + .encryptData(drivers[i]['first_name'].toString()), + "last_name": encryptionHelper + .encryptData(drivers[i]['last_name'].toString()), + "education": encryptionHelper + .encryptData(drivers[i]['education'].toString()), + "employmentType": encryptionHelper + .encryptData(drivers[i]['employmentType'].toString()), + "maritalStatus": (drivers[i]['maritalStatus'].toString()), + "fullNameMaritial": encryptionHelper.encryptData( + drivers[i]['fullNameMaritial'].toString()), + 'id': drivers[i]['id'].toString() + }; + print(payload); + // if (drivers[i]['id'].toString() != + // '01002165502a9sHC1tbrUrUw') { + var result = await CRUD().post( + link: + 'https://server.sefer.live/sefer.click/sefer/auth/captin/updateDriverSecure.php', + payload: payload); + if (result != 'failure') { + print(result); + } else { + print('failure'); + } + Future.delayed(Duration(microseconds: 200)); + // } + } }, icon: const Icon( FontAwesome5.grin_tears, diff --git a/lib/views/home/profile/profile_captain.dart b/lib/views/home/profile/profile_captain.dart index 63e4a25..2f63b56 100644 --- a/lib/views/home/profile/profile_captain.dart +++ b/lib/views/home/profile/profile_captain.dart @@ -1,4 +1,5 @@ import 'package:sefer_driver/constant/style.dart'; +import 'package:sefer_driver/controller/functions/encrypt_decrypt.dart'; import 'package:sefer_driver/controller/home/payment/captain_wallet_controller.dart'; import 'package:sefer_driver/views/auth/captin/criminal_documents_page.dart'; import 'package:sefer_driver/views/widgets/elevated_btn.dart'; @@ -79,8 +80,9 @@ class ProfileCaptain extends StatelessWidget { ''), phoneNumber: controller.captainProfileData['phone'] ?? '', - email: - controller.captainProfileData['email'] ?? '', + email: encryptionHelper.decryptData( + controller.captainProfileData['email']) ?? + '', birthdate: controller.captainProfileData['birthdate'] ?? '', @@ -105,8 +107,8 @@ class ProfileCaptain extends StatelessWidget { expirationDate: controller .captainProfileData['expiration_date'] ?? '', - ratingCount: controller - .captainProfileData['ratingCount'] ?? + ratingCount: int.parse(controller + .captainProfileData['ratingCount']) ?? 0, ratingDriver: controller .captainProfileData['ratingDriver'] != @@ -116,7 +118,9 @@ class ProfileCaptain extends StatelessWidget { .toString()) ?? 0 : null, - age: controller.captainProfileData['age'] ?? 0, + age: int.parse( + controller.captainProfileData['age']) ?? + 0, ), ), ],