25-1/28/1
This commit is contained in:
@@ -2,6 +2,7 @@ import 'dart:io';
|
||||
|
||||
import 'package:SEFER/constant/box_name.dart';
|
||||
import 'package:SEFER/controller/auth/login_controller.dart';
|
||||
import 'package:SEFER/controller/functions/encrypt_decrypt.dart';
|
||||
import 'package:SEFER/main.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
@@ -164,9 +165,11 @@ class GoogleSignInHelper {
|
||||
static Future<void> _handleSignUp(GoogleSignInAccount user) async {
|
||||
// Store driver information
|
||||
box.write(BoxName.passengerID, user.id);
|
||||
box.write(BoxName.email, user.email);
|
||||
box.write(BoxName.name, user.displayName);
|
||||
box.write(BoxName.passengerPhotoUrl, user.photoUrl);
|
||||
box.write(BoxName.email, encryptionHelper.encryptData(user.email));
|
||||
box.write(BoxName.name,
|
||||
encryptionHelper.encryptData(user.displayName.toString()));
|
||||
box.write(BoxName.passengerPhotoUrl,
|
||||
encryptionHelper.encryptData(user.photoUrl.toString()));
|
||||
|
||||
// Perform any additional sign-up tasks or API calls here
|
||||
// For example, you can send the user data to your server for registration
|
||||
|
||||
@@ -6,6 +6,7 @@ import 'package:SEFER/controller/firebase/firbase_messge.dart';
|
||||
import 'package:SEFER/controller/functions/add_error.dart';
|
||||
import 'package:SEFER/views/auth/login_page.dart';
|
||||
import 'package:SEFER/views/auth/sms_verfy_page.dart';
|
||||
import 'package:SEFER/views/widgets/mydialoug.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:SEFER/constant/box_name.dart';
|
||||
@@ -16,6 +17,7 @@ import 'package:SEFER/views/home/map_page_passenger.dart';
|
||||
import 'package:location/location.dart';
|
||||
|
||||
import '../../print.dart';
|
||||
import '../functions/encrypt_decrypt.dart';
|
||||
import '../functions/package_info.dart';
|
||||
|
||||
class LoginController extends GetxController {
|
||||
@@ -106,41 +108,56 @@ class LoginController extends GetxController {
|
||||
box.write(BoxName.validity, d['validity']);
|
||||
box.write(BoxName.isInstall, d['isInstall'] ?? 'none');
|
||||
box.write(BoxName.isGiftToken, d['isGiftToken'] ?? 'none');
|
||||
box.write(BoxName.inviteCode, d['inviteCode'] ?? 'none');
|
||||
box.write(
|
||||
BoxName.inviteCode,
|
||||
encryptionHelper.decryptData(d['inviteCode'].toString()) ??
|
||||
'none');
|
||||
|
||||
var token = await CRUD().get(link: AppLink.getTokens, payload: {
|
||||
'passengerID': box.read(BoxName.passengerID).toString()
|
||||
});
|
||||
if (token != 'failure') {
|
||||
if (jsonDecode(token)['data'][0]['token'] !=
|
||||
if (encryptionHelper.decryptData(
|
||||
jsonDecode(token)['data'][0]['token'].toString()) !=
|
||||
box.read(BoxName.tokenFCM)) {
|
||||
Get.put(FirebaseMessagesController()).sendNotificationToDriverMAP(
|
||||
'token change'.tr,
|
||||
'change device'.tr,
|
||||
jsonDecode(token)['data'][0]['token'].toString(),
|
||||
[],
|
||||
'cancel.wav',
|
||||
);
|
||||
MyDialog().getDialog('change device'.tr, 'token change'.tr,
|
||||
() async {
|
||||
List<Future> updatetoken = [
|
||||
CRUD().post(
|
||||
link: "${AppLink.server}/ride/firebase/add.php",
|
||||
payload: {
|
||||
'token': box.read(BoxName.tokenFCM),
|
||||
'passengerID': box.read(BoxName.passengerID).toString()
|
||||
}),
|
||||
CRUD().post(
|
||||
link:
|
||||
"${AppLink.seferAlexandriaServer}/ride/firebase/add.php",
|
||||
payload: {
|
||||
'token': box.read(BoxName.tokenFCM),
|
||||
'passengerID': box.read(BoxName.passengerID).toString()
|
||||
}),
|
||||
CRUD().post(
|
||||
link: "${AppLink.seferGizaServer}/ride/firebase/add.php",
|
||||
payload: {
|
||||
'token': box.read(BoxName.tokenFCM),
|
||||
'passengerID': box.read(BoxName.passengerID).toString()
|
||||
}),
|
||||
];
|
||||
// cameras = await availableCameras();
|
||||
await Future.wait(updatetoken);
|
||||
Get.put(FirebaseMessagesController())
|
||||
.sendNotificationToDriverMAP(
|
||||
'token change'.tr,
|
||||
'change device'.tr,
|
||||
encryptionHelper.decryptData(
|
||||
jsonDecode(token)['data'][0]['token'].toString()),
|
||||
[],
|
||||
'cancel.wav',
|
||||
);
|
||||
});
|
||||
|
||||
Future.delayed(const Duration(seconds: 1));
|
||||
await CRUD().post(
|
||||
link: "${AppLink.server}/ride/firebase/add.php",
|
||||
payload: {
|
||||
'token': box.read(BoxName.tokenFCM),
|
||||
'passengerID': box.read(BoxName.passengerID).toString()
|
||||
});
|
||||
CRUD().post(
|
||||
link:
|
||||
"${AppLink.seferAlexandriaServer}/ride/firebase/add.php",
|
||||
payload: {
|
||||
'token': box.read(BoxName.tokenFCM),
|
||||
'passengerID': box.read(BoxName.passengerID).toString()
|
||||
});
|
||||
CRUD().post(
|
||||
link: "${AppLink.seferGizaServer}/ride/firebase/add.php",
|
||||
payload: {
|
||||
'token': box.read(BoxName.tokenFCM),
|
||||
'passengerID': box.read(BoxName.passengerID).toString()
|
||||
});
|
||||
|
||||
Get.defaultDialog(
|
||||
title: 'Device Change Detected'.tr,
|
||||
middleText:
|
||||
@@ -158,11 +175,14 @@ class LoginController extends GetxController {
|
||||
}
|
||||
} // Logging to check if inviteCode is written correctly
|
||||
|
||||
if (box.read(BoxName.inviteCode).toString() != 'none' &&
|
||||
if (d['inviteCode'] != 'none' &&
|
||||
d['inviteCode'] != null &&
|
||||
// box.read(BoxName.inviteCode).toString() != 'none' &&
|
||||
box.read(BoxName.isInstall).toString() != '1') {
|
||||
await CRUD()
|
||||
.post(link: AppLink.updatePassengersInvitation, payload: {
|
||||
"inviteCode": box.read(BoxName.inviteCode).toString(),
|
||||
"inviteCode": encryptionHelper
|
||||
.encryptData(box.read(BoxName.inviteCode).toString()),
|
||||
"passengerID": box.read(BoxName.passengerID).toString(),
|
||||
});
|
||||
Get.defaultDialog(
|
||||
@@ -174,7 +194,7 @@ class LoginController extends GetxController {
|
||||
try {
|
||||
CRUD().post(link: AppLink.addPassengersPromo, payload: {
|
||||
"promoCode":
|
||||
'S-${box.read(BoxName.name).toString().split(' ')[0]}',
|
||||
'S-${encryptionHelper.decryptData(box.read(BoxName.name)).toString().split(' ')[0]}',
|
||||
"amount": '25',
|
||||
"passengerID": box.read(BoxName.passengerID).toString(),
|
||||
"description": 'promo first'
|
||||
|
||||
@@ -5,7 +5,7 @@ import 'dart:math';
|
||||
import 'package:SEFER/constant/colors.dart';
|
||||
import 'package:SEFER/controller/auth/login_controller.dart';
|
||||
import 'package:SEFER/controller/functions/add_error.dart';
|
||||
import 'package:SEFER/controller/local/phone_intel/phone_number.dart';
|
||||
import 'package:SEFER/controller/functions/encrypt_decrypt.dart';
|
||||
import 'package:SEFER/views/home/map_page_passenger.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
@@ -143,7 +143,7 @@ class RegisterController extends GetxController {
|
||||
var responseChecker = await CRUD().post(
|
||||
link: AppLink.checkPhoneNumberISVerfiedPassenger,
|
||||
payload: {
|
||||
'phone_number': phoneNumber,
|
||||
'phone_number': encryptionHelper.encryptData(phoneNumber),
|
||||
'email': box.read(BoxName.email),
|
||||
},
|
||||
);
|
||||
@@ -156,7 +156,8 @@ class RegisterController extends GetxController {
|
||||
Get.snackbar('Phone number is verified before'.tr, '',
|
||||
backgroundColor: AppColor.greenColor);
|
||||
box.write(BoxName.isVerified, '1');
|
||||
box.write(BoxName.phone, phoneNumber);
|
||||
box.write(
|
||||
BoxName.phone, encryptionHelper.encryptData(phoneNumber));
|
||||
Get.offAll(const MapPagePassenger());
|
||||
} else {
|
||||
await sendOtp(phoneNumber, randomNumber, isEgyptianNumber,
|
||||
@@ -192,29 +193,34 @@ class RegisterController extends GetxController {
|
||||
// Trim any leading or trailing whitespace from the phone number
|
||||
phoneNumber = phoneNumber.trim();
|
||||
var dd = await CRUD().post(link: AppLink.sendVerifyOtpMessage, payload: {
|
||||
'phone_number': phoneNumber,
|
||||
'token': otp.toString(),
|
||||
'phone_number': encryptionHelper.encryptData(phoneNumber),
|
||||
'token': encryptionHelper.encryptData(otp.toString()),
|
||||
});
|
||||
Log.print('dd: ${dd}');
|
||||
if (isEgyptian) {
|
||||
await CRUD().post(link: AppLink.updatePhoneInvalidSMSPassenger, payload: {
|
||||
"phone_number": Get.find<RegisterController>().phoneController.text
|
||||
"phone_number": encryptionHelper
|
||||
.encryptData(Get.find<RegisterController>().phoneController.text)
|
||||
});
|
||||
box.write(BoxName.phoneDriver, phoneController.text);
|
||||
var nameParts = box.read(BoxName.name).toString().split(' ');
|
||||
box.write(
|
||||
BoxName.phone, encryptionHelper.encryptData(phoneController.text));
|
||||
var nameParts = encryptionHelper
|
||||
.decryptData(box.read(BoxName.name))
|
||||
.toString()
|
||||
.split(' ');
|
||||
var firstName = nameParts.isNotEmpty ? nameParts[0] : 'unknown';
|
||||
var lastName = nameParts.length > 1 ? nameParts[1] : 'unknown';
|
||||
|
||||
var payload = {
|
||||
'id': box.read(BoxName.passengerID),
|
||||
'phone': phoneController.text,
|
||||
'phone': encryptionHelper.decryptData(phoneController.text),
|
||||
'email': box.read(BoxName.email),
|
||||
'password': 'unknown',
|
||||
'gender': 'unknown',
|
||||
'password': encryptionHelper.encryptData('unknown'),
|
||||
'gender': encryptionHelper.encryptData('unknown'),
|
||||
'birthdate': '2002-01-01',
|
||||
'site': box.read(BoxName.passengerPhotoUrl) ?? 'unknown',
|
||||
'first_name': firstName,
|
||||
'last_name': lastName,
|
||||
'first_name': encryptionHelper.encryptData(firstName),
|
||||
'last_name': encryptionHelper.encryptData(lastName),
|
||||
};
|
||||
|
||||
var res1 = await CRUD().post(
|
||||
@@ -223,18 +229,24 @@ class RegisterController extends GetxController {
|
||||
);
|
||||
|
||||
if (res1 != 'failure') {
|
||||
await CRUD().post(
|
||||
link: '${AppLink.seferAlexandriaServer}/auth/signup.php',
|
||||
payload: payload,
|
||||
);
|
||||
await CRUD().post(
|
||||
link: '${AppLink.seferGizaServer}/auth/signup.php',
|
||||
payload: payload,
|
||||
);
|
||||
if (AppLink.seferAlexandriaServer != AppLink.seferCairoServer) {
|
||||
List<Future> signUp = [
|
||||
CRUD().post(
|
||||
link: '${AppLink.seferAlexandriaServer}/auth/signup.php',
|
||||
payload: payload,
|
||||
),
|
||||
CRUD().post(
|
||||
link: '${AppLink.seferGizaServer}/auth/signup.php',
|
||||
payload: payload,
|
||||
)
|
||||
];
|
||||
await Future.wait(signUp);
|
||||
}
|
||||
|
||||
box.write(BoxName.isVerified, '1');
|
||||
box.write(BoxName.isFirstTime, '0');
|
||||
box.write(BoxName.phone, phoneController.text);
|
||||
box.write(
|
||||
BoxName.phone, encryptionHelper.encryptData(phoneController.text));
|
||||
|
||||
Get.put(LoginController()).loginUsingCredentials(
|
||||
box.read(BoxName.passengerID).toString(),
|
||||
@@ -257,19 +269,23 @@ class RegisterController extends GetxController {
|
||||
try {
|
||||
if (formKey3.currentState!.validate()) {
|
||||
var res = await CRUD().post(link: AppLink.verifyOtpMessage, payload: {
|
||||
'phone_number': phoneController.text,
|
||||
'token': verifyCode.text.toString(),
|
||||
'phone_number': encryptionHelper.encryptData(phoneController.text),
|
||||
'token': encryptionHelper.encryptData(verifyCode.text.toString()),
|
||||
});
|
||||
|
||||
if (res != 'failure') {
|
||||
box.write(BoxName.phoneDriver, phoneController.text);
|
||||
var nameParts = box.read(BoxName.name).toString().split(' ');
|
||||
box.write(BoxName.phone,
|
||||
encryptionHelper.encryptData(phoneController.text));
|
||||
var nameParts = encryptionHelper
|
||||
.decryptData(box.read(BoxName.name))
|
||||
.toString()
|
||||
.split(' ');
|
||||
var firstName = nameParts.isNotEmpty ? nameParts[0] : 'unknown';
|
||||
var lastName = nameParts.length > 1 ? nameParts[1] : 'unknown';
|
||||
|
||||
var payload = {
|
||||
'id': box.read(BoxName.passengerID),
|
||||
'phone': phoneController.text,
|
||||
'phone': encryptionHelper.decryptData(phoneController.text),
|
||||
'email': box.read(BoxName.email),
|
||||
'password': 'unknown',
|
||||
'gender': 'unknown',
|
||||
@@ -285,18 +301,24 @@ class RegisterController extends GetxController {
|
||||
);
|
||||
|
||||
if (res1 != 'failure') {
|
||||
await CRUD().post(
|
||||
link: '${AppLink.seferAlexandriaServer}/auth/signup.php',
|
||||
payload: payload,
|
||||
);
|
||||
await CRUD().post(
|
||||
link: '${AppLink.seferGizaServer}/auth/signup.php',
|
||||
payload: payload,
|
||||
);
|
||||
if (AppLink.seferAlexandriaServer != AppLink.seferCairoServer) {
|
||||
List<Future> signUp = [
|
||||
CRUD().post(
|
||||
link: '${AppLink.seferAlexandriaServer}/auth/signup.php',
|
||||
payload: payload,
|
||||
),
|
||||
CRUD().post(
|
||||
link: '${AppLink.seferGizaServer}/auth/signup.php',
|
||||
payload: payload,
|
||||
)
|
||||
];
|
||||
await Future.wait(signUp);
|
||||
}
|
||||
|
||||
box.write(BoxName.isVerified, '1');
|
||||
box.write(BoxName.isFirstTime, '0');
|
||||
box.write(BoxName.phone, phoneController.text);
|
||||
box.write(BoxName.phone,
|
||||
encryptionHelper.decryptData(phoneController.text));
|
||||
|
||||
Get.put(LoginController()).loginUsingCredentials(
|
||||
box.read(BoxName.passengerID).toString(),
|
||||
|
||||
@@ -6,6 +6,7 @@ import 'package:http/http.dart' as http;
|
||||
import '../../constant/box_name.dart';
|
||||
import '../../constant/links.dart';
|
||||
import '../../main.dart';
|
||||
import '../functions/encrypt_decrypt.dart';
|
||||
|
||||
class TokenController extends GetxController {
|
||||
bool isloading = false;
|
||||
@@ -22,7 +23,8 @@ class TokenController extends GetxController {
|
||||
'Basic ${base64Encode(utf8.encode(basicAuthCredentials.toString()))}',
|
||||
},
|
||||
body: {
|
||||
'token': box.read(BoxName.tokenFCM.toString()),
|
||||
'token':
|
||||
encryptionHelper.decryptData(box.read(BoxName.tokenFCM.toString())),
|
||||
'passengerID': box.read(BoxName.passengerID).toString()
|
||||
},
|
||||
);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
import 'package:SEFER/controller/functions/encrypt_decrypt.dart';
|
||||
import 'package:firebase_messaging/firebase_messaging.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
@@ -93,7 +94,8 @@ class FirebaseMessagesController extends GetxController {
|
||||
|
||||
Future getToken() async {
|
||||
fcmToken.getToken().then((token) {
|
||||
box.write(BoxName.tokenFCM, token);
|
||||
box.write(
|
||||
BoxName.tokenFCM, encryptionHelper.encryptData(token.toString()));
|
||||
});
|
||||
|
||||
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
|
||||
@@ -166,7 +168,8 @@ class FirebaseMessagesController extends GetxController {
|
||||
'token change'.tr, 'token change'.tr, 'cancel');
|
||||
}
|
||||
GoogleSignInHelper.signOut();
|
||||
} else if (message.notification!.title! == 'Driver Is Going To Passenger'.tr) {
|
||||
} else if (message.notification!.title! ==
|
||||
'Driver Is Going To Passenger'.tr) {
|
||||
Get.find<MapPassengerController>().isDriverInPassengerWay = true;
|
||||
Get.find<MapPassengerController>().update();
|
||||
if (Platform.isAndroid) {
|
||||
|
||||
@@ -30,7 +30,9 @@ class CRUD {
|
||||
'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials.toString()))}',
|
||||
},
|
||||
);
|
||||
|
||||
// Log.print('req: ${response.request}');
|
||||
// Log.print('response: ${response.body}');
|
||||
// Log.print('payload: ${payload}');
|
||||
// if (response.statusCode == 200) {
|
||||
var jsonData = jsonDecode(response.body);
|
||||
if (jsonData['status'] == 'success') {
|
||||
@@ -40,6 +42,46 @@ class CRUD {
|
||||
return jsonData['status'];
|
||||
}
|
||||
|
||||
Future<dynamic> post({
|
||||
required String link,
|
||||
Map<String, dynamic>? payload,
|
||||
}) async {
|
||||
var url = Uri.parse(link);
|
||||
try {
|
||||
var response = await http.post(
|
||||
url,
|
||||
body: payload,
|
||||
headers: {
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
'Authorization':
|
||||
'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials))}',
|
||||
},
|
||||
);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
try {
|
||||
var jsonData = jsonDecode(response.body);
|
||||
|
||||
if (jsonData['status'] == 'success') {
|
||||
return jsonData;
|
||||
} else {
|
||||
return jsonData['status'];
|
||||
}
|
||||
} catch (e) {
|
||||
addError(e.toString(), 'crud().post');
|
||||
return 'failure'; // Return a recognizable failure string for JSON errors
|
||||
}
|
||||
} else {
|
||||
addError(
|
||||
'Non-200 response code: ${response.statusCode}', 'crud().post');
|
||||
return 'failure'; // Handle unexpected status codes as failures
|
||||
}
|
||||
} catch (e) {
|
||||
addError('HTTP request error: $e', 'crud().post');
|
||||
return 'failure'; // Handle HTTP request errors as failures
|
||||
}
|
||||
}
|
||||
|
||||
Future<dynamic> getTokenParent({
|
||||
required String link,
|
||||
Map<String, dynamic>? payload,
|
||||
@@ -298,45 +340,6 @@ class CRUD {
|
||||
// return response.statusCode;
|
||||
// }
|
||||
// }
|
||||
Future<dynamic> post({
|
||||
required String link,
|
||||
Map<String, dynamic>? payload,
|
||||
}) async {
|
||||
var url = Uri.parse(link);
|
||||
try {
|
||||
var response = await http.post(
|
||||
url,
|
||||
body: payload,
|
||||
headers: {
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
'Authorization':
|
||||
'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials))}',
|
||||
},
|
||||
);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
try {
|
||||
var jsonData = jsonDecode(response.body);
|
||||
|
||||
if (jsonData['status'] == 'success') {
|
||||
return jsonData;
|
||||
} else {
|
||||
return jsonData['status'];
|
||||
}
|
||||
} catch (e) {
|
||||
addError(e.toString(), 'crud().post');
|
||||
return 'failure'; // Return a recognizable failure string for JSON errors
|
||||
}
|
||||
} else {
|
||||
addError(
|
||||
'Non-200 response code: ${response.statusCode}', 'crud().post');
|
||||
return 'failure'; // Handle unexpected status codes as failures
|
||||
}
|
||||
} catch (e) {
|
||||
addError('HTTP request error: $e', 'crud().post');
|
||||
return 'failure'; // Handle HTTP request errors as failures
|
||||
}
|
||||
}
|
||||
|
||||
Future<dynamic> postPayMob({
|
||||
required String link,
|
||||
|
||||
52
lib/controller/functions/encrypt_decrypt.dart
Normal file
52
lib/controller/functions/encrypt_decrypt.dart
Normal file
@@ -0,0 +1,52 @@
|
||||
import 'package:encrypt/encrypt.dart' as encrypt;
|
||||
import 'package:flutter/foundation.dart';
|
||||
|
||||
import '../../env/env.dart';
|
||||
|
||||
var secretKey = Env.keyOfApp
|
||||
.toString()
|
||||
.split('XrXlBl')[0]; // Must be 16 characters for AES-128
|
||||
String initializationVector = Env.initializationVector; // Must be 16 characters
|
||||
final encryptionHelper = EncryptionHelper(
|
||||
secretKey: secretKey,
|
||||
initializationVector: initializationVector,
|
||||
);
|
||||
|
||||
class EncryptionHelper {
|
||||
final encrypt.Key key;
|
||||
final encrypt.IV iv;
|
||||
|
||||
EncryptionHelper(
|
||||
{required String secretKey, required String initializationVector})
|
||||
: key = encrypt.Key.fromUtf8(secretKey),
|
||||
iv = encrypt.IV.fromUtf8(initializationVector);
|
||||
|
||||
// Initialize the helper
|
||||
|
||||
/// Encrypts the given plain text
|
||||
String encryptData(String plainText) {
|
||||
try {
|
||||
final encrypter = encrypt.Encrypter(encrypt.AES(key,
|
||||
mode: encrypt.AESMode.cbc)); // Explicitly use CBC mode
|
||||
final encrypted = encrypter.encrypt(plainText, iv: iv);
|
||||
return encrypted.base64;
|
||||
} catch (e) {
|
||||
debugPrint('Encryption Error: $e');
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
/// Decrypts the given encrypted text
|
||||
String decryptData(String encryptedText) {
|
||||
try {
|
||||
final encrypter = encrypt.Encrypter(encrypt.AES(key,
|
||||
mode: encrypt.AESMode.cbc)); // Explicitly use CBC mode
|
||||
final encrypted = encrypt.Encrypted.fromBase64(encryptedText);
|
||||
final decrypted = encrypter.decrypt(encrypted, iv: iv);
|
||||
return decrypted;
|
||||
} catch (e) {
|
||||
debugPrint('Decryption Error: $e');
|
||||
return '';
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,64 +0,0 @@
|
||||
// import 'dart:async';
|
||||
// import 'package:background_location/background_location.dart';
|
||||
// import 'package:get/get.dart';
|
||||
// import 'package:permission_handler/permission_handler.dart';
|
||||
|
||||
// class LocationBackgroundController extends GetxController {
|
||||
// @override
|
||||
// void onInit() {
|
||||
// super.onInit();
|
||||
// requestLocationPermission();
|
||||
// configureBackgroundLocation();
|
||||
// }
|
||||
|
||||
// Future<void> requestLocationPermission() async {
|
||||
// var status = await Permission.locationAlways.status;
|
||||
// if (!status.isGranted) {
|
||||
// await Permission.locationAlways.request();
|
||||
// }
|
||||
// }
|
||||
|
||||
// Future<void> configureBackgroundLocation() async {
|
||||
// await BackgroundLocation.setAndroidNotification(
|
||||
// title: "Background Location",
|
||||
// message: "Tracking location...",
|
||||
// icon: "@mipmap/ic_launcher",
|
||||
// );
|
||||
|
||||
// BackgroundLocation.setAndroidConfiguration(1000);
|
||||
// BackgroundLocation.startLocationService();
|
||||
// BackgroundLocation.getLocationUpdates((location) {
|
||||
// // Handle location updates here
|
||||
// });
|
||||
// }
|
||||
|
||||
// startBackLocation() async {
|
||||
// Timer.periodic(const Duration(seconds: 5), (timer) {
|
||||
// getBackgroundLocation();
|
||||
// });
|
||||
// }
|
||||
|
||||
// getBackgroundLocation() async {
|
||||
// var status = await Permission.locationAlways.status;
|
||||
// if (status.isGranted) {
|
||||
// await BackgroundLocation.startLocationService(
|
||||
// distanceFilter: 20, forceAndroidLocationManager: true);
|
||||
// BackgroundLocation.setAndroidConfiguration(
|
||||
// Duration.microsecondsPerSecond); // Set interval to 5 seconds
|
||||
|
||||
// BackgroundLocation.getLocationUpdates((location1) {
|
||||
// Latitude: ${location1.latitude.toString()}
|
||||
// Longitude: ${location1.longitude.toString()}
|
||||
// Altitude: ${location1.altitude.toString()}
|
||||
// Accuracy: ${location1.accuracy.toString()}
|
||||
// Bearing: ${location1.bearing.toString()}
|
||||
// Speed: ${location1.speed.toString()}
|
||||
|
||||
|
||||
// ''');
|
||||
// });
|
||||
// } else {
|
||||
// await Permission.locationAlways.request();
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
@@ -1,10 +1,13 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:SEFER/constant/box_name.dart';
|
||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||
|
||||
import '../../constant/links.dart';
|
||||
import '../../main.dart';
|
||||
import '../../print.dart';
|
||||
import 'crud.dart';
|
||||
import 'encrypt_decrypt.dart';
|
||||
|
||||
class SecureStorage {
|
||||
final FlutterSecureStorage _storage = const FlutterSecureStorage();
|
||||
@@ -28,31 +31,47 @@ const List<String> keysToFetch = [
|
||||
];
|
||||
|
||||
class AppInitializer {
|
||||
// final FlutterSecureStorage _storage = const FlutterSecureStorage();
|
||||
List<Map<String, dynamic>> links = [];
|
||||
|
||||
Future<void> initializeApp() async {
|
||||
// Check if app is running for the first time
|
||||
|
||||
// Loop through the keys and fetch their values
|
||||
for (String key in keysToFetch) {
|
||||
try {
|
||||
String? value = await getKey(key); // Fetch from server
|
||||
if (value != null) {
|
||||
await box.write(key, value); // Save securely
|
||||
}
|
||||
} catch (e) {}
|
||||
}
|
||||
await getKey();
|
||||
await getAIKey('FCM_PRIVATE_KEY');
|
||||
}
|
||||
|
||||
Future<String?> getKey(String key) async {
|
||||
getAIKey(String key) async {
|
||||
var res =
|
||||
await CRUD().get(link: AppLink.getapiKey, payload: {"keyName": key});
|
||||
if (res != 'failure') {
|
||||
try {
|
||||
var data = jsonDecode(res)['message'];
|
||||
return data[key]?.toString();
|
||||
} catch (e) {}
|
||||
var d = jsonDecode(res)['message'];
|
||||
storage.write(key: 'FCM_PRIVATE_KEY', value: d[key].toString());
|
||||
// return d[key].toString();
|
||||
} else {}
|
||||
}
|
||||
|
||||
Future<void> getKey() async {
|
||||
try {
|
||||
var res =
|
||||
await CRUD().get(link: AppLink.getLocationAreaLinks, payload: {});
|
||||
// Log.print('res: ${res}');
|
||||
if (res != 'failure') {
|
||||
links = List<Map<String, dynamic>>.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');
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import 'dart:math' as math;
|
||||
import 'dart:ui';
|
||||
import 'package:SEFER/constant/univeries_polygon.dart';
|
||||
import 'package:SEFER/controller/firebase/local_notification.dart';
|
||||
import 'package:SEFER/controller/functions/encrypt_decrypt.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter_confetti/flutter_confetti.dart';
|
||||
import 'package:vector_math/vector_math.dart' show radians, degrees;
|
||||
@@ -542,12 +543,12 @@ class MapPassengerController extends GetxController {
|
||||
|
||||
void sendSMS(String to) async {
|
||||
// Get the driver's phone number.
|
||||
String driverPhone =
|
||||
dataCarsLocationByPassenger['message'][carsOrder]['phone'].toString();
|
||||
String driverPhone = encryptionHelper.decryptData(
|
||||
dataCarsLocationByPassenger['message'][carsOrder]['phone'].toString());
|
||||
|
||||
// Format the message.
|
||||
String message =
|
||||
'Hi! This is ${box.read(BoxName.name)}.\n I am using ${box.read(AppInformation.appName)} to ride with $passengerName as the driver. $passengerName \nis driving a $model\n with license plate $licensePlate.\n I am currently located at $passengerLocation.\n If you need to reach me, please contact the driver directly at\n\n $driverPhone.';
|
||||
'Hi! This is ${encryptionHelper.decryptData(box.read(BoxName.name).toString().split(' ')[0]).toString()}.\n I am using ${box.read(AppInformation.appName)} to ride with $passengerName as the driver. $passengerName \nis driving a $model\n with license plate $licensePlate.\n I am currently located at $passengerLocation.\n If you need to reach me, please contact the driver directly at\n\n $driverPhone.';
|
||||
|
||||
// Launch the URL to send the SMS.
|
||||
launchCommunication('sms', to, message);
|
||||
@@ -559,7 +560,7 @@ class MapPassengerController extends GetxController {
|
||||
|
||||
// Format the message.
|
||||
String message =
|
||||
'${'${'Hi! This is'.tr} ${box.read(BoxName.name)}.\n${' I am using'.tr}'} ${AppInformation.appName}${' to ride with'.tr} $passengerName${' as the driver.'.tr} $passengerName \n${'is driving a '.tr}$model\n${' with license plate '.tr}$licensePlate.\n${' I am currently located at '.tr} https://www.google.com/maps/place/${passengerLocation.latitude},${passengerLocation.longitude}.\n${' If you need to reach me, please contact the driver directly at'.tr}\n\n $driverPhone.';
|
||||
'${'${'Hi! This is'.tr} ${encryptionHelper.decryptData(box.read(BoxName.name).toString().split(' ')[0]).toString()}.\n${' I am using'.tr}'} ${AppInformation.appName}${' to ride with'.tr} $passengerName${' as the driver.'.tr} $passengerName \n${'is driving a '.tr}$model\n${' with license plate '.tr}$licensePlate.\n${' I am currently located at '.tr} https://www.google.com/maps/place/${passengerLocation.latitude},${passengerLocation.longitude}.\n${' If you need to reach me, please contact the driver directly at'.tr}\n\n $driverPhone.';
|
||||
|
||||
// Launch the URL to send the WhatsApp message.
|
||||
launchCommunication('whatsapp', to, message);
|
||||
@@ -1958,7 +1959,7 @@ class MapPassengerController extends GetxController {
|
||||
FirebaseMessagesController().sendNotificationToDriverMAP(
|
||||
'Order'.tr,
|
||||
endNameAddress,
|
||||
driverData['token'].toString(),
|
||||
encryptionHelper.decryptData(driverData['token'].toString()),
|
||||
body,
|
||||
'order.wav');
|
||||
}
|
||||
@@ -1979,13 +1980,15 @@ class MapPassengerController extends GetxController {
|
||||
distance.toStringAsFixed(2),
|
||||
driverData['driver_id'].toString(),
|
||||
box.read(BoxName.passengerID).toString(),
|
||||
box.read(BoxName.name).toString(),
|
||||
box.read(BoxName.tokenFCM).toString(),
|
||||
box.read(BoxName.phone).toString(),
|
||||
encryptionHelper
|
||||
.decryptData(box.read(BoxName.name).toString().split(' ')[0])
|
||||
.toString(),
|
||||
encryptionHelper.decryptData(box.read(BoxName.tokenFCM).toString()),
|
||||
encryptionHelper.decryptData(box.read(BoxName.phone).toString()),
|
||||
durationToPassenger.toStringAsFixed(0) ?? '120',
|
||||
distanceByPassenger.toString() ?? '2000',
|
||||
paymentController.isWalletChecked.toString(),
|
||||
driverData['token'].toString(),
|
||||
encryptionHelper.decryptData(driverData['token'].toString()),
|
||||
durationToPassenger.toString(),
|
||||
rideId.toString(),
|
||||
rideTimerBegin.toString(),
|
||||
@@ -2183,16 +2186,19 @@ class MapPassengerController extends GetxController {
|
||||
var response = jsonDecode(res);
|
||||
Log.print('getUpdatedRideForDriverApply: $response');
|
||||
driverId = response['data']['driver_id'];
|
||||
driverPhone = response['data']['phone'];
|
||||
driverPhone = encryptionHelper.decryptData(response['data']['phone']);
|
||||
driverCarMake = response['data']['make'];
|
||||
model = response['data']['model'];
|
||||
colorHex = response['data']['color_hex'];
|
||||
carColor = response['data']['color'];
|
||||
make = response['data']['make'];
|
||||
licensePlate = response['data']['car_plate'];
|
||||
passengerName = response['data']['passengerName'];
|
||||
driverName = response['data']['driverName'].toString();
|
||||
driverToken = response['data']['token'];
|
||||
licensePlate =
|
||||
encryptionHelper.decryptData(response['data']['car_plate']);
|
||||
passengerName =
|
||||
encryptionHelper.decryptData(response['data']['passengerName']);
|
||||
driverName = encryptionHelper
|
||||
.decryptData(response['data']['driverName'].toString());
|
||||
driverToken = encryptionHelper.decryptData(response['data']['token']);
|
||||
// Log.print('driverToken updated: $driverToken');
|
||||
carYear = response['data']['year'];
|
||||
driverRate = response['data']['ratingDriver'].toString();
|
||||
@@ -2420,31 +2426,69 @@ class MapPassengerController extends GetxController {
|
||||
}
|
||||
|
||||
String getLocationArea(double latitude, double longitude) {
|
||||
if (latitude >= 29.918901 &&
|
||||
latitude <= 30.198857 &&
|
||||
longitude >= 31.215009 &&
|
||||
longitude <= 31.532186) {
|
||||
box.write(BoxName.serverChosen, AppLink.seferCairoServer);
|
||||
final locations = box.read(BoxName.locationName) ?? [];
|
||||
for (final location in locations) {
|
||||
final locationData = location as Map<String, dynamic>;
|
||||
|
||||
return 'Cairo';
|
||||
} else if (latitude >= 29.904975 &&
|
||||
latitude <= 30.143372 &&
|
||||
longitude >= 30.787030 &&
|
||||
longitude <= 31.215009) {
|
||||
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 'Cairo';
|
||||
// Debugging: Print location data
|
||||
// print('Location Data: $locationData');
|
||||
|
||||
// Convert string values to double
|
||||
final minLatitude =
|
||||
double.tryParse(locationData['min_latitude'].toString()) ?? 0.0;
|
||||
final maxLatitude =
|
||||
double.tryParse(locationData['max_latitude'].toString()) ?? 0.0;
|
||||
final minLongitude =
|
||||
double.tryParse(locationData['min_longitude'].toString()) ?? 0.0;
|
||||
final maxLongitude =
|
||||
double.tryParse(locationData['max_longitude'].toString()) ?? 0.0;
|
||||
|
||||
// Debugging: Print converted values
|
||||
print(
|
||||
'Converted Values: minLatitude=$minLatitude, maxLatitude=$maxLatitude, minLongitude=$minLongitude, maxLongitude=$maxLongitude');
|
||||
|
||||
if (latitude >= minLatitude &&
|
||||
latitude <= maxLatitude &&
|
||||
longitude >= minLongitude &&
|
||||
longitude <= maxLongitude) {
|
||||
box.write(BoxName.serverChosen,
|
||||
encryptionHelper.decryptData(locationData['server_link']));
|
||||
// Log.print(
|
||||
// 'locationData----server_link: ${encryptionHelper.decryptData(locationData['server_link'])}');
|
||||
return locationData['name'];
|
||||
}
|
||||
}
|
||||
|
||||
// Default case
|
||||
box.write(BoxName.serverChosen, AppLink.seferCairoServer);
|
||||
return 'Cairo';
|
||||
}
|
||||
|
||||
// if (latitude >= 29.918901 &&
|
||||
// latitude <= 30.198857 &&
|
||||
// longitude >= 31.215009 &&
|
||||
// longitude <= 31.532186) {
|
||||
// box.write(BoxName.serverChosen, AppLink.seferCairoServer);
|
||||
|
||||
// return 'Cairo';
|
||||
// } else if (latitude >= 29.904975 &&
|
||||
// latitude <= 30.143372 &&
|
||||
// longitude >= 30.787030 &&
|
||||
// longitude <= 31.215009) {
|
||||
// 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 'Cairo';
|
||||
// }
|
||||
// }
|
||||
|
||||
Future<bool> getCarsLocationByPassengerAndReloadMarker(
|
||||
String carType, int boundIncreaseStep) async {
|
||||
// if (statusRide == 'wait') {
|
||||
@@ -2565,7 +2609,7 @@ class MapPassengerController extends GetxController {
|
||||
_getIconForCar(json),
|
||||
);
|
||||
|
||||
driversToken.add(json['token']);
|
||||
driversToken.add(encryptionHelper.decryptData(json['token']));
|
||||
}
|
||||
|
||||
// Add fake car markers
|
||||
@@ -2845,7 +2889,7 @@ class MapPassengerController extends GetxController {
|
||||
style: AppStyle.title,
|
||||
),
|
||||
Text(
|
||||
"Send Sefer app to him".tr,
|
||||
"Send SPEED app to him".tr,
|
||||
style: AppStyle.title.copyWith(color: AppColor.greenColor),
|
||||
)
|
||||
],
|
||||
@@ -2859,7 +2903,7 @@ class MapPassengerController extends GetxController {
|
||||
: '+962${box.read(BoxName.sosPhonePassenger)}';
|
||||
var message = '''Dear ,
|
||||
|
||||
🚀 I have just started an exciting trip and I would like to share the details of my journey and my current location with you in real-time! Please download the SEFER app. It will allow you to view my trip details and my latest location.
|
||||
🚀 I have just started an exciting trip and I would like to share the details of my journey and my current location with you in real-time! Please download the SPEED app. It will allow you to view my trip details and my latest location.
|
||||
|
||||
👉 Download link:
|
||||
Android [https://play.google.com/store/apps/details?id=com.mobileapp.store.ride]
|
||||
@@ -2867,7 +2911,7 @@ class MapPassengerController extends GetxController {
|
||||
|
||||
I look forward to keeping you close during my adventure!
|
||||
|
||||
SEFER ,'''
|
||||
SPEED ,'''
|
||||
.tr;
|
||||
launchCommunication('whatsapp', phone, message);
|
||||
}),
|
||||
@@ -2877,7 +2921,7 @@ class MapPassengerController extends GetxController {
|
||||
Get.back();
|
||||
}));
|
||||
} else if (res1['status'] == 'success') {
|
||||
var tokenParent = res1['data'][0]['token'];
|
||||
var tokenParent = encryptionHelper.decryptData(res1['data'][0]['token']);
|
||||
Get.snackbar("The invitation was sent successfully".tr, '',
|
||||
backgroundColor: AppColor.greenColor);
|
||||
FirebaseMessagesController().sendNotificationToPassengerToken(
|
||||
@@ -3160,7 +3204,7 @@ class MapPassengerController extends GetxController {
|
||||
} else {
|
||||
isMainBottomMenuMap = !isMainBottomMenuMap;
|
||||
mainBottomMenuMapHeight =
|
||||
isMainBottomMenuMap == true ? Get.height * .2 : Get.height * .7;
|
||||
isMainBottomMenuMap == true ? Get.height * .2 : Get.height * .6;
|
||||
isWayPointSheet = false;
|
||||
if (heightMenuBool == true) {
|
||||
getDrawerMenu();
|
||||
@@ -3646,18 +3690,6 @@ class MapPassengerController extends GetxController {
|
||||
update();
|
||||
}
|
||||
|
||||
// LatLngBounds calculateBounds(double lat, double lng, double radiusInMeters) {
|
||||
// const double earthRadius = 6378137.0; // Earth's radius in meters
|
||||
|
||||
// double latDelta = radiusInMeters / earthRadius * (180 / pi);
|
||||
// double lngDelta =
|
||||
// radiusInMeters / (earthRadius * cos(pi * lat / 180)) * (180 / pi);
|
||||
|
||||
// return LatLngBounds(
|
||||
// southwest: LatLng(lat - latDelta, lng - lngDelta),
|
||||
// northeast: LatLng(lat + latDelta, lng + lngDelta),
|
||||
// );
|
||||
// }
|
||||
LatLngBounds calculateBounds(double lat, double lng, double radiusInMeters) {
|
||||
const double earthRadius = 6378137.0; // Earth's radius in meters
|
||||
|
||||
@@ -4018,8 +4050,14 @@ class MapPassengerController extends GetxController {
|
||||
late LatLngBounds boundsData;
|
||||
late String startNameAddress = '';
|
||||
late String endNameAddress = '';
|
||||
List<Map<String, dynamic>> stopPoints = [];
|
||||
void removeStop(Map<String, dynamic> stop) {
|
||||
stopPoints.remove(stop);
|
||||
update(); // Trigger a rebuild of the UI
|
||||
}
|
||||
|
||||
getDirectionMap(String origin, destination) async {
|
||||
getDirectionMap(String origin, destination,
|
||||
[List<String> waypoints = const []]) async {
|
||||
isLoading = true;
|
||||
update();
|
||||
remainingTime = 25; //to make cancel every call
|
||||
@@ -4039,7 +4077,10 @@ class MapPassengerController extends GetxController {
|
||||
update();
|
||||
var url =
|
||||
('${AppLink.googleMapsLink}directions/json?&language=${box.read(BoxName.lang) ?? 'ar'}&avoid=tolls|ferries&destination=$destination&origin=$origin&key=${AK.mapAPIKEY}');
|
||||
|
||||
if (waypoints.isNotEmpty) {
|
||||
String formattedWaypoints = waypoints.join('|');
|
||||
url += '&waypoints=$formattedWaypoints';
|
||||
}
|
||||
var response = await CRUD().getGoogleApi(link: url, payload: {});
|
||||
data = response['routes'][0]['legs'];
|
||||
box.remove(BoxName.tripData);
|
||||
@@ -5095,7 +5136,7 @@ class MapPassengerController extends GetxController {
|
||||
await FirebaseMessagesController().sendNotificationToDriverMAP(
|
||||
'OrderVIP',
|
||||
rideId.toString(),
|
||||
driver['token'].toString(),
|
||||
encryptionHelper.decryptData(driver['token'].toString()),
|
||||
[
|
||||
id,
|
||||
rideId,
|
||||
@@ -5103,13 +5144,15 @@ class MapPassengerController extends GetxController {
|
||||
passengerLocation.latitude.toString(),
|
||||
startNameAddress.toString(),
|
||||
passengerLocation.longitude.toString(),
|
||||
box.read(BoxName.name).toString(),
|
||||
encryptionHelper
|
||||
.decryptData(box.read(BoxName.name).toString().split(' ')[0])
|
||||
.toString(),
|
||||
box.read(BoxName.passengerID).toString(),
|
||||
box.read(BoxName.phone).toString(),
|
||||
box.read(BoxName.email).toString(),
|
||||
box.read(BoxName.passengerPhotoUrl).toString(),
|
||||
box.read(BoxName.tokenFCM).toString(),
|
||||
driver['token'].toString(),
|
||||
encryptionHelper.decryptData(driver['token'].toString()),
|
||||
],
|
||||
'order.wav');
|
||||
if (response['message'] == "Trip updated successfully") {
|
||||
|
||||
@@ -4,6 +4,7 @@ import 'package:SEFER/constant/box_name.dart';
|
||||
import 'package:SEFER/constant/colors.dart';
|
||||
import 'package:SEFER/constant/links.dart';
|
||||
import 'package:SEFER/controller/functions/crud.dart';
|
||||
import 'package:SEFER/controller/functions/encrypt_decrypt.dart';
|
||||
import 'package:SEFER/controller/payment/payment_controller.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_contacts/flutter_contacts.dart';
|
||||
@@ -38,9 +39,9 @@ class InviteController extends GetxController {
|
||||
Future<void> shareDriverCode() async {
|
||||
if (driverCouponCode != null) {
|
||||
final String shareText = '''
|
||||
Join SEFER as a driver using my referral code!
|
||||
Join SWIFTI as a driver using my referral code!
|
||||
Use code: $driverCouponCode
|
||||
Download the SEFER Driver app now and earn rewards!
|
||||
Download the SWIFTI Driver app now and earn rewards!
|
||||
''';
|
||||
await Share.share(shareText);
|
||||
}
|
||||
@@ -49,9 +50,9 @@ Download the SEFER Driver app now and earn rewards!
|
||||
Future<void> sharePassengerCode() async {
|
||||
if (couponCode != null) {
|
||||
final String shareText = '''
|
||||
Get a discount on your first SEFER ride!
|
||||
Get a discount on your first SWIFTI ride!
|
||||
Use my referral code: $couponCode
|
||||
Download the SEFER app now and enjoy your ride!
|
||||
Download the SWIFTI app now and enjoy your ride!
|
||||
''';
|
||||
await Share.share(shareText);
|
||||
}
|
||||
@@ -175,12 +176,17 @@ Download the SEFER app now and enjoy your ride!
|
||||
|
||||
void onSelectPassengerInvitation(int index) async {
|
||||
MyDialog().getDialog(
|
||||
driverInvitationDataToPassengers[index]['countOfInvitDriver'] < 2
|
||||
? '${'When'.tr} ${driverInvitationDataToPassengers[index]['passengerName']} ${"complete, you can claim your gift".tr} '
|
||||
int.parse(driverInvitationDataToPassengers[index]['countOfInvitDriver']
|
||||
.toString()) <
|
||||
2
|
||||
? '${'When'.tr} ${encryptionHelper.decryptData(driverInvitationDataToPassengers[index]['passengerName'].toString())} ${"complete, you can claim your gift".tr} '
|
||||
: 'You deserve the gift'.tr,
|
||||
'${driverInvitationDataToPassengers[index]['passengerName']} ${driverInvitationDataToPassengers[index]['countOfInvitDriver']} / 2 ${'Trip'.tr}',
|
||||
'${encryptionHelper.decryptData(driverInvitationDataToPassengers[index]['passengerName'].toString())} ${driverInvitationDataToPassengers[index]['countOfInvitDriver'].toString()} / 2 ${'Trip'.tr}',
|
||||
() async {
|
||||
if (driverInvitationDataToPassengers[index]['countOfInvitDriver'] < 2) {
|
||||
if (int.parse(driverInvitationDataToPassengers[index]
|
||||
['countOfInvitDriver']
|
||||
.toString()) <
|
||||
2) {
|
||||
Get.back();
|
||||
} else {
|
||||
// Claim the gift if 100 trips are completed
|
||||
@@ -264,14 +270,14 @@ Download the SEFER app now and enjoy your ride!
|
||||
var response =
|
||||
await CRUD().post(link: AppLink.addInvitationPassenger, payload: {
|
||||
"driverId": box.read(BoxName.passengerID),
|
||||
"inviterPassengerPhone": '+2$phoneNumber'
|
||||
"inviterPassengerPhone": encryptionHelper.encryptData('+2$phoneNumber')
|
||||
});
|
||||
|
||||
if (response != 'failure') {
|
||||
var d = response;
|
||||
Get.snackbar('Success', 'Invite sent successfully'.tr);
|
||||
|
||||
String message = '${'*SEFER APP CODE*'.tr}\n\n'
|
||||
String message = '${'*SWIFTI APP CODE*'.tr}\n\n'
|
||||
'${"Use this code in registration".tr}\n'
|
||||
'${"To get a gift for both".tr}\n\n'
|
||||
'${"The period of this code is 1 hour".tr}\n\n'
|
||||
|
||||
@@ -16,6 +16,7 @@ import 'package:get/get.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
|
||||
import '../functions/crud.dart';
|
||||
import '../functions/encrypt_decrypt.dart';
|
||||
|
||||
class VipOrderController extends GetxController {
|
||||
RxBool isLoading = false.obs;
|
||||
@@ -286,7 +287,12 @@ class VipWaittingPage extends StatelessWidget {
|
||||
? MyElevatedButton(
|
||||
title: "Click here to begin your trip\n\nGood luck, "
|
||||
.tr +
|
||||
box.read(BoxName.name).toString(),
|
||||
encryptionHelper
|
||||
.decryptData(box
|
||||
.read(BoxName.name)
|
||||
.toString()
|
||||
.split(' ')[0])
|
||||
.toString(),
|
||||
kolor: AppColor.greenColor,
|
||||
onPressed: () {
|
||||
final mapPassengerController =
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -21,6 +21,7 @@ import '../../constant/links.dart';
|
||||
import '../../main.dart';
|
||||
import '../../print.dart';
|
||||
import '../functions/crud.dart';
|
||||
import '../functions/encrypt_decrypt.dart';
|
||||
import '../functions/toast.dart';
|
||||
import 'paymob/paymob_wallet.dart';
|
||||
|
||||
@@ -264,7 +265,10 @@ class PaymentController extends GetxController {
|
||||
merchantDisplayName: AppInformation.appName,
|
||||
billingDetails: BillingDetails(
|
||||
name: box.read(BoxName.nameDriver) == null
|
||||
? box.read(BoxName.name).toString()
|
||||
? encryptionHelper
|
||||
.decryptData(
|
||||
box.read(BoxName.name).toString().split(' ')[0])
|
||||
.toString()
|
||||
: box.read(BoxName.nameDriver).toString(),
|
||||
email: box.read(BoxName.emailDriver) == null
|
||||
? box.read(BoxName.email).toString()
|
||||
|
||||
@@ -7,6 +7,7 @@ import 'package:url_launcher/url_launcher.dart';
|
||||
import '../../constant/api_key.dart';
|
||||
import '../../main.dart';
|
||||
import '../../print.dart';
|
||||
import '../functions/encrypt_decrypt.dart';
|
||||
|
||||
class PaymobManager extends GetxController {
|
||||
String authanticationToken1 = "";
|
||||
@@ -134,10 +135,14 @@ class PaymobManager extends GetxController {
|
||||
"amount_cents": amount,
|
||||
"currency": currency,
|
||||
"billing_data": {
|
||||
"first_name": box.read(BoxName.name),
|
||||
"last_name": box.read(BoxName.name),
|
||||
"email": box.read(BoxName.email),
|
||||
"phone_number": box.read(BoxName.phone),
|
||||
"first_name": encryptionHelper
|
||||
.decryptData(box.read(BoxName.name).toString().split(' ')[0])
|
||||
.toString(),
|
||||
"last_name": encryptionHelper
|
||||
.decryptData(box.read(BoxName.name).toString().split(' ')[1])
|
||||
.toString(),
|
||||
"email": encryptionHelper.decryptData(box.read(BoxName.email)),
|
||||
"phone_number": encryptionHelper.decryptData(box.read(BoxName.phone)),
|
||||
"apartment": "NA",
|
||||
"floor": "NA",
|
||||
"street": "NA",
|
||||
|
||||
@@ -4,6 +4,8 @@ import 'package:dio/dio.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:webview_flutter/webview_flutter.dart';
|
||||
|
||||
import '../../functions/encrypt_decrypt.dart';
|
||||
|
||||
class PaymobResponse {
|
||||
bool success;
|
||||
String? transactionID;
|
||||
@@ -224,9 +226,13 @@ class PaymobBillingData {
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
"email": box.read(BoxName.email) ?? box.read(BoxName.emailDriver),
|
||||
"first_name": box.read(BoxName.name) ?? box.read(BoxName.nameDriver),
|
||||
"last_name": box.read(BoxName.name) ?? box.read(BoxName.nameDriver),
|
||||
"phone_number": box.read(BoxName.phone) ?? box.read(BoxName.phoneDriver),
|
||||
"first_name": encryptionHelper
|
||||
.decryptData(box.read(BoxName.name).toString().split(' ')[0])
|
||||
.toString(),
|
||||
"last_name": encryptionHelper
|
||||
.decryptData(box.read(BoxName.name).toString().split(' ')[1])
|
||||
.toString(),
|
||||
"phone_number": encryptionHelper.decryptData(box.read(BoxName.phone)),
|
||||
"apartment": apartment ?? "NA",
|
||||
"floor": floor ?? "NA",
|
||||
"building": building ?? "NA",
|
||||
|
||||
@@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:webview_flutter/webview_flutter.dart';
|
||||
|
||||
import '../../../print.dart';
|
||||
import '../../functions/encrypt_decrypt.dart';
|
||||
|
||||
class PaymobResponseWallet {
|
||||
final bool success;
|
||||
@@ -267,9 +268,14 @@ class PaymobBillingDataWallet {
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
"email": box.read(BoxName.email) ?? box.read(BoxName.emailDriver),
|
||||
"first_name": box.read(BoxName.name) ?? box.read(BoxName.nameDriver),
|
||||
"last_name": box.read(BoxName.name) ?? box.read(BoxName.nameDriver),
|
||||
"phone_number": box.read(BoxName.phoneWallet),
|
||||
"first_name": encryptionHelper
|
||||
.decryptData(box.read(BoxName.name).toString().split(' ')[0])
|
||||
.toString(),
|
||||
"last_name": encryptionHelper
|
||||
.decryptData(box.read(BoxName.name).toString().split(' ')[1])
|
||||
.toString(),
|
||||
"phone_number":
|
||||
encryptionHelper.decryptData(box.read(BoxName.phoneWallet)),
|
||||
"apartment": apartment ?? "NA",
|
||||
"floor": floor ?? "NA",
|
||||
"building": building ?? "NA",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:SEFER/constant/colors.dart';
|
||||
import 'package:SEFER/controller/functions/encrypt_decrypt.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
@@ -73,10 +74,11 @@ class ProfileController extends GetxController {
|
||||
Get.back();
|
||||
await updateColumn({
|
||||
'id': box.read(BoxName.passengerID),
|
||||
columnName: txtController.text,
|
||||
columnName: encryptionHelper.encryptData(txtController.text),
|
||||
});
|
||||
if (columnName == 'first_name') {
|
||||
box.write(BoxName.name, txtController.text);
|
||||
box.write(BoxName.name,
|
||||
encryptionHelper.encryptData(txtController.text));
|
||||
}
|
||||
|
||||
txtController.clear();
|
||||
|
||||
Reference in New Issue
Block a user