diff --git a/.env b/.env index d3728c0..773f98f 100644 --- a/.env +++ b/.env @@ -14,4 +14,6 @@ stripe_publishableKe=vg_cjzc_57I0TCIYNJPlIFQ5ZB5j2x4vQpU5FVYF9f9Vou74a60BJAQvH5Q llamaKey=LL-JfdiCXFpcLXNe87cSGQwGE0piZ9Zw179tVjEP1KMxQgVWGxD9Ixz3m8kkKaO5Kdi serverPHP=https://ride.mobile-app.store Cohere=Qfrhx9d5YVHiy4uEuK4wiFc9kIuFFlvc5A6WVzPK -ClaudeAiAPI=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 \ No newline at end of file +ClaudeAiAPI=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 +payPalClientId=AWj9MdPaA5Djpx8gOkvBn2qhP-3KvfB6W-l8USTsm19Xi2NhkNkE9QzosOvTPTsKjCMNffgpqStUA1-x +payPalSecret=EKkasSl9O61lrfrbaJfXp1B-CIs2Rv71J0WPouxxugi38DsWaMhWpovJxN2ftYPQ0l6v9eoBvnyWkemp diff --git a/android/app/build.gradle b/android/app/build.gradle index 7ef8c4d..0b6e25e 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -55,8 +55,8 @@ android { // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion 23 targetSdkVersion flutter.targetSdkVersion - versionCode 12 - versionName '1.1.6' + versionCode 14 + versionName '1.3.7' } signingConfigs { diff --git a/lib/constant/box_name.dart b/lib/constant/box_name.dart index 256256f..458403d 100644 --- a/lib/constant/box_name.dart +++ b/lib/constant/box_name.dart @@ -6,6 +6,7 @@ class BoxName { static const String password = "password"; static const String passwordDriver = "passwordDriver"; static const String agreeTerms = "agreeTerms"; + static const String accountIdStripeConnect = "accountIdStripeConnect"; static const String faceDetectTimes = "faceDetectTimes"; static const String sosPhonePassenger = "sosPhonePassenger"; static const String passengerID = "pasengerID"; diff --git a/lib/controller/auth/login_controller.dart b/lib/controller/auth/login_controller.dart index cf62c7d..12d72e9 100644 --- a/lib/controller/auth/login_controller.dart +++ b/lib/controller/auth/login_controller.dart @@ -53,10 +53,14 @@ class LoginController extends GetxController { if (jsonDecoeded['data'][0]['verified'] == 1) { box.write(BoxName.passengerID, jsonDecoeded['data'][0]['id']); box.write(BoxName.email, jsonDecoeded['data'][0]['email']); - box.write(BoxName.name, jsonDecoeded['data'][0]['first_name']); + box.write( + BoxName.name, + jsonDecoeded['data'][0]['first_name'] + + ' ' + + jsonDecoeded['data'][0]['last_name']); box.write(BoxName.phone, jsonDecoeded['data'][0]['phone']); SecureStorage().saveData(BoxName.password, passwordController.text); - Get.offAll(() => MapPagePassenger()); + Get.offAll(() => const MapPagePassenger()); isloading = false; update(); print(box.read(BoxName.passengerID).toString()); @@ -78,7 +82,7 @@ class LoginController extends GetxController { 'email': emailController.text, 'token': randomNumber.toString(), }).then((value) => print(value)); - Get.to(() => VerifyEmailPage()); + Get.to(() => const VerifyEmailPage()); }, ); } diff --git a/lib/controller/auth/register_controller.dart b/lib/controller/auth/register_controller.dart index 286554d..3a9b97d 100644 --- a/lib/controller/auth/register_controller.dart +++ b/lib/controller/auth/register_controller.dart @@ -70,11 +70,11 @@ class RegisterController extends GetxController { void register() async { if (formKey.currentState!.validate()) { var res = await CRUD().post(link: AppLink.signUp, payload: { - 'first_name': firstNameController.text, - 'last_name': lastNameController.text, - 'email': emailController.text, - 'phone': phoneController.text, - 'password': passwordController.text, + 'first_name': firstNameController.text.toString(), + 'last_name': lastNameController.text.toString(), + 'email': emailController.text.toString(), + 'phone': phoneController.text.toString(), + 'password': passwordController.text.toString(), 'gender': gender, 'site': siteController.text, 'birthdate': birthDate, diff --git a/lib/controller/functions/crud.dart b/lib/controller/functions/crud.dart index 8063697..3eb9abc 100644 --- a/lib/controller/functions/crud.dart +++ b/lib/controller/functions/crud.dart @@ -126,8 +126,13 @@ class CRUD { 'Authorization': 'Bearer ${AK.secretKey}', }, ); - - return response.body; + if (response.statusCode == 200) { + print(response); + return response.body; + } else { + print('eeeeeeeeerrrrorrrr ${response.statusCode}'); + print(response.body); + } } Future post({ diff --git a/lib/controller/home/captin/map_driver_controller.dart b/lib/controller/home/captin/map_driver_controller.dart index e280289..06686c6 100644 --- a/lib/controller/home/captin/map_driver_controller.dart +++ b/lib/controller/home/captin/map_driver_controller.dart @@ -50,8 +50,8 @@ class MapDriverController extends GetxController { double progress = 0; double progressToPassenger = 0; bool isRideBegin = false; - int progressTimerToShowPassengerInfoWindowFromDriver = 20; - int remainingTimeToShowPassengerInfoWindowFromDriver = 20; + int progressTimerToShowPassengerInfoWindowFromDriver = 25; + int remainingTimeToShowPassengerInfoWindowFromDriver = 25; int remainingTimeToPassenger = 60; bool isDriverNearPassengerStart = false; GoogleMapController? mapController; @@ -206,7 +206,7 @@ class MapDriverController extends GetxController { }); rideIsBeginPassengerTimer(); double pointsSubstraction = 0; - pointsSubstraction = double.parse(paymentAmount) * -100; + pointsSubstraction = double.parse(paymentAmount) * -1; var res = await CRUD().post(link: AppLink.addDriversWallet, payload: { 'paymentID': 'rideId$rideId', 'amount': (pointsSubstraction).toString(), diff --git a/lib/controller/home/map_passenger_controller.dart b/lib/controller/home/map_passenger_controller.dart index 454937a..0a6553f 100644 --- a/lib/controller/home/map_passenger_controller.dart +++ b/lib/controller/home/map_passenger_controller.dart @@ -154,7 +154,7 @@ class MapPassengerController extends GetxController { // Format the message. String message = - 'Hi! This is ${box.read(BoxName.name)}. I am using ${box.read(AppInformation.appName)} to ride with ${dataCarsLocationByPassenger['message'][carsOrder]['first_name'].toString()} as the driver. ${dataCarsLocationByPassenger['message'][carsOrder]['first_name'].toString()} is driving a ${dataCarsLocationByPassenger['message'][carsOrder]['model'].toString()} with license plate ${dataCarsLocationByPassenger['message'][carsOrder]['license_plate'].toString()}. I am currently located at $myLocation. If you need to reach me, please contact the driver directly at $driverPhone.'; + 'Hi! This is ${box.read(BoxName.name)}.\n I am using ${box.read(AppInformation.appName)} to ride with ${dataCarsLocationByPassenger['message'][carsOrder]['first_name'].toString()} as the driver. ${dataCarsLocationByPassenger['message'][carsOrder]['first_name'].toString()} \nis driving a ${dataCarsLocationByPassenger['message'][carsOrder]['model'].toString()}\n with license plate ${dataCarsLocationByPassenger['message'][carsOrder]['license_plate'].toString()}.\n I am currently located at $myLocation.\n If you need to reach me, please contact the driver directly at\n\n $driverPhone.'; // Launch the URL to send the SMS. launchCommunication('whatsapp', to, message); @@ -586,6 +586,7 @@ class MapPassengerController extends GetxController { isCashConfirmPageShown = false; isPassengerChosen = false; isCashSelectedBeforeConfirmRide = false; + isPickerShown = false; timeToPassengerFromDriverAfterApplied = 0; update(); } else { @@ -596,6 +597,7 @@ class MapPassengerController extends GetxController { "order_id": rideId.toString(), // Convert to String "status": 'Cancel' }); + isPickerShown = false; rideConfirm = false; shouldFetch = false; isPassengerChosen = false; diff --git a/lib/controller/payment/payment_controller.dart b/lib/controller/payment/payment_controller.dart index 8cd24f5..3439d25 100644 --- a/lib/controller/payment/payment_controller.dart +++ b/lib/controller/payment/payment_controller.dart @@ -1,5 +1,5 @@ import 'dart:convert'; - +import 'package:http/http.dart' as http; import 'package:flutter/material.dart'; import 'package:flutter_paypal/flutter_paypal.dart'; import 'package:flutter_stripe/flutter_stripe.dart'; @@ -27,6 +27,10 @@ class PaymentController extends GetxController { int? selectedAmount = 0; List totalPassengerWalletDetails = []; String passengerTotalWalletAmount = ''; + String ip = '1'; + DateTime now = DateTime.now(); + late int timestamp; + void updateSelectedAmount(int value) { selectedAmount = value; update(); @@ -200,7 +204,11 @@ class PaymentController extends GetxController { Future getClientSecret(String amount, currency) async { var res = await CRUD().postStripe( link: 'https://api.stripe.com/v1/payment_intents', - payload: {'amount': amount, 'currency': currency}, + payload: { + 'amount': amount, + 'currency': currency, + 'payment_method_types[0]': 'card' + }, ); // Convert the res object to a JSON object @@ -240,11 +248,11 @@ class PaymentController extends GetxController { builder: (BuildContext context) => UsePaypal( sandboxMode: true, clientId: - "AW1TdvpSGbIM5iP4HJNI5TyTmwpY9Gv9dYw8_8yW5lYIbCqf326vrkrp0ce9TAqjEGMHiV3OqJM_aRT0", + "AWj9MdPaA5Djpx8gOkvBn2qhP-3KvfB6W-l8USTsm19Xi2NhkNkE9QzosOvTPTsKjCMNffgpqStUA1-x", secretKey: - "EHHtTDjnmTZATYBPiGzZC_AZUfMpMAzj2VZUeqlFUrRJA_C0pQNCxDccB5qoRQSEdcOnnKQhycuOWdP9", - returnURL: "https://samplesite.com/return", - cancelURL: "https://samplesite.com/cancel", + "EKkasSl9O61lrfrbaJfXp1B-CIs2Rv71J0WPouxxugi38DsWaMhWpovJxN2ftYPQ0l6v9eoBvnyWkemp", + returnURL: "https://mobile-app.store", + cancelURL: "https://mobile-app.store/cancel", transactions: [ { "amount": { @@ -318,8 +326,128 @@ class PaymentController extends GetxController { } } + Map licenseDetailsMap = {}; + Future getLicenseInfo() async { + var res = await CRUD().get( + link: AppLink.getLicense, + payload: {'driverID': box.read(BoxName.driverID)}); + licenseDetailsMap = jsonDecode(res); + // print(licenseDetailsMap['message'][0]['name']); + } + + Future createConnectAccount() async { + String url = 'https://api.stripe.com/v1/accounts'; + await getLicenseInfo(); + DateTime dob = + DateTime.parse(licenseDetailsMap['message'][0]['dateOfBirth']); + int currentTimestamp = + (DateTime.now().millisecondsSinceEpoch / 1000).round(); + print('Current Unix timestamp: $currentTimestamp'); + int day = dob.day; + int month = dob.month; + int year = dob.year; + await getIpAddress(); + final body = { + "type": "custom", + "business_profile[name]": box.read(BoxName.nameDriver), + "business_profile[product_description]": "Captain", + "business_profile[support_address][city]": "San Francisco", + "business_profile[support_address][country]": "US", + "business_profile[support_address][line1]": + licenseDetailsMap['message'][0]['address'].toString().trim()[0], + "business_profile[support_address][postal_code]": + licenseDetailsMap['message'][0]['postalCode'], + "business_profile[support_address][state]": "MA", + "business_profile[support_email]": "support@mobile-app.store", + "business_profile[support_phone]": "555-123-4567", + "business_profile[url]": "https://mobile-app.store", + "business_type": "individual", + "capabilities[card_payments][requested]": "true", + "capabilities[transfers][requested]": "true", + "company[address][city]": "San Francisco", + "company[address][country]": "US", + "company[address][line1]": "122 Main St", + "company[address][postal_code]": "94111", + "company[address][state]": "MA", + "company[name]": AppInformation.companyName, + "country": "us", + "default_currency": "usd", + "email": "support@mobile.store", + // "individual[ssn]": "123-45-6789", // + "individual[id_number]": licenseDetailsMap['message'][0]['documentNo'], + // "individual[id_type]": "drivers_license", // + "individual[address][city]": "San Francisco", + "individual[address][country]": "US", + "individual[address][line1]": licenseDetailsMap['message'][0]['address'], + // "individual[address][postal_code]": licenseDetailsMap['message'][0] + // ['postalCode'], + "individual[address][state]": "CA", + // "individual[ssn_last_4]": '1111', //////// + "individual[dob][day]": day.toString(), + "individual[dob][month]": month.toString(), + "individual[dob][year]": year.toString(), + "individual[email]": box.read(BoxName.emailDriver), + "individual[first_name]": + licenseDetailsMap['message'][0]['name'].toString().split(' ')[0], + "individual[gender]": + licenseDetailsMap['message'][0]['sex'] == 'M' ? 'male' : 'female', + "individual[last_name]": + licenseDetailsMap['message'][0]['name'].toString().split(' ')[1], + // "individual[phone]": box.read(BoxName.phoneDriver),//////////// + "tos_acceptance[date]": currentTimestamp.toString(), + "tos_acceptance[ip]": ip.toString() + }; + + final response = await CRUD().postStripe( + link: url, + payload: body, + ); + final responseData = jsonDecode(response); + print(responseData); + final accountId = responseData['id']; + box.write(BoxName.accountIdStripeConnect, accountId); + print('accountId = $accountId'); + return accountId; + } + + Future createTransactionToCaptain( + String amount, String account) async { + String url = 'https://api.stripe.com//v1/transfers'; + + final body = { + 'amount': amount, //amount + 'currency': 'aed', + 'destination': account //'acct_1OKIjQRgcWrsdyDT' //account id + }; + + final response = await CRUD().postStripe( + link: url, + payload: body, + ); + final responseData = jsonDecode(response); + print(responseData); + final transactionId = responseData['id']; + box.write(BoxName.accountIdStripeConnect, transactionId); + print('transactionId = $transactionId'); + return transactionId; + } + + Future getIpAddress() async { + var url = Uri.parse('https://api.ipify.org?format=json'); + + var response = await http.get(url); + + if (response.statusCode == 200) { + ip = jsonDecode(response.body)['ip']; + print(ip); + } else { + print('Request failed with status: ${response.statusCode}'); + } + } + @override void onInit() { + timestamp = now.millisecondsSinceEpoch; getPassengerWallet(); final localAuth = LocalAuthentication(); super.onInit(); diff --git a/lib/controller/profile/profile_controller.dart b/lib/controller/profile/profile_controller.dart index 92db26c..eddc816 100644 --- a/lib/controller/profile/profile_controller.dart +++ b/lib/controller/profile/profile_controller.dart @@ -57,6 +57,9 @@ class ProfileController extends GetxController { 'id': prfoileData['id'].toString(), columnName: txtController.text, }); + if (columnName == 'first_name') { + box.write(BoxName.name, txtController.text); + } Get.back(); txtController.clear(); }, diff --git a/lib/views/home/Captin/mapDriverWidgets/sos_connect.dart b/lib/views/home/Captin/mapDriverWidgets/sos_connect.dart index bfe3827..d28ed4b 100644 --- a/lib/views/home/Captin/mapDriverWidgets/sos_connect.dart +++ b/lib/views/home/Captin/mapDriverWidgets/sos_connect.dart @@ -41,11 +41,8 @@ class SosConnect extends StatelessWidget { onTap: () { launchCommunication( 'whatsapp', - '962' + - box.read(BoxName - .phoneDriver), //todo add number from driver - 'Hello this is Captain'.tr + - ' ${box.read(BoxName.nameDriver)}'); + '+962${box.read(BoxName.phoneDriver)}', //todo add number from driver + '${'Hello this is Captain'.tr} ${box.read(BoxName.nameDriver)}'); }, child: const Icon( FontAwesome.whatsapp, diff --git a/lib/views/home/map_page_passenger.dart b/lib/views/home/map_page_passenger.dart index 5c125f2..16eaf26 100644 --- a/lib/views/home/map_page_passenger.dart +++ b/lib/views/home/map_page_passenger.dart @@ -11,7 +11,7 @@ import 'map_widget.dart/cash_confirm_bottom_page.dart'; import 'map_widget.dart/driver_card_from_passenger.dart'; import 'map_widget.dart/google_map_passenger_widget.dart'; import 'map_widget.dart/left_main_menu_icons.dart'; //Ml@6Pt@11 -import 'map_widget.dart/main_bottom_Menu_map.dart'; +import 'map_widget.dart/main_bottom_menu_map.dart'; import 'map_widget.dart/map_menu_widget.dart'; import 'map_widget.dart/menu_map_page.dart'; import 'map_widget.dart/payment_method.page.dart'; @@ -99,17 +99,19 @@ class PickerIconOnMap extends StatelessWidget { @override Widget build(BuildContext context) { return GetBuilder( - builder: (controller) => Positioned( - bottom: 0, - top: 0, - left: 0, - right: 0, - child: controller.isPickerShown - ? const Icon( - Icons.add_location, - color: Colors.purple, - ) - : const SizedBox(), - )); + builder: (controller) => controller.isPickerShown + ? Positioned( + bottom: 0, + top: 0, + left: 0, + right: 0, + child: controller.isPickerShown + ? const Icon( + Icons.add_location, + color: Colors.purple, + ) + : const SizedBox(), + ) + : const SizedBox()); } } diff --git a/lib/views/home/map_widget.dart/form_search_places.dart b/lib/views/home/map_widget.dart/form_search_places.dart index 988ef32..fc685d9 100644 --- a/lib/views/home/map_widget.dart/form_search_places.dart +++ b/lib/views/home/map_widget.dart/form_search_places.dart @@ -21,8 +21,16 @@ GetBuilder formSearchPlaces() { const BoxDecoration(color: AppColor.secondaryColor), child: TextField( decoration: InputDecoration( + border: const OutlineInputBorder( + borderRadius: BorderRadius.only(), + gapPadding: 4, + borderSide: BorderSide( + color: AppColor.redColor, + width: 2, + )), suffixIcon: const Icon(Icons.search), - hintText: 'Type here Place'.tr, + hintText: 'Search for your destination'.tr, + hintStyle: AppStyle.title, hintMaxLines: 1, prefixIcon: IconButton( onPressed: () { @@ -46,6 +54,19 @@ GetBuilder formSearchPlaces() { ), ), ), + controller.places.isEmpty + ? InkWell( + onTap: () { + controller.changeMainBottomMenuMap(); + controller.changePickerShown(); + }, + child: Text( + 'Choose from Map'.tr, + style: + AppStyle.title.copyWith(color: AppColor.blueColor), + ), + ) + : const SizedBox(), Container( height: controller.places.isNotEmpty ? controller.height : 0, color: AppColor.secondaryColor, @@ -60,6 +81,7 @@ GetBuilder formSearchPlaces() { title: '${'Are You sure to ride to'.tr} ${res['name']}', middleText: '', + titleStyle: AppStyle.title, confirm: MyElevatedButton( title: 'Confirm'.tr, onPressed: () async { diff --git a/lib/views/home/map_widget.dart/main_bottom_Menu_map.dart b/lib/views/home/map_widget.dart/main_bottom_Menu_map.dart index a975002..53e4a27 100644 --- a/lib/views/home/map_widget.dart/main_bottom_Menu_map.dart +++ b/lib/views/home/map_widget.dart/main_bottom_Menu_map.dart @@ -1,4 +1,3 @@ -import 'package:animated_text_kit/animated_text_kit.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:ride/constant/box_name.dart'; @@ -67,80 +66,139 @@ class MainBottomMenuMap extends StatelessWidget { child: DefaultTextStyle( style: AppStyle.title, child: Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - SizedBox( - height: 30, - child: Text( - '${'Where to'.tr} ${box.read(BoxName.name)}') - // AnimatedTextKit( - // animatedTexts: [ - // ScaleAnimatedText( - // '${'Where to'.tr} ${box.read(BoxName.name)}'), - // // WavyAnimatedText( - // // '${'Where to'.tr} ${box.read(BoxName.name)}'), - // // FlickerAnimatedText( - // // '${'Where to'.tr} ${box.read(BoxName.name)}'), - // // WavyAnimatedText( - // // '${'Where to'.tr} ${box.read(BoxName.name)}'), - // ], - // isRepeatingAnimation: true, - // onTap: () { - // print("Tap Event"); - // }, - // ), + child: controller.isPickerShown + ? TextButton( + onPressed: () async { + controller.clearPolyline(); + controller.data = []; + await controller.getMap( + '${controller.myLocation.latitude},${controller.myLocation.longitude}', + '${controller.newMyLocation.latitude},${controller.newMyLocation.longitude}', + ); + controller.places = []; + controller.placeController.clear(); + + controller.showBottomSheet1(); + Get.back(); + controller.showBottomSheet1(); + // controller.changeMainBottomMenuMap(); + }, + child: Row( + children: [ + IconButton( + onPressed: () { + controller + .changeMainBottomMenuMap(); + }, + icon: + controller.isMainBottomMenuMap + ? const Icon( + Icons + .arrow_circle_up_rounded, + size: 35, + ) + : const Icon( + Icons + .arrow_circle_down_rounded, + size: 35, + ), + ), + Text( + "Click here to go to this location" + .tr, + style: AppStyle.title, + ), + ], ), - Row( - mainAxisAlignment: - MainAxisAlignment.center, - children: [ - controller.noCarString == false - ? Text( - 'Nearest Car for you about '.tr) - : Container( - decoration: BoxDecoration( - borderRadius: - BorderRadius.circular(12), - color: AppColor.redColor, - ), - child: Padding( - padding: - const EdgeInsets.all(6), - child: Text( - 'No Car in your site. Sorry!' - .tr, - style: AppStyle.title - .copyWith( - color: AppColor - .secondaryColor), + ) + : Column( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + SizedBox( + height: 30, + child: Row( + children: [ + IconButton( + onPressed: () { + controller + .changeMainBottomMenuMap(); + }, + icon: controller + .isMainBottomMenuMap + ? const Icon( + Icons + .arrow_circle_up_rounded, + size: 35, + ) + : const Icon( + Icons + .arrow_circle_down_rounded, + size: 35, + ), ), - ), + Text( + '${'Where to'.tr} ${box.read(BoxName.name)}'), + ], + )), + Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + const SizedBox( + width: 10, ), - controller.noCarString == false - ? Container( - decoration: BoxDecoration( - border: Border.all( + controller.noCarString == false + ? Text( + 'Nearest Car for you about ' + .tr) + : Container( + decoration: BoxDecoration( + borderRadius: + BorderRadius + .circular(12), color: AppColor.redColor, - width: 3)), - child: Padding( - padding: - const EdgeInsets.all(4), - child: Text((controller - .nearestCar != - null - ? controller - .durationByPassenger - .toString() - : 'N/A')), - ), - ) - : const SizedBox(), - ], - ) - ], - ), + ), + child: Padding( + padding: + const EdgeInsets + .all(6), + child: Text( + 'No Car in your site. Sorry!' + .tr, + style: AppStyle.title + .copyWith( + color: AppColor + .secondaryColor), + ), + ), + ), + controller.noCarString == false + ? Container( + decoration: BoxDecoration( + border: Border.all( + color: AppColor + .redColor, + width: 3)), + child: Padding( + padding: + const EdgeInsets + .all(4), + child: Text((controller + .nearestCar != + null + ? controller + .durationByPassenger + .toString() + : 'N/A')), + ), + ) + : const SizedBox(), + ], + ) + ], + ), ), )), ), diff --git a/lib/views/home/map_widget.dart/map_menu_widget.dart b/lib/views/home/map_widget.dart/map_menu_widget.dart index 7221b7d..4815b23 100644 --- a/lib/views/home/map_widget.dart/map_menu_widget.dart +++ b/lib/views/home/map_widget.dart/map_menu_widget.dart @@ -1,7 +1,9 @@ import 'package:flutter/material.dart'; +import 'package:flutter_font_icons/flutter_font_icons.dart'; import 'package:get/get.dart'; import 'package:get/get_rx/src/rx_typedefs/rx_typedefs.dart'; import 'package:ride/constant/style.dart'; +import 'package:ride/views/auth/captin/register_captin.dart'; import 'package:ride/views/home/my_wallet/passenger_wallet.dart'; import 'package:ride/views/home/profile/feed_back_page.dart'; import 'package:ride/views/home/profile/order_history.dart'; @@ -159,9 +161,11 @@ class MapMenuWidget extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ IconMainPageMap( - onTap: () {}, - title: 'Settings', - icon: Icons.settings, + onTap: () { + Get.to(const RegisterCaptin()); + }, + title: 'Captain', + icon: WeatherIcons.wi_moon_14, ), IconMainPageMap( onTap: () { diff --git a/lib/views/home/map_widget.dart/payment_method.page.dart b/lib/views/home/map_widget.dart/payment_method.page.dart index 1689975..43f18a5 100644 --- a/lib/views/home/map_widget.dart/payment_method.page.dart +++ b/lib/views/home/map_widget.dart/payment_method.page.dart @@ -126,7 +126,7 @@ class MyCreditCardWidget extends StatelessWidget { Get.put(CreditCardController()); return GetBuilder( builder: (controller) => Container( - height: Get.height * .35, + height: Get.height * .4, width: Get.width * .9, decoration: const BoxDecoration( color: AppColor.secondaryColor, @@ -344,6 +344,9 @@ class MyCreditCardWidget extends StatelessWidget { ), ], ), + // const SizedBox( + // height: 20, + // ), MyElevatedButton( title: 'Save'.tr, onPressed: () { diff --git a/lib/views/home/map_widget.dart/ride_begin_passenger.dart b/lib/views/home/map_widget.dart/ride_begin_passenger.dart index f0f91f6..204f25f 100644 --- a/lib/views/home/map_widget.dart/ride_begin_passenger.dart +++ b/lib/views/home/map_widget.dart/ride_begin_passenger.dart @@ -150,7 +150,7 @@ class RideBeginPassenger extends StatelessWidget { })); } else { controller.sendWhatsapp( - box.read(BoxName.sosPhonePassenger)); + box.read(BoxName.sosPhonePassenger).toString()); } }, icon: const Icon( diff --git a/lib/views/home/my_wallet/passenger_wallet.dart b/lib/views/home/my_wallet/passenger_wallet.dart index 2e1b6d4..e6207b1 100644 --- a/lib/views/home/my_wallet/passenger_wallet.dart +++ b/lib/views/home/my_wallet/passenger_wallet.dart @@ -78,37 +78,37 @@ class PassengerWallet extends StatelessWidget { const SizedBox( height: 10, ), - GetBuilder( - builder: (creditCardController) => Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - MyElevatedButton( - title: 'Save Credit Card'.tr, - onPressed: () async { - if (controller.formKey.currentState! - .validate()) { - SecureStorage().saveData( - BoxName.cardNumber, - creditCardController - .cardNumberController.text); - SecureStorage().saveData( - BoxName.cardHolderName, - creditCardController - .cardHolderNameController.text); - SecureStorage().saveData( - BoxName.cvvCode, - creditCardController - .cvvCodeController.text); - SecureStorage().saveData( - BoxName.expiryDate, - creditCardController - .expiryDateController.text); - } - }, - ), - ], - )), - // MyElevatedButton( + // GetBuilder( + // builder: (creditCardController) => Row( + // mainAxisAlignment: MainAxisAlignment.center, + // children: [ + // MyElevatedButton( + // title: 'Save Credit Card'.tr, + // onPressed: () async { + // if (controller.formKey.currentState! + // .validate()) { + // SecureStorage().saveData( + // BoxName.cardNumber, + // creditCardController + // .cardNumberController.text); + // SecureStorage().saveData( + // BoxName.cardHolderName, + // creditCardController + // .cardHolderNameController.text); + // SecureStorage().saveData( + // BoxName.cvvCode, + // creditCardController + // .cvvCodeController.text); + // SecureStorage().saveData( + // BoxName.expiryDate, + // creditCardController + // .expiryDateController.text); + // } + // }, + // ), + // ], + // )), + // // MyElevatedButton( // title: 'Charge your Wallet', // onPressed: () { // Get.defaultDialog( @@ -197,7 +197,23 @@ class PassengerWallet extends StatelessWidget { }, ), )), - PassengerWalletDialoge() + PassengerWalletDialoge(), + GetBuilder( + builder: (controller) => Positioned( + top: 440, + right: 100, + left: 100, + child: Column( + children: [ + MyElevatedButton( + title: 'createConnectAccount', + onPressed: () { + controller.createConnectAccount(); + }, + ), + ], + ), + )) ], ); } diff --git a/lib/views/home/my_wallet/passenger_wallet_dialoge.dart b/lib/views/home/my_wallet/passenger_wallet_dialoge.dart index 8bee4d2..bcf5a86 100644 --- a/lib/views/home/my_wallet/passenger_wallet_dialoge.dart +++ b/lib/views/home/my_wallet/passenger_wallet_dialoge.dart @@ -57,7 +57,7 @@ class PassengerWalletDialoge extends StatelessWidget { }, ), Text( - '10 and get 4% discount'.tr, + '10\$ and get 3% discount'.tr, style: AppStyle.title, ), ], @@ -78,7 +78,7 @@ class PassengerWalletDialoge extends StatelessWidget { }, ), Text( - '20 and get 6% discount'.tr, + '20\$ and get 4% discount'.tr, style: AppStyle.title, ), ], @@ -98,7 +98,7 @@ class PassengerWalletDialoge extends StatelessWidget { }, ), Text( - '40 and get 8% discount'.tr, + '40\$ and get 6% discount'.tr, style: AppStyle.title, ), ], @@ -118,7 +118,7 @@ class PassengerWalletDialoge extends StatelessWidget { }, ), Text( - '100 and get 11% discount'.tr, + '100\$ and get 9% discount'.tr, style: AppStyle.title, ), ], @@ -142,9 +142,12 @@ class PassengerWalletDialoge extends StatelessWidget { onPressed: () { if (controller.selectedAmount != 0) { controller.makePaymentStripe( - controller.selectedAmount as int, - 'USD', - () => controller.addPassengerWallet()); + controller.selectedAmount as int, 'USD', + () { + controller.addPassengerWallet(); + controller.changePromoSheetDialogue(); + controller.getPassengerWallet(); + }); } else { Toast.show( context, diff --git a/lib/views/home/my_wallet/walet_captain.dart b/lib/views/home/my_wallet/walet_captain.dart index 55f14d6..2f4133a 100644 --- a/lib/views/home/my_wallet/walet_captain.dart +++ b/lib/views/home/my_wallet/walet_captain.dart @@ -1,13 +1,15 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:ride/constant/box_name.dart'; import 'package:ride/constant/colors.dart'; import 'package:ride/constant/style.dart'; import 'package:ride/controller/home/payment/captain_wallet_controller.dart'; import 'package:ride/controller/home/payment/credit_card_controller.dart'; -import 'package:ride/views/home/map_widget.dart/payment_method.page.dart'; +import 'package:ride/controller/payment/payment_controller.dart'; +import 'package:ride/main.dart'; +import 'package:ride/views/widgets/elevated_btn.dart'; import 'package:ride/views/widgets/mycircular.dart'; -import '../../../controller/payment/payment_controller.dart'; import '../../widgets/my_scafold.dart'; import 'points_captain.dart'; @@ -88,6 +90,33 @@ class WaletCaptain extends StatelessWidget { ), ], )), + const SizedBox( + height: 30, + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + MyElevatedButton( + title: 'Create Wallet to recive your money', + onPressed: () async { + PaymentController paymentController = + Get.find(); + paymentController.createConnectAccount(); + }), + ], + ), + TextButton( + onPressed: () async { + PaymentController paymentController = + Get.put(PaymentController()); + await paymentController.createTransactionToCaptain( + '1000', + box.read(BoxName.accountIdStripeConnect)); + }, + child: const Text( + "Pay to Captain", + ), + ) ], ), )) diff --git a/lib/views/home/profile/order_history.dart b/lib/views/home/profile/order_history.dart index 59c050e..3b9fcef 100644 --- a/lib/views/home/profile/order_history.dart +++ b/lib/views/home/profile/order_history.dart @@ -58,14 +58,12 @@ class OrderHistory extends StatelessWidget { onTap: () { String mapUrl = 'https://www.google.com/maps/dir/${rides['start_location']}/${rides['end_location']}/'; - print(mapUrl); + // print(mapUrl); launchUrl1(mapUrl); }, - child: Column( - children: [ - Text(rides['start_location']), - Text(rides['end_location']), - ], + child: Text( + 'Click here to Show it in Map', + style: AppStyle.title, ), ), Column( @@ -81,12 +79,13 @@ class OrderHistory extends StatelessWidget { Text( rides['status'], style: rides['status'] != 'Canceled' - ? AppStyle.subtitle + ? AppStyle.subtitle.copyWith( + color: AppColor.greenColor) : AppStyle.subtitle .copyWith(color: AppColor.redColor), ), Text( - rides['price'], + 'Price is ${rides['price']}', style: AppStyle.subtitle, ), ], diff --git a/lib/views/home/profile/passenger_profile_page.dart b/lib/views/home/profile/passenger_profile_page.dart index c4a54cb..c12e2d2 100644 --- a/lib/views/home/profile/passenger_profile_page.dart +++ b/lib/views/home/profile/passenger_profile_page.dart @@ -20,11 +20,6 @@ class PassengerProfilePage extends StatelessWidget { Get.put(ProfileController()); return MyScafolld( isleading: true, - action: MyElevatedButton( - title: 'Delete My Account'.tr, - onPressed: () { - LogOut().deleteMyAccount(box.read(BoxName.passengerID).toString()); - }), title: 'My Profile'.tr, body: [ GetBuilder( @@ -184,6 +179,7 @@ class PassengerProfilePage extends StatelessWidget { controller.prfoileData['sosPhone']); }, ), + // const Spacer(), ], ), ), @@ -191,13 +187,24 @@ class PassengerProfilePage extends StatelessWidget { )), Positioned( left: 70, - bottom: 5, + bottom: 240, right: 70, child: MyElevatedButton( title: 'Sign Out'.tr, onPressed: () { LogOut().logOut(); }), + ), + Positioned( + left: 70, + bottom: 140, + right: 70, + child: MyElevatedButton( + title: 'Delete My Account'.tr, + onPressed: () { + LogOut() + .deleteMyAccount(box.read(BoxName.passengerID).toString()); + }), ) ], ); diff --git a/lib/views/notification/notification_page.dart b/lib/views/notification/notification_page.dart index fcadc0b..9f6bc5f 100644 --- a/lib/views/notification/notification_page.dart +++ b/lib/views/notification/notification_page.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; 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'; @@ -29,18 +30,8 @@ class NotificationPage extends StatelessWidget { ), body: [ Container( - color: AppColor.accentColor.withOpacity(.7), + decoration: AppStyle.boxDecoration, ), - Positioned( - top: 100, - bottom: 100, - left: 50, - right: 50, - child: Container( - height: Get.height * .6, - color: AppColor.secondaryColor, - ), - ) ], ); } diff --git a/windows/flutter/CMakeLists.txt b/windows/flutter/CMakeLists.txt index 930d207..903f489 100644 --- a/windows/flutter/CMakeLists.txt +++ b/windows/flutter/CMakeLists.txt @@ -10,6 +10,11 @@ include(${EPHEMERAL_DIR}/generated_config.cmake) # https://github.com/flutter/flutter/issues/57146. set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + # === Flutter Library === set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") @@ -92,7 +97,7 @@ add_custom_command( COMMAND ${CMAKE_COMMAND} -E env ${FLUTTER_TOOL_ENVIRONMENT} "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" - windows-x64 $ + ${FLUTTER_TARGET_PLATFORM} $ VERBATIM ) add_custom_target(flutter_assemble DEPENDS