From c2fd1187d0a33b4836e5f53457e15db2b1990640 Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Thu, 14 Dec 2023 23:09:46 +0300 Subject: [PATCH] 12/14/1 --- lib/constant/links.dart | 10 ++ lib/controller/auth/register_controller.dart | 41 ++--- lib/controller/functions/log_out.dart | 110 ++++++++++++- .../home/map_passenger_controller.dart | 150 ++++++++++-------- .../notification_captain_controller.dart | 8 +- .../passenger_notification_controller.dart | 67 ++++++++ .../profile/captain_profile_controller.dart | 25 +++ lib/splash_screen_page.dart | 1 - lib/views/auth/captin/login_captin.dart | 113 +++++++------ lib/views/auth/captin/logout_captain.dart | 28 +++- lib/views/auth/register_page.dart | 36 +++-- lib/views/home/Captin/settings_captain.dart | 28 +++- .../home/profile/passenger_profile_page.dart | 2 +- .../notification/notification_captain.dart | 2 +- lib/views/notification/notification_page.dart | 81 +++++++--- lib/views/widgets/my_scafold.dart | 5 +- lib/views/widgets/my_textField.dart | 2 +- pubspec.lock | 8 + pubspec.yaml | 1 + 19 files changed, 523 insertions(+), 195 deletions(-) rename lib/controller/{auth/captin => notification}/notification_captain_controller.dart (90%) create mode 100644 lib/controller/notification/passenger_notification_controller.dart diff --git a/lib/constant/links.dart b/lib/constant/links.dart index 0de09b2..e16f333 100644 --- a/lib/constant/links.dart +++ b/lib/constant/links.dart @@ -55,6 +55,14 @@ class AppLink { static String getDriverPaymentPoints = "$ride/driverWallet/get.php"; static String getDriverpaymentToday = "$ride/payment/get.php"; static String getAllPaymentFromRide = "$ride/payment/getAllPayment.php"; + +//-----------------Passenger NotificationCaptain------------------ + static String addNotificationPassenger = + "$ride/notificationPassenger/add.php"; + static String getNotificationPassenger = + "$ride/notificationPassenger/get.php"; + static String updateNotificationPassenger = + "$ride/notificationPassenger/update.php"; //-----------------Driver NotificationCaptain------------------ static String addNotificationCaptain = "$ride/notificationCaptain/add.php"; static String getNotificationCaptain = "$ride/notificationCaptain/get.php"; @@ -123,6 +131,7 @@ class AppLink { //==================Blog============= static String profile = '$server/ride/profile'; static String getprofile = "$profile/get.php"; + static String getCaptainProfile = "$profile/getCaptainProfile.php"; static String addprofile = "$profile/add.php"; static String deleteprofile = "$profile/delete.php"; static String updateprofile = "$profile/update.php"; @@ -141,6 +150,7 @@ class AppLink { static String sendVerifyEmailCaptin = "$authCaptin/sendVerifyEmail.php"; static String verifyEmailCaptin = "$authCaptin/verifyEmail.php"; static String removeUser = "$authCaptin/removeAccount.php"; + static String deletecaptainAccounr = "$authCaptin/deletecaptainAccounr.php"; static String updateAccountBank = "$authCaptin/updateAccountBank.php"; static String getAccount = "$authCaptin/getAccount.php"; } diff --git a/lib/controller/auth/register_controller.dart b/lib/controller/auth/register_controller.dart index 3a9b97d..c114bcb 100644 --- a/lib/controller/auth/register_controller.dart +++ b/lib/controller/auth/register_controller.dart @@ -4,8 +4,10 @@ import 'dart:math'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:ride/constant/links.dart'; +import 'package:ride/constant/style.dart'; import 'package:ride/controller/functions/crud.dart'; import 'package:ride/views/auth/login_page.dart'; +import 'package:ride/views/widgets/elevated_btn.dart'; import '../../views/auth/verify_email_page.dart'; @@ -29,26 +31,27 @@ class RegisterController extends GetxController { getBirthDate() { Get.defaultDialog( - title: 'Select Date', - content: SizedBox( - width: 300, - child: CalendarDatePicker( - initialDate: DateTime.now().subtract(const Duration(days: 14 * 365)), - firstDate: DateTime.parse('1940-06-01'), - lastDate: DateTime.now().subtract(const Duration(days: 14 * 365)), - onDateChanged: (date) { - // Get the selected date and convert it to a DateTime object - DateTime dateTime = date; - // Call the getOrders() function from the controller - birthDate = dateTime.toString().split(' ')[0]; - update(); - Get.back(); - }, + title: 'Select Date', + titleStyle: AppStyle.title, + content: SizedBox( + width: 300, + child: CalendarDatePicker( + initialDate: + DateTime.now().subtract(const Duration(days: 14 * 365)), + firstDate: DateTime.parse('1940-06-01'), + lastDate: DateTime.now().subtract(const Duration(days: 14 * 365)), + onDateChanged: (date) { + // Get the selected date and convert it to a DateTime object + DateTime dateTime = date; + // Call the getOrders() function from the controller + birthDate = dateTime.toString().split(' ')[0]; + update(); + }, - // onDateChanged: (DateTime value) {}, + // onDateChanged: (DateTime value) {}, + ), ), - ), - ); + confirm: MyElevatedButton(title: 'Ok'.tr, onPressed: () => Get.back())); } void changeGender(String value) { @@ -75,7 +78,7 @@ class RegisterController extends GetxController { 'email': emailController.text.toString(), 'phone': phoneController.text.toString(), 'password': passwordController.text.toString(), - 'gender': gender, + 'gender': 'yet', 'site': siteController.text, 'birthdate': birthDate, }); diff --git a/lib/controller/functions/log_out.dart b/lib/controller/functions/log_out.dart index 6a21a9d..306db04 100644 --- a/lib/controller/functions/log_out.dart +++ b/lib/controller/functions/log_out.dart @@ -1,24 +1,81 @@ +import 'dart:io'; + import 'package:flutter/material.dart'; -import 'package:flutter/src/widgets/basic.dart'; import 'package:get/get.dart'; import 'package:ride/constant/box_name.dart'; import 'package:ride/constant/colors.dart'; import 'package:ride/constant/links.dart'; import 'package:ride/controller/functions/crud.dart'; import 'package:ride/main.dart'; +import 'package:ride/onbording_page.dart'; import 'package:ride/views/lang/languages.dart'; import 'package:ride/views/widgets/elevated_btn.dart'; +import 'package:ride/views/widgets/my_textField.dart'; import '../../constant/style.dart'; class LogOut { + TextEditingController checkTxtController = TextEditingController(); + final formKey = GlobalKey(); Future deleteMyAccount(String id) async { await CRUD().post(link: AppLink.removeUser, payload: {'id': id}).then( (value) => Get.snackbar('Deleted', 'Your Account is Deleted', backgroundColor: AppColor.redColor)); } - Future logOut() async { + checkBeforeDelete() async { + var res = await CRUD().post( + link: AppLink.deletecaptainAccounr, + payload: {'id': box.read(BoxName.driverID)}).then((value) => exit(0)); + } + + deletecaptainAccount() { + Get.defaultDialog( + backgroundColor: AppColor.yellowColor, + title: 'Are you sure to delete your account?'.tr, + middleText: + 'Your data will be erased after 2 weeks\nAnd you will can\'t return to use app after 1 month ', + titleStyle: AppStyle.title, + content: Column( + children: [ + Container( + width: Get.width, + decoration: AppStyle.boxDecoration, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + 'Your data will be erased after 2 weeks\nAnd you will can\'t return to use app after 1 month' + .tr, + style: AppStyle.title.copyWith(color: AppColor.redColor), + ), + ), + ), + const SizedBox( + height: 20, + ), + Form( + key: formKey, + child: SizedBox( + width: Get.width, + child: MyTextForm( + controller: checkTxtController, + label: 'Enter Your First Name'.tr, + hint: 'Enter Your First Name'.tr, + type: TextInputType.name, + ), + )) + ], + ), + confirm: MyElevatedButton( + title: 'Delete'.tr, + onPressed: () { + if (checkTxtController.text == box.read(BoxName.nameDriver)) { + deletecaptainAccount(); + } + })); + } + + Future logOutPassenger() async { Get.defaultDialog( title: 'Are you Sure to LogOut?'.tr, content: Row( @@ -42,7 +99,54 @@ class LogOut { box.remove(BoxName.phone); box.remove(BoxName.tokenFCM); box.remove(BoxName.tokens); - Get.offAll(const Language()); + Get.offAll(OnBoardingPage()); + }, + child: Text( + 'Sign Out'.tr, + style: + AppStyle.title.copyWith(color: AppColor.secondaryColor), + )) + ], + )); + } + + Future logOutCaptain() async { + Get.defaultDialog( + title: 'Are you Sure to LogOut?'.tr, + titleStyle: AppStyle.title, + content: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + MyElevatedButton( + title: 'Cancel'.tr, + onPressed: () => Get.back(), + ), + ElevatedButton( + style: ButtonStyle( + backgroundColor: MaterialStateProperty.all(AppColor.redColor), + ), + onPressed: () { + // box.remove(BoxName.agreeTerms); + box.remove(BoxName.driverID); + box.remove(BoxName.sexDriver); + box.remove(BoxName.dobDriver); + box.remove(BoxName.nameDriver); + box.remove(BoxName.emailDriver); + box.remove(BoxName.phoneDriver); + box.remove(BoxName.statusDriverLocation); + box.remove(BoxName.cvvCodeDriver); + box.remove(BoxName.lastNameDriver); + box.remove(BoxName.passwordDriver); + box.remove(BoxName.cardNumberDriver); + box.remove(BoxName.expiryDateDriver); + box.remove(BoxName.cardHolderNameDriver); + box.remove(BoxName.vin); + box.remove(BoxName.make); + box.remove(BoxName.year); + box.remove(BoxName.owner); + box.remove(BoxName.onBoarding); + box.remove(BoxName.agreeTerms); + Get.offAll(OnBoardingPage()); }, child: Text( 'Sign Out'.tr, diff --git a/lib/controller/home/map_passenger_controller.dart b/lib/controller/home/map_passenger_controller.dart index 0a6553f..f3840b8 100644 --- a/lib/controller/home/map_passenger_controller.dart +++ b/lib/controller/home/map_passenger_controller.dart @@ -6,6 +6,8 @@ import 'package:get/get.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:google_polyline_algorithm/google_polyline_algorithm.dart'; import 'package:location/location.dart'; +import 'package:ride/constant/colors.dart'; +import 'package:ride/constant/style.dart'; import 'package:ride/views/home/map_page_passenger.dart'; import '../../constant/api_key.dart'; import '../../constant/box_name.dart'; @@ -273,77 +275,88 @@ class MapPassengerController extends GetxController { } changeConfirmRide() async { - PaymentController paymentController = Get.find(); - rideConfirm = true; - shouldFetch = true; - isBottomSheetShown = false; - timeToPassengerFromDriverAfterApplied = 60; - driverToken = - dataCarsLocationByPassenger['message'][carsOrder]['token'].toString(); - update(); - // print('rideConfirm= $rideConfirm'); + if (dataCarsLocationByPassenger != 'failure') { + driverToken = + dataCarsLocationByPassenger['message'][carsOrder]['token'].toString(); + PaymentController paymentController = Get.find(); + rideConfirm = true; + shouldFetch = true; + isBottomSheetShown = false; + timeToPassengerFromDriverAfterApplied = 60; - await getCarsLocationByPassenger(); - await CRUD().post(link: AppLink.addRides, payload: { - "start_location": //'${data[0]['start_address']}', - '${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}', - "end_location": //'${data[0]['end_address']}', - '${data[0]["end_location"]['lat']},${data[0]["end_location"]['lng']}', - "date": DateTime.now().toString(), - "time": DateTime.now().toString(), - "endtime": durationToAdd.toString(), - "price": totalPassenger.toString(), - "passenger_id": box.read(BoxName.passengerID).toString(), - "driver_id": dataCarsLocationByPassenger['message'][carsOrder] - ['driver_id'] - .toString(), - "status": "waiting", - "price_for_driver": totalDriver.toString(), - "price_for_passenger": totalME.toString(), - "distance": distance.toString() - }).then((value) { - // print(jsonDecode(value)['message']); - // List body = [ - rideId = jsonDecode(value)['message']; - List body = [ - '${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}', - '${data[0]["end_location"]['lat']},${data[0]["end_location"]['lng']}', - totalPassenger.toString(), - totalDriver.toString(), - duration.toString(), - distance.toString(), - dataCarsLocationByPassenger['message'][carsOrder]['driver_id'] - .toString(), - box.read(BoxName.passengerID).toString(), - box.read(BoxName.name).toString(), - box.read(BoxName.tokenFCM).toString(), - box.read(BoxName.phone).toString(), - durationByPassenger.toString(), - distanceByPassenger.toString(), - paymentController.isWalletChecked.toString(), - dataCarsLocationByPassenger['message'][carsOrder]['token'].toString(), - duration1.toString(), - rideId, - rideTimerBegin.toString(), - dataCarsLocationByPassenger['message'][carsOrder]['driver_id'] - .toString(), - durationToRide.toString() - ]; - FirebaseMessagesController().sendNotificationToDriverMAP( - 'Order', - jsonDecode(value)['message'].toString(), - dataCarsLocationByPassenger['message'][carsOrder]['token'].toString(), - body, - ); - // print(dataCarsLocationByPassenger); - // print(dataCarsLocationByPassenger['message'][0]['token'].toString()); - }); - delayAndFetchRideStatus(rideId); - if (shouldFetch == false) { - startTimer(); update(); + // print('rideConfirm= $rideConfirm'); + + await getCarsLocationByPassenger(); + await CRUD().post(link: AppLink.addRides, payload: { + "start_location": //'${data[0]['start_address']}', + '${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}', + "end_location": //'${data[0]['end_address']}', + '${data[0]["end_location"]['lat']},${data[0]["end_location"]['lng']}', + "date": DateTime.now().toString(), + "time": DateTime.now().toString(), + "endtime": durationToAdd.toString(), + "price": totalPassenger.toString(), + "passenger_id": box.read(BoxName.passengerID).toString(), + "driver_id": dataCarsLocationByPassenger['message'][carsOrder] + ['driver_id'] + .toString(), + "status": "waiting", + "price_for_driver": totalDriver.toString(), + "price_for_passenger": totalME.toString(), + "distance": distance.toString() + }).then((value) { + // print(jsonDecode(value)['message']); + // List body = [ + rideId = jsonDecode(value)['message']; + List body = [ + '${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}', + '${data[0]["end_location"]['lat']},${data[0]["end_location"]['lng']}', + totalPassenger.toString(), + totalDriver.toString(), + duration.toString(), + distance.toString(), + dataCarsLocationByPassenger['message'][carsOrder]['driver_id'] + .toString(), + box.read(BoxName.passengerID).toString(), + box.read(BoxName.name).toString(), + box.read(BoxName.tokenFCM).toString(), + box.read(BoxName.phone).toString(), + durationByPassenger.toString(), + distanceByPassenger.toString(), + paymentController.isWalletChecked.toString(), + dataCarsLocationByPassenger['message'][carsOrder]['token'].toString(), + duration1.toString(), + rideId, + rideTimerBegin.toString(), + dataCarsLocationByPassenger['message'][carsOrder]['driver_id'] + .toString(), + durationToRide.toString() + ]; + FirebaseMessagesController().sendNotificationToDriverMAP( + 'Order', + jsonDecode(value)['message'].toString(), + dataCarsLocationByPassenger['message'][carsOrder]['token'].toString(), + body, + ); + // print(dataCarsLocationByPassenger); + // print(dataCarsLocationByPassenger['message'][0]['token'].toString()); + }); + delayAndFetchRideStatus(rideId); + if (shouldFetch == false) { + startTimer(); + update(); + } + update(); + } else { + Get.defaultDialog( + title: 'No Car or Captain Found in your area.'.tr, + titleStyle: AppStyle.title, + middleText: 'Please Try anther time '.tr, + middleTextStyle: AppStyle.title.copyWith(color: AppColor.yellowColor), + confirm: + MyElevatedButton(title: 'Ok'.tr, onPressed: () => Get.back())); } - update(); } void delayAndFetchRideStatus(String rideId) { @@ -446,6 +459,7 @@ class MapPassengerController extends GetxController { }); if (res == 'failure') { noCarString = true; + dataCarsLocationByPassenger = res; update(); // Get.snackbar('No Car in your site.Sorry!'.tr, '', // backgroundColor: AppColor.redColor); diff --git a/lib/controller/auth/captin/notification_captain_controller.dart b/lib/controller/notification/notification_captain_controller.dart similarity index 90% rename from lib/controller/auth/captin/notification_captain_controller.dart rename to lib/controller/notification/notification_captain_controller.dart index 113a38e..979e2a6 100644 --- a/lib/controller/auth/captin/notification_captain_controller.dart +++ b/lib/controller/notification/notification_captain_controller.dart @@ -5,10 +5,10 @@ import 'package:ride/constant/style.dart'; import 'package:ride/constant/table_names.dart'; import 'package:ride/views/widgets/elevated_btn.dart'; -import '../../../constant/box_name.dart'; -import '../../../constant/links.dart'; -import '../../../main.dart'; -import '../../functions/crud.dart'; +import '../../constant/box_name.dart'; +import '../../constant/links.dart'; +import '../../main.dart'; +import '../functions/crud.dart'; class NotificationCaptainController extends GetxController { bool isloading = false; diff --git a/lib/controller/notification/passenger_notification_controller.dart b/lib/controller/notification/passenger_notification_controller.dart new file mode 100644 index 0000000..1187e7d --- /dev/null +++ b/lib/controller/notification/passenger_notification_controller.dart @@ -0,0 +1,67 @@ +import 'dart:convert'; + +import 'package:get/get.dart'; +import 'package:ride/controller/firebase/firbase_messge.dart'; + +import '../../constant/box_name.dart'; +import '../../constant/links.dart'; +import '../../constant/style.dart'; +import '../../main.dart'; +import '../../views/widgets/elevated_btn.dart'; +import '../functions/crud.dart'; + +class PassengerNotificationController extends GetxController { + bool isloading = false; + Map notificationData = {}; + + getNotifications() async { + isloading = true; + update(); + var res = await CRUD().get( + link: AppLink.getNotificationPassenger, + payload: {'passenger_id': box.read(BoxName.passengerID)}); + if (res == "failure") { + // print(res); + Get.defaultDialog( + title: 'There is no notification yet'.tr, + titleStyle: AppStyle.title, + middleText: '', + confirm: MyElevatedButton( + title: 'Back', + onPressed: () { + Get.back(); + Get.back(); + })); + } + notificationData = jsonDecode(res); + // sql.insertData(notificationData['message'], TableName.captainNotification); + + // print(notificationData); + isloading = false; + update(); + } + + updateNotification(String id) async { + await CRUD().post( + link: AppLink.updateNotificationPassenger, + payload: {'isShown': 'true', 'id': id}, + ); + Get.back(); + getNotifications(); + } + + addNotificationToPassenger(String title, body) async { + var res = CRUD().post(link: AppLink.addNotificationPassenger, payload: { + 'title': title, + 'body': body, + }); + FirebaseMessagesController() + .sendNotificationToPassengerToken(title, body, 'token', []); + } + + @override + void onInit() { + getNotifications(); + super.onInit(); + } +} diff --git a/lib/controller/profile/captain_profile_controller.dart b/lib/controller/profile/captain_profile_controller.dart index b3d09a0..7abcd8b 100644 --- a/lib/controller/profile/captain_profile_controller.dart +++ b/lib/controller/profile/captain_profile_controller.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:http/http.dart'; import 'package:ride/constant/box_name.dart'; import 'package:ride/constant/links.dart'; import 'package:ride/controller/functions/crud.dart'; @@ -38,4 +39,28 @@ class CaptainProfileController extends GetxController { Get.back(); } } + + Map captainProfileData = {}; + Future getProfileData() async { + var res = await CRUD().get( + link: AppLink.getCaptainProfile, + payload: {'id': box.read(BoxName.driverID)}); + if (res != 'failure') { + var d = jsonDecode(res); + captainProfileData = d['message']; + update(); + print(d['message']); + box.write(BoxName.sexDriver, d['message']['gender']); + box.write(BoxName.dobDriver, d['message']['birthdate']); + } + } + + @override + void onInit() { + if (box.read(BoxName.dobDriver).toString().isEmpty) { + getProfileData(); + } + + super.onInit(); + } } diff --git a/lib/splash_screen_page.dart b/lib/splash_screen_page.dart index 3b8a8f3..91460d9 100644 --- a/lib/splash_screen_page.dart +++ b/lib/splash_screen_page.dart @@ -1,6 +1,5 @@ import 'package:animated_text_kit/animated_text_kit.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_stripe/flutter_stripe.dart'; import 'package:get/get.dart'; import 'package:ride/constant/colors.dart'; import 'package:ride/constant/info.dart'; diff --git a/lib/views/auth/captin/login_captin.dart b/lib/views/auth/captin/login_captin.dart index 043e789..7ed65c8 100644 --- a/lib/views/auth/captin/login_captin.dart +++ b/lib/views/auth/captin/login_captin.dart @@ -1,18 +1,11 @@ -import 'dart:convert'; - import 'package:animated_text_kit/animated_text_kit.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter_widget_from_html/flutter_widget_from_html.dart'; import 'package:get/get.dart'; -import 'package:ride/controller/functions/llama_ai.dart'; -import 'package:ride/env/env.dart'; -import '../../../constant/api_key.dart'; import '../../../constant/box_name.dart'; -import '../../../constant/char_map.dart'; import '../../../constant/colors.dart'; -import '../../../constant/credential.dart'; import '../../../constant/info.dart'; import '../../../constant/style.dart'; import '../../../controller/auth/captin/login_captin_controller.dart'; @@ -197,62 +190,62 @@ class LoginCaptin extends StatelessWidget { displayFullTextOnTap: true, stopPauseOnTap: true, ), - IconButton( - onPressed: () async { - // String v = - // await storage.read(key: BoxName.serverAPI) ?? ''; - // print(v); - // sql.deleteAllData(TableName.faceDetectTimes); - AC credentials = AC(); - // String apiKey = AK.secretKey; - // // // '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'; - // credentials.gAK(); - // String? apiKeyf = - // await storage.read(key: BoxName.chatGPTkey); - // print(apiKeyf); - // String convertedString = credentials.c(apiKey, s); - // String convertedStrings = credentials.c(apiKey, s); - // print('Converted String s: $convertedStrings'); - // String convertedStringC = - // credentials.c(convertedStrings, c); - // print('v: $v'); - // 'AAAAinYllCo:APA91bF1shTpzSsSxqbfY6c60D8zs1ZsdIsl9ix6nl7GDdjCqWPRK0G0ub5SqFdb1jDpQDvQPxGg-697MWLo0sy3oYImBwBLObyhk0GjtNzyr0PbE3hI-pOvhf8Vp1xgUgBmofbZYXkH' - // 'AAAAinYllCo:APA91bF1shTpzSsSxqbfY6c60D8zs1ZsdIsl9ix6nl7GDdjCqWPRK0G0ub5SqFdb1jDpQDvQPxGg-697MWLo0sy3oYImBwBLObyhk0GjtNzyr0PbE3hI-pOvhf8Vp1xgUgBmofbZYXkH' - String convertedStringN = credentials.c( - credentials.c( - credentials.c( - '0vQRyaYYDWpsv73A5CZOknseK7S2sgwE', cs), - cC), - cn); - print('Converted v: $convertedStringN'); - // // - // String retrievedStringN = - // credentials.r(convertedStringN, n); - // print('Retrieved String: $retrievedStringN'); - // String retrievedStringC = - // credentials.r(retrievedStringN, c); - // print('Retrieved String: $retrievedStringC'); + // IconButton( + // onPressed: () async { + // // String v = + // // await storage.read(key: BoxName.serverAPI) ?? ''; + // // print(v); + // // sql.deleteAllData(TableName.faceDetectTimes); + // AC credentials = AC(); + // // String apiKey = AK.secretKey; + // // // // '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'; + // // credentials.gAK(); + // // String? apiKeyf = + // // await storage.read(key: BoxName.chatGPTkey); + // // print(apiKeyf); + // // String convertedString = credentials.c(apiKey, s); + // // String convertedStrings = credentials.c(apiKey, s); + // // print('Converted String s: $convertedStrings'); + // // String convertedStringC = + // // credentials.c(convertedStrings, c); + // // print('v: $v'); + // // 'AAAAinYllCo:APA91bF1shTpzSsSxqbfY6c60D8zs1ZsdIsl9ix6nl7GDdjCqWPRK0G0ub5SqFdb1jDpQDvQPxGg-697MWLo0sy3oYImBwBLObyhk0GjtNzyr0PbE3hI-pOvhf8Vp1xgUgBmofbZYXkH' + // // 'AAAAinYllCo:APA91bF1shTpzSsSxqbfY6c60D8zs1ZsdIsl9ix6nl7GDdjCqWPRK0G0ub5SqFdb1jDpQDvQPxGg-697MWLo0sy3oYImBwBLObyhk0GjtNzyr0PbE3hI-pOvhf8Vp1xgUgBmofbZYXkH' + // String convertedStringN = credentials.c( + // credentials.c( + // credentials.c( + // '0vQRyaYYDWpsv73A5CZOknseK7S2sgwE', cs), + // cC), + // cn); + // print('Converted v: $convertedStringN'); + // // // + // // String retrievedStringN = + // // credentials.r(convertedStringN, n); + // // print('Retrieved String: $retrievedStringN'); + // // String retrievedStringC = + // // credentials.r(retrievedStringN, c); + // // print('Retrieved String: $retrievedStringC'); - String retrievedStringS = credentials.r( - credentials.r( - credentials.r(convertedStringN, cn), cC), - cs); - print('Retrieved String: $retrievedStringS'); + // String retrievedStringS = credentials.r( + // credentials.r( + // credentials.r(convertedStringN, cn), cC), + // cs); + // print('Retrieved String: $retrievedStringS'); - // if (retrievedStringS == apiKey) { - // print('same'); - // } - // print(' AK is ' + AK.chatGPTkey); // + // // if (retrievedStringS == apiKey) { + // // print('same'); + // // } + // // print(' AK is ' + AK.chatGPTkey); // - // print(' ENV is ' + Env.chatGPTkey); // - // // print('storage is ' + v); // - // print('storage is ' + apiKeyf!); // - }, - icon: const Icon( - Icons.close, - color: AppColor.blueColor, - ), - ), + // // print(' ENV is ' + Env.chatGPTkey); // + // // // print('storage is ' + v); // + // // print('storage is ' + apiKeyf!); // + // }, + // icon: const Icon( + // Icons.close, + // color: AppColor.blueColor, + // ), + // ), ], ), ) diff --git a/lib/views/auth/captin/logout_captain.dart b/lib/views/auth/captin/logout_captain.dart index 4988f06..2ad5bc6 100644 --- a/lib/views/auth/captin/logout_captain.dart +++ b/lib/views/auth/captin/logout_captain.dart @@ -1,5 +1,8 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:ride/constant/colors.dart'; +import 'package:ride/controller/functions/log_out.dart'; +import 'package:ride/views/widgets/elevated_btn.dart'; import 'package:ride/views/widgets/my_scafold.dart'; class LogoutCaptain extends StatelessWidget { @@ -9,7 +12,30 @@ class LogoutCaptain extends StatelessWidget { Widget build(BuildContext context) { return MyScafolld( title: 'Log Out Page'.tr, - body: [], + body: [ + Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + MyElevatedButton( + title: 'Log Off'.tr, + onPressed: () { + LogOut().logOutCaptain(); + }), + const SizedBox( + height: 30, + ), + MyElevatedButton( + title: 'Delete My Account'.tr, + onPressed: () { + LogOut().deletecaptainAccount(); + }, + kolor: AppColor.redColor, + ), + ], + ), + ) + ], isleading: true, ); } diff --git a/lib/views/auth/register_page.dart b/lib/views/auth/register_page.dart index 909ef88..14ef11c 100644 --- a/lib/views/auth/register_page.dart +++ b/lib/views/auth/register_page.dart @@ -257,22 +257,26 @@ class RegisterPage extends StatelessWidget { ), ), ), - DropdownButton( - value: controller.gender, - items: [ - DropdownMenuItem( - value: 'Male'.tr, - child: Text('Male'.tr), - ), - DropdownMenuItem( - value: 'Female'.tr, - child: Text('Female'.tr), - ), - ], - onChanged: (value) { - controller.changeGender(value!); - }, - ) + // DropdownButton( + // value: controller.gender, + // items: [ + // DropdownMenuItem( + // value: 'Male'.tr, + // child: Text('Male'.tr), + // ), + // DropdownMenuItem( + // value: 'Female'.tr, + // child: Text('Female'.tr), + // ), + // DropdownMenuItem( + // value: '--'.tr, + // child: Text('--'.tr), + // ), + // ], + // onChanged: (value) { + // controller.changeGender(value!); + // }, + // ) ], ), MyElevatedButton( diff --git a/lib/views/home/Captin/settings_captain.dart b/lib/views/home/Captin/settings_captain.dart index 3634d14..c5ad4b9 100644 --- a/lib/views/home/Captin/settings_captain.dart +++ b/lib/views/home/Captin/settings_captain.dart @@ -1,5 +1,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:ride/constant/style.dart'; +import 'package:ride/views/lang/languages.dart'; import 'package:ride/views/widgets/my_scafold.dart'; class SettingsCaptain extends StatelessWidget { @@ -9,7 +11,31 @@ class SettingsCaptain extends StatelessWidget { Widget build(BuildContext context) { return MyScafolld( title: 'Settings'.tr, - body: [], + body: [ + ListView( + children: [ + ListTile( + leading: const Icon(Icons.language), + title: Text( + 'Language', + style: AppStyle.headtitle2, + ), + onTap: () => Get.to(const Language()), + ), + // ListTile( + // leading: const Icon(Icons.notifications), + // title: const Text('Notifications'), + // onTap: () => + // Navigator.pushNamed(context, '/notification-settings'), + // ), + // ListTile( + // leading: const Icon(Icons.account_circle), + // title: const Text('Account'), + // onTap: () => Navigator.pushNamed(context, '/account-settings'), + // ), + ], + ), + ], isleading: true, ); } diff --git a/lib/views/home/profile/passenger_profile_page.dart b/lib/views/home/profile/passenger_profile_page.dart index c12e2d2..68b8f01 100644 --- a/lib/views/home/profile/passenger_profile_page.dart +++ b/lib/views/home/profile/passenger_profile_page.dart @@ -192,7 +192,7 @@ class PassengerProfilePage extends StatelessWidget { child: MyElevatedButton( title: 'Sign Out'.tr, onPressed: () { - LogOut().logOut(); + LogOut().logOutPassenger(); }), ), Positioned( diff --git a/lib/views/notification/notification_captain.dart b/lib/views/notification/notification_captain.dart index 53faa42..f07d355 100644 --- a/lib/views/notification/notification_captain.dart +++ b/lib/views/notification/notification_captain.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:ride/constant/style.dart'; -import 'package:ride/controller/auth/captin/notification_captain_controller.dart'; +import 'package:ride/controller/notification/notification_captain_controller.dart'; import 'package:ride/views/widgets/elevated_btn.dart'; import 'package:ride/views/widgets/my_scafold.dart'; import 'package:ride/views/widgets/mycircular.dart'; diff --git a/lib/views/notification/notification_page.dart b/lib/views/notification/notification_page.dart index 9f6bc5f..a1fb2f2 100644 --- a/lib/views/notification/notification_page.dart +++ b/lib/views/notification/notification_page.dart @@ -3,35 +3,80 @@ import 'package:get/get.dart'; import 'package:ride/constant/colors.dart'; import 'package:ride/constant/style.dart'; -import '../../constant/box_name.dart'; -import '../../main.dart'; +import '../../controller/notification/passenger_notification_controller.dart'; +import '../widgets/elevated_btn.dart'; import '../widgets/my_scafold.dart'; +import '../widgets/mycircular.dart'; class NotificationPage extends StatelessWidget { const NotificationPage({super.key}); @override Widget build(BuildContext context) { + Get.put(PassengerNotificationController()); return MyScafolld( isleading: true, title: 'Notifications', - action: IconButton( - onPressed: () async { - print(box.read(BoxName.tokenFCM).toString()); - // await CRUD().post(link: AppLink.addTokens, payload: { - // 'token': box.read(BoxName.tokenFCM).toString(), - // 'passengerID': box.read(BoxName.pasengerID).toString() - // }).then((value) => print('cccc')); - }, - icon: const Icon( - Icons.add, - color: AppColor.primaryColor, - ), - ), body: [ - Container( - decoration: AppStyle.boxDecoration, - ), + GetBuilder( + builder: (notificationCaptainController) => + notificationCaptainController.isloading + ? const MyCircularProgressIndicator() + : SafeArea( + child: ListView.builder( + itemCount: notificationCaptainController + .notificationData['message'].length, + itemBuilder: (BuildContext context, int index) { + if (notificationCaptainController + .notificationData['message'] == + "No notification data found") { + Get.defaultDialog(); + } + var res = notificationCaptainController + .notificationData['message'][index]; + return Card( + elevation: 4, + color: res['isShown'] == 'true' + ? AppColor.secondaryColor.withOpacity(.5) + : AppColor.secondaryColor.withOpacity(.9), + child: ListTile( + onTap: () { + Get.defaultDialog( + title: res['title'], + titleStyle: AppStyle.title, + content: SizedBox( + width: Get.width * .8, + // height: Get.height * .4, + child: Text( + res['body'], + style: AppStyle.title, + ), + ), + confirm: MyElevatedButton( + title: 'Ok', + onPressed: () { + notificationCaptainController + .updateNotification( + res['id'].toString()); + })); + }, + leading: res['isShown'] == 'true' + ? const Icon( + Icons.notifications_off_outlined) + : const Icon(Icons.notifications_active), + title: Text( + res['title'], + style: AppStyle.title, + ), + subtitle: Text( + res['body'], + style: AppStyle.subtitle, + ), + ), + ); + }, + ), + )) ], ); } diff --git a/lib/views/widgets/my_scafold.dart b/lib/views/widgets/my_scafold.dart index 6d553bd..61ce58a 100644 --- a/lib/views/widgets/my_scafold.dart +++ b/lib/views/widgets/my_scafold.dart @@ -9,7 +9,10 @@ class MyScafolld extends StatelessWidget { super.key, required this.title, required this.body, - this.action = const Icon(Icons.clear), + this.action = const Icon( + Icons.clear, + color: AppColor.secondaryColor, + ), required this.isleading, }); diff --git a/lib/views/widgets/my_textField.dart b/lib/views/widgets/my_textField.dart index f27d0e6..0c56d79 100644 --- a/lib/views/widgets/my_textField.dart +++ b/lib/views/widgets/my_textField.dart @@ -41,7 +41,7 @@ class MyTextForm extends StatelessWidget { hintText: hint.tr, ), validator: (value) { - if (value!.isEmpty || value.length != 10) { + if (value!.isEmpty) { return 'Please enter $label.'.tr; } return null; diff --git a/pubspec.lock b/pubspec.lock index 20fb1d2..a674d53 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -161,6 +161,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" + calendar_builder: + dependency: "direct main" + description: + name: calendar_builder + sha256: "4b94a20d7e8136b84cd62fb7c7752f4a723b67a4b7ed3c3c14c2615e6e6a4653" + url: "https://pub.dev" + source: hosted + version: "0.0.6" camera: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 6880b37..22b3aaa 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -48,6 +48,7 @@ dependencies: image_cropper: ^4.0.1 envied: ^0.5.2 cached_network_image: ^3.3.0 + calendar_builder: ^0.0.6