This commit is contained in:
Hamza-Ayed
2024-07-21 09:48:56 +03:00
parent 6889985afc
commit 485928d8c1
16 changed files with 860 additions and 385 deletions

View File

@@ -55,8 +55,8 @@ android {
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
minSdkVersion 23 minSdkVersion 23
targetSdkVersion 34 targetSdkVersion 34
versionCode 50 versionCode 51
versionName '1.5.50' versionName '1.5.51'
// manifestPlaceholders = [mapsApiKey: 'android/app/src/main/AndroidManifest.xml'] // manifestPlaceholders = [mapsApiKey: 'android/app/src/main/AndroidManifest.xml']
} }

View File

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

View File

@@ -129,6 +129,8 @@ class AppLink {
//-----------------RegisrationCar------------------ //-----------------RegisrationCar------------------
static String addRegisrationCar = "$ride/RegisrationCar/add.php"; static String addRegisrationCar = "$ride/RegisrationCar/add.php";
static String getRegisrationCar = "$ride/RegisrationCar/get.php"; static String getRegisrationCar = "$ride/RegisrationCar/get.php";
static String selectDriverAndCarForMishwariTrip =
"$ride/RegisrationCar/selectDriverAndCarForMishwariTrip.php";
static String updateRegisrationCar = "$ride/RegisrationCar/update.php"; static String updateRegisrationCar = "$ride/RegisrationCar/update.php";
//-----------------DriverOrder------------------ //-----------------DriverOrder------------------

View File

@@ -29,7 +29,7 @@ class CRUD {
); );
print(response.request); print(response.request);
print(response.body); print(response.body);
print(payload); // print(payload);
// if (response.statusCode == 200) { // if (response.statusCode == 200) {
var jsonData = jsonDecode(response.body); var jsonData = jsonDecode(response.body);
if (jsonData['status'] == 'success') { if (jsonData['status'] == 'success') {

View File

@@ -23,13 +23,6 @@ class ImageController extends GetxController {
image = File(pickedImage!.path); image = File(pickedImage!.path);
croppedFile = await ImageCropper().cropImage( croppedFile = await ImageCropper().cropImage(
sourcePath: image!.path, sourcePath: image!.path,
aspectRatioPresets: [
CropAspectRatioPreset.square,
CropAspectRatioPreset.ratio3x2,
CropAspectRatioPreset.original,
CropAspectRatioPreset.ratio4x3,
CropAspectRatioPreset.ratio16x9
],
uiSettings: [ uiSettings: [
AndroidUiSettings( AndroidUiSettings(
toolbarTitle: 'Cropper'.tr, toolbarTitle: 'Cropper'.tr,

View File

@@ -24,7 +24,9 @@ import '../../constant/links.dart';
import '../../constant/table_names.dart'; import '../../constant/table_names.dart';
import '../../main.dart'; import '../../main.dart';
import '../../models/model/locations.dart'; import '../../models/model/locations.dart';
import '../../print.dart';
import '../../views/home/map_widget.dart/car_details_widget_to_go.dart'; import '../../views/home/map_widget.dart/car_details_widget_to_go.dart';
import '../../views/home/map_widget.dart/select_driver_mishwari.dart';
import '../../views/widgets/elevated_btn.dart'; import '../../views/widgets/elevated_btn.dart';
import '../firebase/firbase_messge.dart'; import '../firebase/firbase_messge.dart';
import '../functions/audio_record1.dart'; import '../functions/audio_record1.dart';
@@ -2815,6 +2817,72 @@ class MapPassengerController extends GetxController {
update(); update();
} }
Future selectDriverAndCarForMishwariTrip() async {
var res = await CRUD()
.get(link: AppLink.selectDriverAndCarForMishwariTrip, payload: {});
if (res != 'failure') {
var d = jsonDecode(res);
return d['message'];
} else {
return 'No driver available now try later time\nthanks for using our app'
.tr;
}
}
final Rx<DateTime> selectedDateTime = DateTime.now().obs;
void updateDateTime(DateTime newDateTime) {
selectedDateTime.value = newDateTime;
}
Future mishwariOption() async {
// isBottomSheetShown = false;
update();
// add dialoug for select driver and car
List driversForMishwari = await selectDriverAndCarForMishwariTrip();
Future.delayed(Duration.zero);
Log.print('driversForMishwari: ${driversForMishwari}');
Get.to(() => CupertinoDriverListWidget(
drivers: driversForMishwari,
));
// add dialoug to select date and time
// changeCashConfirmPageShown();
}
Future<void> saveTripData(
Map<String, dynamic> driver, DateTime tripDateTime) async {
try {
// Prepare trip data
Map<String, dynamic> tripData = {
'driver_id': driver['id'],
'passenger_id': box.read(BoxName.passengerID),
'trip_datetime': tripDateTime.toIso8601String(),
// Add other necessary trip details
};
// Send data to server
var response =
await CRUD().post(link: AppLink.addAdminUser, payload: tripData);
if (response != 'failure') {
// Trip saved successfully
Get.snackbar('Success'.tr, 'Trip booked successfully'.tr);
// Set up local notification
// await setLocalNotification(tripDateTime);
// Send notification to driver
// await FirebaseMessagesController().sendNotificationToDriverMAP();
} else {
throw Exception('Failed to save trip');
}
} catch (e) {
Get.snackbar('Error'.tr, 'Failed to book trip: $e'.tr);
}
}
initilizeGetStorage() async { initilizeGetStorage() async {
if (box.read(BoxName.addWork) == null) { if (box.read(BoxName.addWork) == null) {
box.write(BoxName.addWork, 'addWork'); box.write(BoxName.addWork, 'addWork');

View File

@@ -606,17 +606,28 @@ iOS [https://getapp.cc/app/6458734951]
"اِذْهَب إِلَى الْخُطْوَة الْتَّالِيَة\naاسْتِخْرَاج رُخْصَة السَّيَّارَة.", "اِذْهَب إِلَى الْخُطْوَة الْتَّالِيَة\naاسْتِخْرَاج رُخْصَة السَّيَّارَة.",
"Name in arabic": "الاِسْم بِاللُّغَة الْعَرَبِيَّة", "Name in arabic": "الاِسْم بِاللُّغَة الْعَرَبِيَّة",
"Drivers License Class": "فَئَة رُخْصَة الْقِيَادَة", "Drivers License Class": "فَئَة رُخْصَة الْقِيَادَة",
"National Number": "الرَّقْم الْقَوْمِي",
"Address": "الْعُنْوَان",
"Date of Birth": "تَارِيخ الْمِيلَاد", "Date of Birth": "تَارِيخ الْمِيلَاد",
"Age": "الْعُمْر", 'Select date and time of trip': 'اختر تاريخ ووقت الرحلة',
"Expiry Date": "تَارِيخ الإِنْتِهَاء", 'Selected Date': 'التاريخ المحدد',
'Select Time': 'اختر الوقت',
'Selected Time': 'الوقت المحدد',
'OK': 'موافق',
'Cancel': 'إلغاء',
'Selected Date and Time': "التاريخ والوقت المحددان",
"Lets check Car license ": "Lets check Car license ":
"دَعْنَا نَتَحَقَّق مِن رُخْصَة السَّيَّارَة ", "دَعْنَا نَتَحَقَّق مِن رُخْصَة السَّيَّارَة ",
"Color": "اللَّوْن", 'Driver List': 'قائمة السائقين',
"Car Kind": "نَوْع السَّيَّارَة", 'Car': 'السيارة',
"Year": "السَّنَة", 'Plate': 'لوحة السيارة',
"Car Plate": "لَوْحَة السَّيَّارَة", 'N/A': 'غير متوفر',
'Rides': 'الرحلات',
'Age': 'العمر',
'Education': 'التعليم',
'Color': 'اللون',
'Displacement': 'السعة',
'Fuel': 'الوقود',
'Selected driver': 'السائق المختار',
"Lets check License Back Face": "Lets check License Back Face":
"دَعْنَا نَتَحَقَّق مِن الْوَجْه الْخَلْفِي لِلرُّخْصَة", "دَعْنَا نَتَحَقَّق مِن الْوَجْه الْخَلْفِي لِلرُّخْصَة",
"Car License Card": "بَطَاقَة رُخْصَة السَّيَّارَة", "Car License Card": "بَطَاقَة رُخْصَة السَّيَّارَة",

View File

@@ -47,7 +47,7 @@ void main() async {
await GetStorage.init(); await GetStorage.init();
// Get.put(DriverCallController()); // Get.put(DriverCallController());
await AC().gAK(); // await AC().gAK();
'local is ${WidgetsBinding.instance.platformDispatcher.locale.countryCode}'; 'local is ${WidgetsBinding.instance.platformDispatcher.locale.countryCode}';
Stripe.publishableKey = AK.publishableKey; Stripe.publishableKey = AK.publishableKey;

13
lib/print.dart Normal file
View File

@@ -0,0 +1,13 @@
import 'dart:developer' as developer;
class Log {
Log._();
static void print(String value, {StackTrace? stackTrace}) {
developer.log(value, name: 'LOG', stackTrace: stackTrace);
}
static Object? inspect(Object? object) {
return developer.inspect(object);
}
}

View File

@@ -296,7 +296,7 @@ class CarDetailsTypeToChoose extends StatelessWidget {
mapPassengerController mapPassengerController
.totalPassengerComfort; .totalPassengerComfort;
Get.defaultDialog( Get.defaultDialog(
title: 'Comfort', title: 'Comfort'.tr,
titleStyle: AppStyle.title, titleStyle: AppStyle.title,
content: CarDialogue( content: CarDialogue(
textToSpeechController: textToSpeechController:
@@ -330,7 +330,7 @@ class CarDetailsTypeToChoose extends StatelessWidget {
mapPassengerController mapPassengerController
.totalPassengerSpeed; .totalPassengerSpeed;
Get.defaultDialog( Get.defaultDialog(
title: 'Speed', title: 'Speed'.tr,
titleStyle: AppStyle.title, titleStyle: AppStyle.title,
content: CarDialogue( content: CarDialogue(
textToSpeechController: textToSpeechController:
@@ -364,7 +364,7 @@ class CarDetailsTypeToChoose extends StatelessWidget {
mapPassengerController mapPassengerController
.totalPassengerMotoDelivery; .totalPassengerMotoDelivery;
Get.defaultDialog( Get.defaultDialog(
title: 'Delivery', title: 'Delivery'.tr,
titleStyle: AppStyle.title, titleStyle: AppStyle.title,
content: CarDialogue( content: CarDialogue(
textToSpeechController: textToSpeechController:
@@ -396,7 +396,7 @@ class CarDetailsTypeToChoose extends StatelessWidget {
box.write(BoxName.carType, 'Mashwari'); box.write(BoxName.carType, 'Mashwari');
mapPassengerController.totalPassenger = 50; mapPassengerController.totalPassenger = 50;
Get.defaultDialog( Get.defaultDialog(
title: 'Mashwari', title: 'Mashwari'.tr,
titleStyle: AppStyle.title, titleStyle: AppStyle.title,
content: CarDialogue( content: CarDialogue(
textToSpeechController: textToSpeechController:
@@ -411,10 +411,7 @@ class CarDetailsTypeToChoose extends StatelessWidget {
onPressed: () { onPressed: () {
Get.back(); Get.back();
mapPassengerController mapPassengerController
.isBottomSheetShown = false; .mishwariOption();
mapPassengerController.update();
mapPassengerController
.changeCashConfirmPageShown();
}), }),
cancel: MyElevatedButton( cancel: MyElevatedButton(
title: 'Cancel'.tr, title: 'Cancel'.tr,
@@ -429,7 +426,7 @@ class CarDetailsTypeToChoose extends StatelessWidget {
mapPassengerController.totalPassenger = mapPassengerController.totalPassenger =
mapPassengerController.totalPassengerLady; mapPassengerController.totalPassengerLady;
Get.defaultDialog( Get.defaultDialog(
title: 'Lady', title: 'Lady'.tr,
titleStyle: AppStyle.title, titleStyle: AppStyle.title,
content: CarDialogue( content: CarDialogue(
textToSpeechController: textToSpeechController:

View File

@@ -0,0 +1,285 @@
import 'package:SEFER/constant/style.dart';
import 'package:SEFER/controller/home/map_passenger_controller.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:get/get.dart';
import '../../../constant/api_key.dart';
class CupertinoDriverListWidget extends StatelessWidget {
final List drivers;
const CupertinoDriverListWidget({super.key, required this.drivers});
@override
Widget build(BuildContext context) {
return CupertinoPageScaffold(
navigationBar: CupertinoNavigationBar(
middle: Text('Driver List'.tr),
),
child: SafeArea(
child: ListView.separated(
itemCount: drivers.length,
separatorBuilder: (context, index) => const Divider(height: 1),
itemBuilder: (context, index) {
var driver = drivers[index];
return Container(
decoration: AppStyle.boxDecoration1,
child: CupertinoListTile(
padding: const EdgeInsets.symmetric(vertical: 4, horizontal: 8),
leading: CircleAvatar(
radius: 25,
backgroundImage: NetworkImage(
'${AK.serverPHP}/portrate_captain_image/${driver['id']}.jpg',
),
backgroundColor: CupertinoColors.systemGrey5,
),
title: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'${driver['NAME'].toString().split(' ')[0]} ${driver['NAME'].toString().split(' ')[1]}',
style: const TextStyle(fontWeight: FontWeight.bold),
),
Text('${'Age'.tr}: ${driver['age'].toString()}'),
Row(
children: [
const Icon(CupertinoIcons.star_fill,
size: 16, color: CupertinoColors.systemYellow),
const SizedBox(width: 4),
Text(driver['rating']?.toStringAsFixed(1) ?? 'N/A'.tr),
const SizedBox(width: 8),
Text('${'Rides'.tr}: ${driver['countRide']}'),
],
),
],
),
subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'${'Car'.tr}: ${driver['make']} ${driver['model']} (${driver['year']})'),
Text('${'Plate'.tr}: ${driver['car_plate']}'),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text('${'Education'.tr}: ${driver['education']}'),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
SizedBox(
// width: Get.width * .3,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text('${'Color'.tr}: ${driver['color']}'),
const SizedBox(width: 8),
Container(
width: 20,
height: 20,
decoration: BoxDecoration(
color:
hexToColor(driver['color_hex'].toString()),
borderRadius: BorderRadius.circular(4),
border: Border.all(),
),
),
],
),
),
],
),
],
),
onTap: () {
// Handle driver selection
Get.defaultDialog(
title: '${'Selected driver'.tr}: ${driver['NAME']}',
content: Column(
children: [
Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'${'Car'.tr}: ${driver['make']} ${driver['model']} (${driver['year']})'),
Text('${'Plate'.tr}: ${driver['car_plate']}'),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('${'Color'.tr}: ${driver['color']}'),
const SizedBox(width: 8),
Container(
width: 20,
height: 20,
decoration: BoxDecoration(
color: hexToColor(
driver['color_hex'].toString()),
borderRadius: BorderRadius.circular(4),
border: Border.all(),
),
),
],
),
],
),
],
),
confirm: MyElevatedButton(
title: 'OK'.tr,
onPressed: () {
Get.back();
showDateTimePickerDialog();
}));
print('${'Selected driver'.tr}: ${driver['NAME']}');
// Get.back(); // Close the dialog
},
),
);
},
)),
);
}
Color hexToColor(String hexColor) {
hexColor = hexColor.replaceAll("#", "");
String colorString = "ff$hexColor";
return Color(int.parse(colorString, radix: 16));
}
void showDriverSelectionDialog(Map<String, dynamic> driver) {
Get.defaultDialog(
title: '${'Selected driver'.tr}: ${driver['name']}',
content: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'${'Car'.tr}: ${driver['make']} ${driver['model']} (${driver['year']})'),
Text('${'Plate'.tr}: ${driver['car_plate']}'),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('${'Color'.tr}: ${driver['color']}'),
const SizedBox(width: 8),
Container(
width: 20,
height: 20,
decoration: BoxDecoration(
color: hexToColor(driver['color_hex'].toString()),
borderRadius: BorderRadius.circular(4),
border: Border.all(),
),
),
],
),
],
),
confirm: MyElevatedButton(
title: 'OK'.tr,
onPressed: () {
Get.back();
showDateTimePickerDialog();
},
),
);
}
void showDateTimePickerDialog() {
DateTime selectedDateTime = DateTime.now();
Get.defaultDialog(
barrierDismissible: false,
title: 'select date and time of trip'.tr,
content: SizedBox(
// height: 400, // Adjust height as needed
width: double.maxFinite,
child: Column(
children: [
DateTimePickerWidget(),
],
),
),
confirm: MyElevatedButton(
title: 'Confirm Trip'.tr,
onPressed: () async {
DateTime selectedDateTime =
Get.find<MapPassengerController>().selectedDateTime.value;
// Save trip data and set up notifications
// await Get.find<MapPassengerController>().saveTripData(driver, selectedDateTime);
Get.back();
},
),
);
}
}
class DateTimePickerWidget extends StatelessWidget {
final MapPassengerController controller = Get.put(MapPassengerController());
@override
Widget build(BuildContext context) {
return CupertinoPageScaffold(
navigationBar: const CupertinoNavigationBar(
transitionBetweenRoutes: false,
automaticallyImplyLeading: false,
middle: Text('Date and Time Picker'),
),
child: SafeArea(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Obx(() => Text(
'${'Selected Date and Time'.tr}: ${controller.selectedDateTime.value}',
style: const TextStyle(fontSize: 18),
textAlign: TextAlign.center,
)),
const SizedBox(height: 20),
SizedBox(
height: 200,
child: CupertinoDatePicker(
mode: CupertinoDatePickerMode.dateAndTime,
initialDateTime: controller.selectedDateTime.value,
onDateTimeChanged: (newDateTime) {
controller.updateDateTime(newDateTime);
},
),
),
],
),
),
);
}
}
// Future<void> setLocalNotification(DateTime tripDateTime) async {
// FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
// FlutterLocalNotificationsPlugin();
// var androidPlatformChannelSpecifics = const AndroidNotificationDetails(
// 'trip_reminder_channel',
// 'Trip Reminders',
// importance: Importance.max,
// priority: Priority.high,
// );
// var iOSPlatformChannelSpecifics = IOSNotificationDetails();
// var platformChannelSpecifics = NotificationDetails(
// android: androidPlatformChannelSpecifics,
// iOS: iOSPlatformChannelSpecifics,
// );
// await flutterLocalNotificationsPlugin.schedule(
// 0,
// 'Trip Reminder'.tr,
// 'Your trip is scheduled in 30 minutes'.tr,
// tripDateTime.subtract(const Duration(minutes: 30)),
// platformChannelSpecifics,
// );
// }

File diff suppressed because it is too large Load Diff

View File

@@ -11,39 +11,41 @@ dependencies:
flutter: flutter:
sdk: flutter sdk: flutter
cupertino_icons: ^1.0.2 cupertino_icons: ^1.0.2
firebase_messaging: ^14.6.7 secure_string_operations:
firebase_core: ^2.15.0 path: ./secure_string_operations
flutter_local_notifications: ^16.2.0 firebase_messaging: ^15.0.3
firebase_core: ^3.2.0
flutter_local_notifications: ^17.2.1+2
google_maps_flutter: ^2.5.0 google_maps_flutter: ^2.5.0
sqflite: ^2.3.0 sqflite: ^2.3.0
path: ^1.8.3 path: ^1.8.3
intl: ^0.18.1 intl: ^0.19.0
http: ^0.13.6 http: ^1.2.2
get: ^4.6.5 get: ^4.6.5
get_storage: ^2.1.1 get_storage: ^2.1.1
url_launcher: ^6.1.20 url_launcher: ^6.1.20
location: ^5.0.2+1 location: ^7.0.0
google_polyline_algorithm: ^3.1.0 google_polyline_algorithm: ^3.1.0
animated_text_kit: ^4.2.2 animated_text_kit: ^4.2.2
flutter_secure_storage: ^9.0.0 flutter_secure_storage: ^9.0.0
geolocator: ^10.0.0 geolocator: ^12.0.0
flutter_paypal: ^0.2.0 flutter_paypal: ^0.2.0
google_fonts: ^4.0.4 google_fonts: ^6.2.1
flutter_launcher_icons: ^0.13.1 flutter_launcher_icons: ^0.13.1
flutter_rating_bar: ^4.0.1 flutter_rating_bar: ^4.0.1
flutter_font_icons: ^2.2.5 flutter_font_icons: ^2.2.5
image_picker: ^1.0.4 image_picker: ^1.0.4
flutter_stripe: ^9.5.0+1 flutter_stripe: ^10.2.0
# camera: ^0.10.5+5 #to be remove # camera: ^0.10.5+5 #to be remove
flutter_widget_from_html: ^0.14.6 flutter_widget_from_html: ^0.15.1
local_auth: ^2.1.7 local_auth: ^2.1.7
# image: ^4.1.3 #to be remove # image: ^4.1.3 #to be remove
image_cropper: ^4.0.1 image_cropper: ^7.1.0
envied: ^0.5.2 envied: ^0.5.2
# cached_network_image: ^3.3.0 # cached_network_image: ^3.3.0
calendar_builder: ^0.0.6 calendar_builder: ^0.0.6
# agora_rtc_engine: ^6.2.6 # agora_rtc_engine: ^6.2.6
flutter_tts: ^3.8.5 flutter_tts: ^4.0.2
permission_handler: ^11.3.0 permission_handler: ^11.3.0
# google_generative_ai: ^0.0.1-dev # google_generative_ai: ^0.0.1-dev
vibration: ^1.8.4 vibration: ^1.8.4
@@ -55,14 +57,14 @@ dependencies:
share: ^2.0.4 share: ^2.0.4
google_sign_in: ^6.2.1 google_sign_in: ^6.2.1
sign_in_with_apple: ^6.1.0 sign_in_with_apple: ^6.1.0
firebase_auth: ^4.19.6 firebase_auth: ^5.1.2
package_info_plus: ^8.0.0 package_info_plus: ^8.0.0
uni_links: ^0.5.1 uni_links: ^0.5.1
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:
sdk: flutter sdk: flutter
flutter_lints: ^ 3.0.1 flutter_lints: ^4.0.0
envied_generator: ^0.5.2 envied_generator: ^0.5.2
build_runner: ^2.4.6 build_runner: ^2.4.6

View File

@@ -0,0 +1,47 @@
// File: lib/secure_string_operations.dart
library secure_string_operations;
class X {
static String c(String a, Map<String, String> b) {
StringBuffer c = StringBuffer();
c.write(a);
String d = "Bl";
c.write(b[d] ?? d);
StringBuffer e = StringBuffer();
String f = c.toString();
for (int g = 0; g < f.length; g++) {
String h = f[g];
e.write(b[h] ?? h);
}
return e.toString();
}
static String r(String a, Map<String, String> b) {
StringBuffer c = StringBuffer();
String d = "Bl";
int e = d.length;
for (int f = 0; f < a.length; f++) {
String g = a[f];
String h = b.keys.firstWhere(
(i) => b[i] == g,
orElse: () => g,
);
c.write(h);
}
String j = c.toString();
if (j.endsWith(d)) {
j = j.substring(0, j.length - e);
}
return j;
}
}

View File

@@ -0,0 +1,5 @@
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages: {}
sdks:
dart: ">=2.12.0 <4.0.0"

View File

@@ -0,0 +1,6 @@
name: secure_string_operations
description: A package for secure string operations
version: 1.0.0
environment:
sdk: ">=2.12.0 <3.0.0"