This commit is contained in:
Hamza-Ayed
2024-07-06 19:24:10 +03:00
21 changed files with 262 additions and 275 deletions

View File

@@ -69,77 +69,6 @@ class AK {
static final String payMobOutUserName =
a.r(a.r(a.r(Env.payMobOutUserName, cn), cC), cs);
/////////////
///////////
static final String keyOfApp = a.r(a.r(a.r(Env.keyOfApp, cn), cC), cs);
}
//
// import '../controller/functions/encrypt.dart';
// import '../env/env.dart';
// import 'char_map.dart';
// import 'credential.dart';
//
// class AK {
// static final AC a = AC();
// static final String publishableKey =
// KeyEncryption.decryptKey(Env.stripePublishableKe);
// static final String secretKey = KeyEncryption.decryptKey(Env.secretKey);
// static final String basicAuthCredentials =
// KeyEncryption.decryptKey(Env.basicAuthCredentials);
// static final String accountSIDTwillo =
// KeyEncryption.decryptKey(Env.accountSIDTwillo);
// static final String serverAPI = KeyEncryption.decryptKey(Env.serverAPI);
// static final String mapAPIKEY = KeyEncryption.decryptKey(Env.mapAPIKEY);
// static final String twilloRecoveryCode =
// KeyEncryption.decryptKey(Env.twilloRecoveryCode);
// static final String authTokenTwillo =
// KeyEncryption.decryptKey(Env.authTokenTwillo);
// static final String chatGPTkey = KeyEncryption.decryptKey(Env.chatGPTkey);
// static final String transactionCloude =
// KeyEncryption.decryptKey(Env.transactionCloude);
// static final String visionApi = KeyEncryption.decryptKey(Env.visionApi);
// static final String chatGPTkeySefer =
// KeyEncryption.decryptKey(Env.chatGPTkeySefer);
// static final String chatGPTkeySeferNew =
// KeyEncryption.decryptKey(Env.chatGPTkeySeferNew);
// static final String serverPHP = Env.serverPHP;
// static final String llamaKey = KeyEncryption.decryptKey(Env.llamaKey);
// static final String cohere = KeyEncryption.decryptKey(Env.cohere);
// static final String claudeAiAPI = KeyEncryption.decryptKey(Env.claudeAiAPI);
// static final String payPalClientId =
// KeyEncryption.decryptKey(Env.payPalClientId);
// static final String payPalSecret = KeyEncryption.decryptKey(Env.payPalSecret);
// static final String geminiApi = KeyEncryption.decryptKey(Env.geminiApi);
// static final String agoraAppId = KeyEncryption.decryptKey(Env.agoraAppId);
// static final String agoraAppCertificate =
// KeyEncryption.decryptKey(Env.agoraAppCertificate);
// static final String payPalClientIdLive =
// KeyEncryption.decryptKey(Env.payPalClientIdLive);
// static final String payPalSecretLive =
// KeyEncryption.decryptKey(Env.payPalSecretLive);
// static final String integrationIdPayMob =
// KeyEncryption.decryptKey(Env.integrationIdPayMob);
// static final String passwordPayMob =
// KeyEncryption.decryptKey(Env.passwordPayMob);
// static final String usernamePayMob =
// KeyEncryption.decryptKey(Env.usernamePayMob);
// static final String payMobApikey = KeyEncryption.decryptKey(Env.payMobApikey);
// static final String integrationIdPayMobWallet =
// KeyEncryption.decryptKey(Env.integrationIdPayMobWallet);
// static final String smsPasswordEgypt =
// KeyEncryption.decryptKey(Env.smsPasswordEgypt);
// static final String ocpApimSubscriptionKey = Env.ocpApimSubscriptionKey;
// static final String chatGPTkeySeferNew4 =
// KeyEncryption.decryptKey(Env.chatGPTkeySeferNew4);
// static final String anthropicAIkeySeferNew =
// KeyEncryption.decryptKey(Env.anthropicAIkeySeferNew);
// static final String llama3Key = KeyEncryption.decryptKey(Env.llama3Key);
// static final String payMobOutClientSecrret =
// KeyEncryption.decryptKey(Env.payMobOutClientSecrret);
// static final String payMobOutClient_id =
// KeyEncryption.decryptKey(Env.payMobOutClient_id);
// static final String payMobOutPassword =
// KeyEncryption.decryptKey(Env.payMobOutPassword);
// static final String payMobOutUserName =
// KeyEncryption.decryptKey(Env.payMobOutUserName);
// }

View File

@@ -10,7 +10,9 @@ class BoxName {
static const String phoneVerified = "phoneVerified";
static const String carPlate = "carPlate";
static const String statusDriverLocation = "statusDriverLocation";
static const String rideStatus = "rideStatus";
static const String password = "password";
static const String isVerified = '0';
static const String arrivalTime = "arrivalTime";
static const String locationPermission = "locationPermission";
static const String passwordDriver = "passwordDriver";

View File

@@ -1,17 +1,5 @@
import 'package:SEFER/env/env.dart';
import '../env/env.dart';
Map<String, String> cn = {
"0": "3",
"1": "7",
"2": "1",
"3": "9",
"4": "0",
"5": "5",
"6": "2",
"7": "6",
"8": "4",
"9": "8"
};
Map<String, String> cs = {
"a": Env.a,
"b": Env.b,
@@ -68,3 +56,20 @@ Map<String, String> cC = {
"Y": Env.Y,
"Z": Env.Z
};
//
//
Map<String, String> cn = {
"0": "3",
"1": "7",
"2": "1",
"3": "9",
"4": "0",
"5": "5",
"6": "2",
"7": "6",
"8": "4",
"9": "8"
};

View File

@@ -1,3 +1,4 @@
import 'package:SEFER/constant/api_key.dart';
import 'package:SEFER/env/env.dart';
class AppLink {
@@ -112,6 +113,8 @@ class AppLink {
static String getCnMap = "$server/auth/cnMap.php";
static String updateApiKey = "$ride/apiKey/update.php";
static String deleteApiKey = "$ride/apiKey/delete.php";
static String checkPhoneNumberISVerfiedDriver =
"$auth/checkPhoneNumberISVerfiedDriver.php";
//-----------------Feed Back------------------
static String addFeedBack = "$ride/feedBack/add.php";

View File

@@ -14,6 +14,7 @@ import 'package:SEFER/main.dart';
import 'package:SEFER/views/auth/captin/login_captin.dart';
import 'package:SEFER/views/auth/captin/verify_email_captain.dart';
import '../../../constant/colors.dart';
import '../../../views/auth/captin/ai_page.dart';
import '../../../views/auth/captin/car_license_page.dart';
import '../../../views/home/Captin/home_captain/home_captin.dart';
@@ -86,16 +87,33 @@ class RegisterCaptainController extends GetxController {
update();
if (formKey3.currentState!.validate()) {
if (box.read(BoxName.countryCode) == 'Egypt') {
await CRUD().post(link: AppLink.sendVerifyOtpMessage, payload: {
var responseCheker = await CRUD()
.post(link: AppLink.checkPhoneNumberISVerfiedDriver, payload: {
'phone_number': '+2${phoneController.text}',
'token_code': randomNumber.toString(),
});
var d = jsonDecode(responseCheker);
if (d['message'][0]['is_verified'].toString() == '1') {
Get.snackbar('Phone number is verified before'.tr, '',
backgroundColor: AppColor.greenColor);
box.write(BoxName.isVerified, '1');
box.write(BoxName.phone, '+2${phoneController.text}');
await Get.put(LoginDriverController()).loginUsingCredentials(
box.read(BoxName.driverID).toString(),
box.read(BoxName.emailDriver).toString(),
);
} else {
await CRUD().post(link: AppLink.sendVerifyOtpMessage, payload: {
'phone_number': '+2${phoneController.text}',
'token_code': randomNumber.toString(),
});
await smsEgyptController.sendSmsEgypt(
phoneController.text.toString(), randomNumber.toString());
isSent = true;
isLoading = false;
update();
await smsEgyptController.sendSmsEgypt(
phoneController.text.toString(), randomNumber.toString());
isSent = true;
isLoading = false;
update();
}
}
}
}

View File

@@ -243,6 +243,7 @@ class FirebaseMessagesController extends GetxController {
confirm: MyElevatedButton(
title: 'Ok'.tr,
onPressed: () {
box.write(BoxName.rideStatus, 'Cancel');
Get.offAll(HomeCaptain());
}));
}

View File

@@ -27,9 +27,6 @@ class CRUD {
'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials.toString()))}',
},
);
print(response.request);
print(response.body);
print(response.statusCode);
// if (response.statusCode == 200) {
var jsonData = jsonDecode(response.body);
if (jsonData['status'] == 'success') {
@@ -101,7 +98,6 @@ class CRUD {
await arabicTextExtractByVisionAndAI(imagePath: imagePath);
var json = jsonDecode(extractedString);
var textValues = extractTextFromLines(json);
print(textValues);
// await Get.put(AI()).geminiAiExtraction(prompt, textValues);
await Get.put(AI()).anthropicAI(textValues, prompt, imagePath);
}
@@ -134,8 +130,6 @@ class CRUD {
String imagePathFull =
'${AppLink.server}/card_image/$imagePath-${box.read(BoxName.driverID)}.jpg';
// print(box.read(BoxName.driverID));
// print(imagePathFull);
var request = http.Request('POST', Uri.parse(
// 'https://ocrhamza.cognitiveservices.azure.com/vision/v2.1/ocr?language=ar'));
// 'https://eastus.api.cognitive.microsoft.com/vision/v3.2/ocr'
@@ -146,7 +140,6 @@ class CRUD {
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
// print(await response.stream.bytesToString());
return await response.stream.bytesToString();
} else {}
}
@@ -224,9 +217,6 @@ class CRUD {
'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials))}',
},
);
print(response.request);
print(response.body);
// print(response.statusCode);
var jsonData = jsonDecode(response.body);
if (response.statusCode == 200) {
if (jsonData['status'] == 'success') {

View File

@@ -18,7 +18,10 @@ class KeyEncryption {
}
static String decryptKey(String encryptedKey) {
print('encryptedKey: ${AK.keyOfApp}');
final decoded = base64Decode(encryptedKey);
print('encryptedKey: $encryptedKey');
final iv = encrypt.IV(decoded.sublist(0, 16)); // استخراج التهيئة
final encrypted =
encrypt.Encrypted(decoded.sublist(16)); // استخراج النص المشفر

View File

@@ -12,6 +12,7 @@ import '../../constant/info.dart';
Future<void> checkForUpdate(BuildContext context) async {
final packageInfo = await PackageInfo.fromPlatform();
final currentVersion = packageInfo.buildNumber;
final version = packageInfo.version;
print('currentVersion is : $currentVersion');
// Fetch the latest version from your server
String latestVersion = await getPackageInfo();
@@ -24,7 +25,7 @@ Future<void> checkForUpdate(BuildContext context) async {
Future<String> getPackageInfo() async {
final response = await CRUD().get(link: AppLink.packageInfo, payload: {
"platform": Platform.isAndroid ? 'android' : 'ios',
"appName": AppInformation.appName,
"appName": AppInformation.appVersion,
});
if (response != 'failure') {
@@ -36,7 +37,7 @@ Future<String> getPackageInfo() async {
void showUpdateDialog(BuildContext context) {
final String storeUrl = Platform.isAndroid
? 'https://play.google.com/store/apps/details?id=com.sefer_driver'
: 'https://apps.apple.com/ae/app/sefer/id6458734951';
: 'https://apps.apple.com/ae/app/sefer-driver/id6502189302';
showCupertinoDialog(
context: context,
barrierDismissible: false,

View File

@@ -13,6 +13,7 @@ class SmsEgyptController extends GetxController {
var headers = {'Content-Type': 'application/json'};
Future<dynamic> sendSmsEgypt(String phone, otp) async {
print('password ==== ${AK.smsPasswordEgypt}');
var body = jsonEncode({
"username": AppInformation.appName,
"password": AK.smsPasswordEgypt, //'E)Pu=an/@Z',

View File

@@ -1,6 +1,7 @@
import 'dart:async';
import 'dart:convert';
import 'package:SEFER/controller/home/captin/home_captain_controller.dart';
import 'package:SEFER/views/widgets/mydialoug.dart';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:get/get.dart';
@@ -221,6 +222,7 @@ class MapDriverController extends GetxController {
'driverGoToPassengerTime': DateTime.now().toString(),
'status': 'Applied'
});
box.write(BoxName.rideStatus, 'Applied');
FirebaseMessagesController().sendNotificationToAnyWithoutData(
'DriverIsGoingToPassenger',
box.read(BoxName.name).toString(),
@@ -282,6 +284,7 @@ class MapDriverController extends GetxController {
remainingTimeInPassengerLocatioWait = 0;
timeWaitingPassenger = 0;
box.write(BoxName.statusDriverLocation, 'on');
box.write(BoxName.rideStatus, 'Begin'); //todo ride details
update();
await CRUD().post(link: AppLink.updateRides, payload: {
@@ -426,6 +429,12 @@ class MapDriverController extends GetxController {
}
void finishRideFromDriver() {
double distanceToDestination = Geolocator.distanceBetween(
latLngPassengerLocation.latitude,
latLngPassengerLocation.longitude,
Get.find<LocationController>().myLocation.latitude,
Get.find<LocationController>().myLocation.longitude,
);
Get.defaultDialog(
title: 'Are you sure to exit ride ?'.tr,
titleStyle: AppStyle.title,
@@ -434,8 +443,16 @@ class MapDriverController extends GetxController {
title: 'Ok'.tr,
kolor: AppColor.greenColor,
onPressed: () {
Get.back();
finishRideFromDriver1();
if (distanceToDestination > 1000) {
Get.back();
finishRideFromDriver1();
} else {
Get.back();
if (distanceToDestination < 150) {
// todo add scam from start point and dont move
}
MyDialog().getDialog('you are not moved yet !'.tr, '', () {});
}
}),
cancel: MyElevatedButton(
title: 'Cancel'.tr,
@@ -467,17 +484,12 @@ class MapDriverController extends GetxController {
}
void finishRideFromDriver1() async {
double distanceToDestination = Geolocator.distanceBetween(
latLngPassengerDestination.latitude,
latLngPassengerDestination.longitude,
Get.find<LocationController>().myLocation.latitude,
Get.find<LocationController>().myLocation.longitude,
);
// if (carType != 'Comfort' || carType != 'Free Ride') {
// if (distanceToDestination < 50) {
isRideFinished = true;
isRideStarted = false;
isPriceWindow = false;
box.write(BoxName.rideStatus, 'Finished');
totalCost = price < 30
? carType != 'Comfort' && carType != 'Mashwari' && carType != 'Lady'
? '20'
@@ -559,7 +571,6 @@ class MapDriverController extends GetxController {
'walletChecked': walletChecked
});
// Get.back();
// }
}
void cancelCheckRideFromPassenger() async {
@@ -599,7 +610,9 @@ class MapDriverController extends GetxController {
int durationOfRide = int.parse(durationOfRideValue);
update();
int infinity = 40000;
if (carType == 'Comfort' || carType == 'Mashwari') {
if (carType == 'Comfort' ||
carType == 'Mashwari' ||
carType == 'Rayeh Gai') {
durationOfRide = infinity;
update();
}
@@ -637,7 +650,7 @@ class MapDriverController extends GetxController {
remainingTimeTimerRideBegin = durationOfRide - i;
remainingTimeTimerRideBegin < 60 ? driverEndPage = 160 : 100;
updateMarker();
if (remainingTimeTimerRideBegin < 120) {
if (remainingTimeTimerRideBegin < 60) {
// to make driver available on last 2 minute in his trip
box.write(BoxName.statusDriverLocation, 'off');
}

View File

@@ -4,6 +4,7 @@ import 'package:SEFER/controller/auth/captin/login_captin_controller.dart';
import 'package:SEFER/views/home/on_boarding_page.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:package_info_plus/package_info_plus.dart';
import '../../constant/box_name.dart';
import '../../main.dart';
@@ -16,10 +17,23 @@ class SplashScreenController extends GetxController
late Animation<double> zoomInAnimation;
late Animation<double> zoomOutAnimation;
String packageInfo = '';
late String version = '1.5.48';
Future<void> checkForUpdate() async {
final packageInfo = await PackageInfo.fromPlatform();
final currentVersion = packageInfo.buildNumber;
final version1 = packageInfo.version;
print('currentVersion is : $currentVersion');
// Fetch the latest version from your server
version = version1.toString();
print('version: ${version}');
update();
}
@override
void onInit() {
super.onInit();
checkForUpdate();
animationController = AnimationController(
vsync: this,
duration: const Duration(seconds: 4),

View File

@@ -4,6 +4,8 @@ class MyTranslation extends Translations {
@override
Map<String, Map<String, String>> get keys => {
"ar": {
"don't start trip if not": "لا تبدأ الرحلة إذا لم",
"you are not moved yet !": "أنت لم تتحرك بعد!",
"Update Available": "تحديث متوفر",
"A new version of the app is available. Please update to the latest version.":
"تتوفر نسخة جديدة من التطبيق. يرجى التحديث إلى أحدث إصدار.",

View File

@@ -64,7 +64,14 @@ class SplashScreen extends StatelessWidget {
AppStyle.title.copyWith(color: AppColor.primaryColor),
speed: const Duration(milliseconds: 200),
),
], isRepeatingAnimation: true)
], isRepeatingAnimation: true),
const SizedBox(
height: 100,
),
Text(
splashScreenController.version.toString(),
style: AppStyle.title,
),
],
),
),

View File

@@ -1,3 +1,5 @@
import 'package:SEFER/constant/box_name.dart';
import 'package:SEFER/controller/home/captin/map_driver_controller.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
@@ -14,6 +16,7 @@ import '../../../../controller/functions/package_info.dart';
import '../../../../controller/home/captin/home_captain_controller.dart';
import '../../../../controller/home/captin/order_request_controller.dart';
import '../../../widgets/circle_container.dart';
import '../driver_map_page.dart';
import 'widget/connect.dart';
import 'widget/left_menu_map_captain.dart';
import '../../../../controller/home/payment/captain_wallet_controller.dart';
@@ -237,6 +240,43 @@ class HomeCaptain extends StatelessWidget {
// ),
// ),
leftMainMenuCaptainIcons(),
box.read(BoxName.rideStatus) == 'Applied' ||
box.read(BoxName.rideStatus) == 'Begin'
? Positioned(
bottom: Get.height * .2,
right: 6,
child: AnimatedContainer(
duration: const Duration(microseconds: 200),
width: homeCaptainController.widthMapTypeAndTraffic,
decoration: BoxDecoration(
border: Border.all(color: AppColor.blueColor),
color: AppColor.secondaryColor,
borderRadius: BorderRadius.circular(15)),
child: IconButton(
onPressed: () {
box.read(BoxName.rideStatus) == 'Applied'
? {
Get.to(() => PassengerLocationMapPage(),
arguments: box.read(BoxName.rideArguments)),
Get.find<MapDriverController>()
.driverGoToPassenger()
}
: {
Get.to(() => PassengerLocationMapPage(),
arguments: box.read(BoxName.rideArguments)),
Get.find<MapDriverController>()
.changeRideToBeginToPassenger()
};
},
icon: const Icon(
Icons.rice_bowl,
size: 29,
color: AppColor.blueColor,
),
),
),
)
: SizedBox()
// callPage(),
// Positioned(

View File

@@ -1,17 +1,12 @@
import 'package:SEFER/constant/box_name.dart';
import 'package:SEFER/main.dart';
import 'package:SEFER/views/home/Captin/driver_map_page.dart';
import 'package:flutter/material.dart';
import 'package:flutter_font_icons/flutter_font_icons.dart';
import 'package:get/get.dart';
import 'package:SEFER/controller/home/captin/home_captain_controller.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import '../../../../../constant/char_map.dart';
import '../../../../../constant/colors.dart';
import '../../../../../constant/credential.dart';
import '../../../../../controller/functions/encrypt.dart';
import '../../../../../controller/functions/launch.dart';
import '../../../../Rate/ride_calculate_driver.dart';
import '../../../../../controller/functions/location_controller.dart';
@@ -22,55 +17,60 @@ GetBuilder<HomeCaptainController> leftMainMenuCaptainIcons() {
left: 6,
child: Column(
children: [
AnimatedContainer(
duration: const Duration(microseconds: 200),
width: controller.widthMapTypeAndTraffic,
decoration: BoxDecoration(
border: Border.all(color: AppColor.blueColor),
color: AppColor.secondaryColor,
borderRadius: BorderRadius.circular(15)),
child: IconButton(
onPressed: () {
// AC credentials = AC();
String apiKey = 'maldev@2101hamzaayedseferegyptjo';
// String convertedStringN = credentials.c(
// credentials.c(credentials.c(apiKey, cs), cC), cn);
// print(convertedStringN);
// String retrievedStringS = credentials.r(
// credentials.r(credentials.r(convertedStringN, cn), cC),
// cs);
// print(retrievedStringS);
// //
// if (retrievedStringS == apiKey) {
// print('same');
// }
// AnimatedContainer(
// duration: const Duration(microseconds: 200),
// width: controller.widthMapTypeAndTraffic,
// decoration: BoxDecoration(
// border: Border.all(color: AppColor.blueColor),
// color: AppColor.secondaryColor,
// borderRadius: BorderRadius.circular(15)),
// child: IconButton(
// onPressed: () {
// // AC credentials = AC();
//
// // String apikey = AK.passwordPayMob;
// // String convertedStringN = credentials.c(
// // credentials.c(credentials.c(apikey, cs), cC), cn);
// // print(convertedStringN);
// // String retrievedStringS = credentials.r(
// // credentials.r(credentials.r(convertedStringN, cn), cC),
// // cs);
// // print(retrievedStringS);
// // //
// // if (retrievedStringS ==
// // 'apikey') {
// // print('same');
// // }
// key.forEach((key, apiKey) {
// // key.forEach((key, apiKey) {
// // Get.to(() => SmsSignupEgypt());
// // keys.forEach((key, apiKey) {
// // String retrievedStringS = credentials.r(
// // credentials.r(credentials.r(apiKey, cn), cC), cs);
// // String encryptedApiKey =
// // KeyEncryption.encryptKey(retrievedStringS);
// // print('$key=$encryptedApiKey');
// keys.forEach((key, apiKey) {
String encryptedApiKey = KeyEncryption.encryptKey(apiKey);
print('Encrypted API Key for : $encryptedApiKey');
// // String decryptedApiKey =
// // KeyEncryption.decryptKey(encryptedApiKey);
// // print('Decrypted API Key for : $decryptedApiKey');
String decryptedApiKey = KeyEncryption.decryptKey(
"Hsd7tLdt4ZsSRMCCs0xia2ct9O1jrJKyZu6pvh6MjL8qg6TkJ9FZCW4H/OqCkMjtokBOTdTX0P2sASLTcTxBVA==");
print('Decrypted API Key for : $decryptedApiKey');
if (decryptedApiKey == apiKey) {
print('Keys match for ');
} else {
print('Keys do not match for ');
}
// });
},
icon: const Icon(
FontAwesome.map_signs,
size: 24,
color: Colors.black,
)),
),
const SizedBox(
height: 5,
),
// // if (decryptedApiKey == apiKey) {
// // print('Keys match for ');
// // } else {
// // print('Keys do not match for ');
// // }
// // });
// },
// icon: const Icon(
// FontAwesome.map_signs,
// size: 24,
// color: Colors.black,
// )),
// ),
// const SizedBox(
// height: 5,
// ),
AnimatedContainer(
duration: const Duration(microseconds: 200),
width: controller.widthMapTypeAndTraffic,

View File

@@ -223,8 +223,7 @@ class PassengerInfoWindow extends StatelessWidget {
height: 5,
),
SizedBox(
width: Get.width *
.5,
width: 200,
child: Row(
mainAxisAlignment:
MainAxisAlignment
@@ -235,8 +234,8 @@ class PassengerInfoWindow extends StatelessWidget {
.formKey2,
child:
SizedBox(
width: Get.width *
.4,
width:
160,
child: MyTextForm(
controller:
controller.messageToPassenger,
@@ -248,7 +247,7 @@ class PassengerInfoWindow extends StatelessWidget {
onPressed:
() {
FirebaseMessagesController().sendNotificationToAnyWithoutData(
'message From Driver',
'message From Driver'.tr,
controller.messageToPassenger.text,
controller.tokenPassenger,
'ding.wav');
@@ -413,7 +412,7 @@ class PassengerInfoWindow extends StatelessWidget {
titleStyle:
AppStyle.title,
middleText:
'don\'t start trip if not '
"don't start trip if not"
.tr,
middleTextStyle:
AppStyle.title,