diff --git a/android/app/build.gradle b/android/app/build.gradle index df48ab5..9a87acb 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 22 targetSdkVersion flutter.targetSdkVersion - versionCode 28 - versionName '1.4.93' + versionCode 30 + versionName '1.5.30' // manifestPlaceholders = [mapsApiKey: 'android/app/src/main/AndroidManifest.xml'] } diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 830efb7..22ef3bf 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -21,7 +21,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 31 + 32 CFBundleSignature ???? CFBundleURLTypes @@ -36,7 +36,7 @@ CFBundleVersion - 4.0.02 + 4.0.32 FirebaseAppDelegateProxyEnabled NO GMSApiKey diff --git a/lib/constant/box_name.dart b/lib/constant/box_name.dart index b173c7c..225f03f 100644 --- a/lib/constant/box_name.dart +++ b/lib/constant/box_name.dart @@ -19,6 +19,8 @@ class BoxName { static const String durationData = 'durationData'; static const String rideStaticDriverData = 'rideStaticDriverData'; static const String lastTimeStaticThrottle = 'lastTimeStaticThrottle'; + static const String lastTimeCaptainWalletCashOut = + 'lastTimeCaptainWalletCashOut'; static const String tipPercentage = 'tipPercentage'; static const String accountIdStripeConnect = "accountIdStripeConnect"; static const String faceDetectTimes = "faceDetectTimes"; diff --git a/lib/constant/colors.dart b/lib/constant/colors.dart index 0f666de..1fbb03f 100644 --- a/lib/constant/colors.dart +++ b/lib/constant/colors.dart @@ -4,7 +4,7 @@ class AppColor { static const Color primaryColor = Colors.black; // Slightly softer red static const Color secondaryColor = Color.fromARGB(255, 255, 255, 255); static const Color accentColor = - Color.fromARGB(255, 185, 169, 169); // Google Green + Color.fromARGB(255, 231, 84, 84); // Google Green static const Color backgroundColor = Color(0xFFF5F5F5); // Light grey background static const Color redColor = Color(0xFFEA4335); // Google Red diff --git a/lib/constant/style.dart b/lib/constant/style.dart index 2374c1d..3477e82 100644 --- a/lib/constant/style.dart +++ b/lib/constant/style.dart @@ -1,6 +1,7 @@ import 'package:SEFER/constant/box_name.dart'; import 'package:SEFER/main.dart'; import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; import 'colors.dart'; class AppStyle { @@ -8,22 +9,30 @@ class AppStyle { fontWeight: FontWeight.bold, fontSize: 40, color: AppColor.accentColor, - fontFamily: box.read(BoxName.lang) == 'ar' ? 'mohanad' : 'josefin'); + fontFamily: box.read(BoxName.lang) == 'ar' + ? 'mohanad' + : GoogleFonts.josefinSans().fontFamily); static TextStyle headTitle2 = TextStyle( fontWeight: FontWeight.bold, fontSize: 26, color: AppColor.primaryColor, - fontFamily: box.read(BoxName.lang) == 'ar' ? 'mohanad' : 'josefin'); + fontFamily: box.read(BoxName.lang) == 'ar' + ? 'mohanad' + : GoogleFonts.josefinSans().fontFamily); static TextStyle title = TextStyle( fontWeight: FontWeight.normal, fontSize: box.read(BoxName.lang) == 'ar' ? 14 : 16, color: AppColor.primaryColor, - fontFamily: box.read(BoxName.lang) == 'ar' ? 'mohanad' : 'josefin'); + fontFamily: box.read(BoxName.lang) == 'ar' + ? 'mohanad' + : GoogleFonts.josefinSans().fontFamily); static TextStyle subtitle = TextStyle( fontWeight: FontWeight.bold, fontSize: 13, color: AppColor.primaryColor, - fontFamily: box.read(BoxName.lang) == 'ar' ? 'mohanad' : 'josefin'); + fontFamily: box.read(BoxName.lang) == 'ar' + ? 'mohanad' + : GoogleFonts.josefinSans().fontFamily); static TextStyle number = const TextStyle( fontWeight: FontWeight.bold, fontSize: 14, diff --git a/lib/controller/auth/captin/login_captin_controller.dart b/lib/controller/auth/captin/login_captin_controller.dart index 947f091..3c2cc47 100644 --- a/lib/controller/auth/captin/login_captin_controller.dart +++ b/lib/controller/auth/captin/login_captin_controller.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import 'dart:math'; +import 'package:SEFER/constant/colors.dart'; import 'package:SEFER/controller/functions/location_background_controller.dart'; import 'package:SEFER/views/auth/captin/cards/sms_signup.dart'; import 'package:SEFER/views/auth/captin/register_captin.dart'; @@ -178,6 +179,7 @@ class LoginCaptinController extends GetxController { } } else { print('res is null'); + Get.snackbar('failure'.tr, '', backgroundColor: AppColor.redColor); isloading = false; update(); } diff --git a/lib/controller/auth/google_sign.dart b/lib/controller/auth/google_sign.dart index 0a6aed5..a1bd633 100644 --- a/lib/controller/auth/google_sign.dart +++ b/lib/controller/auth/google_sign.dart @@ -41,7 +41,7 @@ class GoogleSignInHelper { if (googleUser != null) { await _handleSignUp(googleUser); // if (box.read(BoxName.countryCode) == 'Egypt') { - Get.find().loginFromSignInGoogle( + await Get.find().loginFromSignInGoogle( box.read(BoxName.driverID).toString(), box.read(BoxName.emailDriver).toString(), ); diff --git a/lib/controller/functions/sms_egypt_controller.dart b/lib/controller/functions/sms_egypt_controller.dart index 9978e83..edc32d6 100644 --- a/lib/controller/functions/sms_egypt_controller.dart +++ b/lib/controller/functions/sms_egypt_controller.dart @@ -18,7 +18,7 @@ class SmsEgyptController extends GetxController { "password": AK.smsPasswordEgypt, //'E)Pu=an/@Z', "message": "${AppInformation.appName} app code is $otp\ncopy it to app", "language": box.read(BoxName.lang) == 'en' ? "e" : 'r', - "sender": "Sefer", // todo add sefer sender name + "sender": "SEFER EGY", // todo add sefer sender name "receiver": "2$phone" }); diff --git a/lib/controller/home/captin/duration_controller .dart b/lib/controller/home/captin/duration_controller .dart index 9d15fcd..f0ea364 100644 --- a/lib/controller/home/captin/duration_controller .dart +++ b/lib/controller/home/captin/duration_controller .dart @@ -1,5 +1,6 @@ import 'dart:convert'; +import 'package:SEFER/views/widgets/elevated_btn.dart'; import 'package:fl_chart/fl_chart.dart'; import 'package:get/get.dart'; import 'package:SEFER/constant/box_name.dart'; @@ -85,34 +86,46 @@ class DurationController extends GetxController { link: AppLink.getRidesDriverByDay, payload: {'driver_id': box.read(BoxName.driverID)}, ); - jsonData2 = jsonDecode(res); - var jsonResponse = jsonDecode(res) as Map; - isLoading = false; - // print(jsonResponse); - final List jsonData = jsonResponse['message']; - rideCountData = jsonData.map((item) { - return MonthlyRideModel.fromJson(item); - }).toList(); - ridePriceDriverData = jsonData.map((item) { - return MonthlyPriceDriverModel.fromJson(item); - }).toList(); + if (res != 'failure') { + jsonData2 = jsonDecode(res); + var jsonResponse = jsonDecode(res) as Map; + isLoading = false; + // print(jsonResponse); + final List jsonData = jsonResponse['message']; + rideCountData = jsonData.map((item) { + return MonthlyRideModel.fromJson(item); + }).toList(); + ridePriceDriverData = jsonData.map((item) { + return MonthlyPriceDriverModel.fromJson(item); + }).toList(); - final List spots = rideCountData - .map((data) => FlSpot( - data.day.toDouble(), - data.countRide.toDouble(), - )) - .toList(); - chartRideCount = spots; - final List spotsDriverPrices = ridePriceDriverData - .map((data) => FlSpot( - data.day.toDouble(), - data.pricePerDay.toDouble(), - )) - .toList(); - chartRidePriceDriver = spotsDriverPrices; + final List spots = rideCountData + .map((data) => FlSpot( + data.day.toDouble(), + data.countRide.toDouble(), + )) + .toList(); + chartRideCount = spots; + final List spotsDriverPrices = ridePriceDriverData + .map((data) => FlSpot( + data.day.toDouble(), + data.pricePerDay.toDouble(), + )) + .toList(); + chartRidePriceDriver = spotsDriverPrices; - update(); // Notify the observers about the data and loading state change + update(); // Notify the observers about the data and loading state change + } else { + Get.defaultDialog( + title: 'No data yet!'.tr, + middleText: '', + confirm: MyElevatedButton( + title: 'OK'.tr, + onPressed: () { + Get.back(); + Get.back(); + })); + } } List parseData(List json) { diff --git a/lib/controller/local/local_controller.dart b/lib/controller/local/local_controller.dart index df4f047..41621fc 100644 --- a/lib/controller/local/local_controller.dart +++ b/lib/controller/local/local_controller.dart @@ -9,6 +9,7 @@ class LocaleController extends GetxController { Locale? language; String countryCode = ''; void restartApp() { + // Get.offAll(MyApp); runApp(const MyApp()); } diff --git a/lib/controller/local/translations.dart b/lib/controller/local/translations.dart index 011ae32..99fe580 100644 --- a/lib/controller/local/translations.dart +++ b/lib/controller/local/translations.dart @@ -4,6 +4,10 @@ class MyTranslation extends Translations { @override Map> get keys => { "ar": { + "fromBudget": "من الميزانية", + "You must restart the app to change the language.": + "يجب إعادة تشغيل التطبيق لتغيير اللغة", + "hours before trying again.": "ساعة قبل المحاولة مرة أخرى", "Transaction failed": "فشل المعاملة", "Wallet Type": "نوع المحفظة", "Enter your wallet number": "أدخل رقم محفظتك", diff --git a/lib/views/Rate/ride_calculate_driver.dart b/lib/views/Rate/ride_calculate_driver.dart index e4fd378..b7af184 100644 --- a/lib/views/Rate/ride_calculate_driver.dart +++ b/lib/views/Rate/ride_calculate_driver.dart @@ -23,271 +23,288 @@ class RideCalculateDriver extends StatelessWidget { child: GetBuilder( builder: (durationController) => durationController.isLoading ? const Center(child: MyCircularProgressIndicator()) - : ListView( - // mainAxisAlignment: MainAxisAlignment.start, - // crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Text( - '${'Average of Hours of'.tr} ${AppInformation.appName}${' is ON for this month'.tr}${' ${durationController.jsonData1['message'][0]['day'].toString().split('-')[1]}'.tr}', - style: AppStyle.title, - textAlign: TextAlign.center, - ), - Padding( - padding: const EdgeInsets.all(6), - child: Container( - decoration: AppStyle.boxDecoration1, - height: Get.height * .4, - child: LineChart( - duration: const Duration(milliseconds: 150), - curve: Curves.ease, - LineChartData( - lineBarsData: [ - LineChartBarData( - isStepLineChart: true, - spots: durationController.chartData, - isCurved: true, - color: - Colors.deepPurpleAccent, // Custom color - barWidth: 3, // Thinner line - dotData: const FlDotData( - show: true), // Show dots on each point - belowBarData: BarAreaData( - // Add gradient fill below the line - show: true, - color: AppColor.deepPurpleAccent, - ), - isStrokeJoinRound: true, - shadow: const BoxShadow( - color: AppColor.yellowColor, - blurRadius: 4, - offset: Offset(2, 2), - ), - ), - ], - showingTooltipIndicators: const [], - titlesData: FlTitlesData( - show: true, - topTitles: AxisTitles( - axisNameWidget: Text( - 'Days'.tr, - style: AppStyle.title, - ), - axisNameSize: 30, - ), - bottomTitles: AxisTitles( - axisNameWidget: Text( - 'Total Hours on month'.tr, - style: AppStyle.title, - ), - axisNameSize: 30, - sideTitles: const SideTitles( - reservedSize: 30, showTitles: true)), - leftTitles: AxisTitles( - axisNameWidget: Text( - 'Counts of Hours on days'.tr, - style: AppStyle.title, - ), - axisNameSize: 30, - sideTitles: const SideTitles( - reservedSize: 30, showTitles: true)), - ), - gridData: const FlGridData( - show: true, - ), - borderData: FlBorderData( - show: true, - border: const Border( - bottom: - BorderSide(color: AppColor.accentColor), - left: BorderSide(color: AppColor.accentColor), - ), - ), - ), + : durationController.jsonData1.isEmpty || + durationController.jsonData2.isEmpty + ? Center( + child: Text('No data yet!'.tr), + ) + : ListView( + // mainAxisAlignment: MainAxisAlignment.start, + // crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + '${'Average of Hours of'.tr} ${AppInformation.appName}${' is ON for this month'.tr}${' ${durationController.jsonData1['message'][0]['day'].toString().split('-')[1]}'.tr}', + style: AppStyle.title, + textAlign: TextAlign.center, ), - ), - ), - const SizedBox( - height: 5, - ), - Padding( - padding: const EdgeInsets.all(6), - child: Container( - decoration: AppStyle.boxDecoration1, - height: Get.height * .4, - child: LineChart( - duration: const Duration(milliseconds: 150), - curve: Curves.ease, - LineChartData( - lineBarsData: [ - LineChartBarData( - spots: durationController.chartRideCount, - // isCurved: true, - color: - Colors.deepPurpleAccent, // Custom color - barWidth: 3, // Thinner line - dotData: const FlDotData( - show: true), // Show dots on each point - belowBarData: BarAreaData( - // Add gradient fill below the line - show: true, - color: AppColor.deepPurpleAccent, - ), - isStrokeJoinRound: true, - shadow: const BoxShadow( - color: AppColor.yellowColor, - blurRadius: 4, - offset: Offset(2, 2), - ), - ), - ], - showingTooltipIndicators: const [], - titlesData: FlTitlesData( - show: true, - topTitles: AxisTitles( - axisNameWidget: Text( - 'Days'.tr, - style: AppStyle.title, - ), - axisNameSize: 30, - // sideTitles: const SideTitles( - // reservedSize: 30, showTitles: true), - ), - bottomTitles: AxisTitles( - axisNameWidget: Text( - '${"Total rides on month".tr} = ${durationController.jsonData2['message'][0]['totalCount'].toString()}' - .tr, - style: AppStyle.title, - ), - axisNameSize: 30, - sideTitles: const SideTitles( - reservedSize: 30, showTitles: true)), - leftTitles: AxisTitles( - axisNameWidget: Text( - 'Counts of rides on days'.tr, - style: AppStyle.title, - ), - axisNameSize: 30, - sideTitles: const SideTitles( - reservedSize: 30, showTitles: true)), - ), - gridData: const FlGridData( - show: true, - ), - borderData: FlBorderData( - show: true, - border: const Border( - bottom: - BorderSide(color: AppColor.accentColor), - left: BorderSide(color: AppColor.accentColor), - ), - ), - ), - ), - ), - ), - const SizedBox( - height: 5, - ), - Padding( - padding: const EdgeInsets.all(6), - child: Container( - decoration: AppStyle.boxDecoration1, - height: Get.height * .4, - child: LineChart( - duration: const Duration(milliseconds: 150), - curve: Curves.ease, - LineChartData( - lineBarsData: [ - LineChartBarData( - isStepLineChart: true, - spots: - durationController.chartRidePriceDriver, - isCurved: true, - isStrokeCapRound: true, - preventCurveOverShooting: true, - color: - Colors.deepPurpleAccent, // Custom color - barWidth: 3, // Thinner line - dotData: const FlDotData( - show: true), // Show dots on each point - belowBarData: BarAreaData( - // Add gradient fill below the line - show: true, - color: AppColor.deepPurpleAccent, - ), - isStrokeJoinRound: true, - shadow: const BoxShadow( - color: AppColor.yellowColor, - blurRadius: 4, - offset: Offset(2, 2), - ), - ), - ], - showingTooltipIndicators: const [], - titlesData: FlTitlesData( - show: true, - topTitles: AxisTitles( - axisNameWidget: Text( - 'Days'.tr, - style: AppStyle.title, - ), - axisNameSize: 30, - // sideTitles: const SideTitles( - // reservedSize: 30, showTitles: true), - ), - bottomTitles: AxisTitles( - axisNameWidget: Text( - '${"Total budgets on month".tr} = ${durationController.jsonData2['message'][0]['totalPrice'].toString()}' - .tr, - style: AppStyle.title, - ), - axisNameSize: 30, - sideTitles: const SideTitles( - reservedSize: 30, showTitles: true)), - leftTitles: AxisTitles( - axisNameWidget: Text( - 'Counts of budgets on days'.tr, - style: AppStyle.title, - ), - axisNameSize: 30, - sideTitles: const SideTitles( - reservedSize: 30, showTitles: true)), - ), - gridData: const FlGridData( - show: true, - ), - borderData: FlBorderData( - show: true, - border: const Border( - bottom: - BorderSide(color: AppColor.accentColor), - left: BorderSide(color: AppColor.accentColor), - ), - ), - ), - ), - ), - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: Container( + Padding( + padding: const EdgeInsets.all(6), + child: Container( decoration: AppStyle.boxDecoration1, - child: durationController.monthlyList.isEmpty - ? SizedBox( - height: Get.height * .2, - child: Center( - child: Text( - "No data yet".tr, + height: Get.height * .4, + child: LineChart( + duration: const Duration(milliseconds: 150), + curve: Curves.ease, + LineChartData( + lineBarsData: [ + LineChartBarData( + isStepLineChart: true, + spots: durationController.chartData, + isCurved: true, + color: Colors + .deepPurpleAccent, // Custom color + barWidth: 3, // Thinner line + dotData: const FlDotData( + show: + true), // Show dots on each point + belowBarData: BarAreaData( + // Add gradient fill below the line + show: true, + color: AppColor.deepPurpleAccent, + ), + isStrokeJoinRound: true, + shadow: const BoxShadow( + color: AppColor.yellowColor, + blurRadius: 4, + offset: Offset(2, 2), + ), + ), + ], + showingTooltipIndicators: const [], + titlesData: FlTitlesData( + show: true, + topTitles: AxisTitles( + axisNameWidget: Text( + 'Days'.tr, + style: AppStyle.title, + ), + axisNameSize: 30, + ), + bottomTitles: AxisTitles( + axisNameWidget: Text( + 'Total Hours on month'.tr, style: AppStyle.title, ), + axisNameSize: 30, + sideTitles: const SideTitles( + reservedSize: 30, + showTitles: true)), + leftTitles: AxisTitles( + axisNameWidget: Text( + 'Counts of Hours on days'.tr, + style: AppStyle.title, + ), + axisNameSize: 30, + sideTitles: const SideTitles( + reservedSize: 30, + showTitles: true)), + ), + gridData: const FlGridData( + show: true, + ), + borderData: FlBorderData( + show: true, + border: const Border( + bottom: BorderSide( + color: AppColor.accentColor), + left: BorderSide( + color: AppColor.accentColor), + ), + ), + ), + ), + ), + ), + const SizedBox( + height: 5, + ), + Padding( + padding: const EdgeInsets.all(6), + child: Container( + decoration: AppStyle.boxDecoration1, + height: Get.height * .4, + child: LineChart( + duration: const Duration(milliseconds: 150), + curve: Curves.ease, + LineChartData( + lineBarsData: [ + LineChartBarData( + spots: durationController.chartRideCount, + // isCurved: true, + color: Colors + .deepPurpleAccent, // Custom color + barWidth: 3, // Thinner line + dotData: const FlDotData( + show: + true), // Show dots on each point + belowBarData: BarAreaData( + // Add gradient fill below the line + show: true, + color: AppColor.deepPurpleAccent, ), - ) - : DriverStatsTable( - monthlyList: - durationController.monthlyList, - ))) - ], - ), + isStrokeJoinRound: true, + shadow: const BoxShadow( + color: AppColor.yellowColor, + blurRadius: 4, + offset: Offset(2, 2), + ), + ), + ], + showingTooltipIndicators: const [], + titlesData: FlTitlesData( + show: true, + topTitles: AxisTitles( + axisNameWidget: Text( + 'Days'.tr, + style: AppStyle.title, + ), + axisNameSize: 30, + // sideTitles: const SideTitles( + // reservedSize: 30, showTitles: true), + ), + bottomTitles: AxisTitles( + axisNameWidget: Text( + '${"Total rides on month".tr} = ${durationController.jsonData2['message'][0]['totalCount'].toString()}' + .tr, + style: AppStyle.title, + ), + axisNameSize: 30, + sideTitles: const SideTitles( + reservedSize: 30, + showTitles: true)), + leftTitles: AxisTitles( + axisNameWidget: Text( + 'Counts of rides on days'.tr, + style: AppStyle.title, + ), + axisNameSize: 30, + sideTitles: const SideTitles( + reservedSize: 30, + showTitles: true)), + ), + gridData: const FlGridData( + show: true, + ), + borderData: FlBorderData( + show: true, + border: const Border( + bottom: BorderSide( + color: AppColor.accentColor), + left: BorderSide( + color: AppColor.accentColor), + ), + ), + ), + ), + ), + ), + const SizedBox( + height: 5, + ), + Padding( + padding: const EdgeInsets.all(6), + child: Container( + decoration: AppStyle.boxDecoration1, + height: Get.height * .4, + child: LineChart( + duration: const Duration(milliseconds: 150), + curve: Curves.ease, + LineChartData( + lineBarsData: [ + LineChartBarData( + isStepLineChart: true, + spots: durationController + .chartRidePriceDriver, + isCurved: true, + isStrokeCapRound: true, + preventCurveOverShooting: true, + color: Colors + .deepPurpleAccent, // Custom color + barWidth: 3, // Thinner line + dotData: const FlDotData( + show: + true), // Show dots on each point + belowBarData: BarAreaData( + // Add gradient fill below the line + show: true, + color: AppColor.deepPurpleAccent, + ), + isStrokeJoinRound: true, + shadow: const BoxShadow( + color: AppColor.yellowColor, + blurRadius: 4, + offset: Offset(2, 2), + ), + ), + ], + showingTooltipIndicators: const [], + titlesData: FlTitlesData( + show: true, + topTitles: AxisTitles( + axisNameWidget: Text( + 'Days'.tr, + style: AppStyle.title, + ), + axisNameSize: 30, + // sideTitles: const SideTitles( + // reservedSize: 30, showTitles: true), + ), + bottomTitles: AxisTitles( + axisNameWidget: Text( + '${"Total budgets on month".tr} = ${durationController.jsonData2['message'][0]['totalPrice'].toString()}' + .tr, + style: AppStyle.title, + ), + axisNameSize: 30, + sideTitles: const SideTitles( + reservedSize: 30, + showTitles: true)), + leftTitles: AxisTitles( + axisNameWidget: Text( + 'Counts of budgets on days'.tr, + style: AppStyle.title, + ), + axisNameSize: 30, + sideTitles: const SideTitles( + reservedSize: 30, + showTitles: true)), + ), + gridData: const FlGridData( + show: true, + ), + borderData: FlBorderData( + show: true, + border: const Border( + bottom: BorderSide( + color: AppColor.accentColor), + left: BorderSide( + color: AppColor.accentColor), + ), + ), + ), + ), + ), + ), + Padding( + padding: const EdgeInsets.all(8.0), + child: Container( + decoration: AppStyle.boxDecoration1, + child: durationController.monthlyList.isEmpty + ? SizedBox( + height: Get.height * .2, + child: Center( + child: Text( + "No data yet".tr, + style: AppStyle.title, + ), + ), + ) + : DriverStatsTable( + monthlyList: + durationController.monthlyList, + ))) + ], + ), ) // BarChartWidget(), ), diff --git a/lib/views/home/Captin/home_captain/widget/left_menu_map_captain.dart b/lib/views/home/Captin/home_captain/widget/left_menu_map_captain.dart index 6dc17ab..e14a960 100644 --- a/lib/views/home/Captin/home_captain/widget/left_menu_map_captain.dart +++ b/lib/views/home/Captin/home_captain/widget/left_menu_map_captain.dart @@ -6,9 +6,7 @@ import 'package:get/get.dart'; import 'package:SEFER/controller/home/captin/home_captain_controller.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; -import '../../../../../constant/char_map.dart'; import '../../../../../constant/colors.dart'; -import '../../../../../constant/credential.dart'; import '../../../../Rate/ride_calculate_driver.dart'; import '../../../../../controller/functions/location_controller.dart'; @@ -23,7 +21,7 @@ GetBuilder leftMainMenuCaptainIcons() { // duration: const Duration(microseconds: 200), // width: controller.widthMapTypeAndTraffic, // decoration: BoxDecoration( - // border: Border.all(), + // border: Border.all(color: AppColor.accentColor), // color: AppColor.secondaryColor, // borderRadius: BorderRadius.circular(15)), // child: IconButton( @@ -56,7 +54,7 @@ GetBuilder leftMainMenuCaptainIcons() { duration: const Duration(microseconds: 200), width: controller.widthMapTypeAndTraffic, decoration: BoxDecoration( - border: Border.all(), + border: Border.all(color: AppColor.accentColor), color: AppColor.secondaryColor, borderRadius: BorderRadius.circular(15)), child: IconButton( @@ -67,6 +65,7 @@ GetBuilder leftMainMenuCaptainIcons() { icon: const Icon( Icons.satellite_alt, size: 29, + color: AppColor.accentColor, ), ), ), @@ -78,7 +77,7 @@ GetBuilder leftMainMenuCaptainIcons() { width: controller.widthMapTypeAndTraffic, decoration: BoxDecoration( color: AppColor.secondaryColor, - border: Border.all(), + border: Border.all(color: AppColor.accentColor), borderRadius: BorderRadius.circular(15)), child: IconButton( onPressed: () { @@ -88,6 +87,7 @@ GetBuilder leftMainMenuCaptainIcons() { icon: const Icon( Icons.streetview_sharp, size: 29, + color: AppColor.accentColor, ), ), ), @@ -99,7 +99,7 @@ GetBuilder leftMainMenuCaptainIcons() { width: controller.widthMapTypeAndTraffic, decoration: BoxDecoration( color: AppColor.secondaryColor, - border: Border.all(), + border: Border.all(color: AppColor.accentColor), borderRadius: BorderRadius.circular(15)), child: IconButton( onPressed: () { @@ -112,6 +112,7 @@ GetBuilder leftMainMenuCaptainIcons() { icon: const Icon( Icons.location_on, size: 29, + color: AppColor.accentColor, ), ), ), @@ -123,7 +124,7 @@ GetBuilder leftMainMenuCaptainIcons() { width: controller.widthMapTypeAndTraffic, decoration: BoxDecoration( color: AppColor.secondaryColor, - border: Border.all(), + border: Border.all(color: AppColor.accentColor), borderRadius: BorderRadius.circular(15)), child: IconButton( onPressed: () { @@ -147,7 +148,11 @@ GetBuilder leftMainMenuCaptainIcons() { ''); } }, - icon: const Icon(FontAwesome5.chart_bar), + icon: const Icon( + FontAwesome5.chart_bar, + size: 29, + color: AppColor.accentColor, + ), ), ), ], diff --git a/lib/views/home/drawer_menu_page.dart b/lib/views/home/drawer_menu_page.dart deleted file mode 100644 index 21eb298..0000000 --- a/lib/views/home/drawer_menu_page.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:SEFER/constant/colors.dart'; - -class DrawerMenuPage extends StatelessWidget { - const DrawerMenuPage({super.key}); - - @override - Widget build(BuildContext context) { - return Container( - height: 500, - color: AppColor.secondaryColor.withOpacity(.5), - child: Column( - children: [ - Container( - height: 100, - color: AppColor.secondaryColor, - ), - Container( - color: Colors.transparent, - ) - ], - ), - ); - } -} diff --git a/lib/views/home/my_wallet/card_wallet_widget.dart b/lib/views/home/my_wallet/card_wallet_widget.dart new file mode 100644 index 0000000..4c4f4aa --- /dev/null +++ b/lib/views/home/my_wallet/card_wallet_widget.dart @@ -0,0 +1,200 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +import '../../../constant/box_name.dart'; +import '../../../constant/colors.dart'; +import '../../../constant/info.dart'; +import '../../../constant/style.dart'; +import '../../../controller/home/payment/captain_wallet_controller.dart'; +import '../../../controller/home/payment/paymob_payout.dart'; +import '../../../main.dart'; +import '../../widgets/elevated_btn.dart'; +import '../../widgets/my_textField.dart'; +import 'walet_captain.dart'; + +class CardSeferWalletDriver extends StatelessWidget { + const CardSeferWalletDriver({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + GetBuilder(builder: (captainWalletController) { + return InkWell( + onTap: () async { + final now = DateTime.now(); + DateTime? lastRequestTime = + box.read(BoxName.lastTimeCaptainWalletCashOut); + + if (lastRequestTime == null || + now.difference(lastRequestTime).inHours >= 24) { + // Update the last request time to now + lastRequestTime = now; + await box.write( + BoxName.lastTimeCaptainWalletCashOut, lastRequestTime); + box.write(BoxName.cvvCode, 1111); + if (double.parse( + Get.find().totalAmountVisa) > + 100) { + Get.defaultDialog( + barrierDismissible: false, + title: 'Do you want to collect your earnings?'.tr, + titleStyle: AppStyle.title, + content: Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'Total wallet is '.tr, + style: AppStyle.title, + ), + const SizedBox( + width: 5, + ), + Text( + Get.find() + .totalAmountVisa, + style: AppStyle.number, + ), + ], + ), + const SizedBox( + height: 5, + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'Wallet Type'.tr, + style: AppStyle.title, + ), + const SizedBox( + width: 5, + ), + MyDropDown(), + ], + ), + Form( + key: captainWalletController.formKey, + child: MyTextForm( + controller: captainWalletController.issurWallet, + label: "Enter your wallet number".tr, + hint: "Enter your wallet number".tr, + type: TextInputType.phone, + ), + ) + ], + ), + confirm: MyElevatedButton( + title: 'Ok'.tr, + onPressed: () async { + if (captainWalletController.formKey.currentState! + .validate()) { + if (double.parse(Get.find() + .totalAmountVisa) > + 100) { + Get.back(); + String amountAfter5LE = (double.parse( + Get.find() + .totalAmountVisa) - + 5) + .toStringAsFixed(0); + await Get.put(PaymobPayout()) + .payToWalletDriverAll( + amountAfter5LE, + captainWalletController.issurWallet.toString(), + captainWalletController.issurWallet.toString(), + ); + } else { + Get.snackbar( + '${'The Amount is less than'.tr}${box.read(BoxName.countryCode) == 'Egypt' ? '100' : '20'}', + '', + backgroundColor: AppColor.yellowColor); + } + } + }, + kolor: AppColor.greenColor, + ), + cancel: MyElevatedButton( + title: 'cancel'.tr, + onPressed: () { + Get.back(); + }, + kolor: AppColor.redColor, + )); + } else { + { + Get.snackbar( + '${'The Amount is less than'.tr}${box.read(BoxName.countryCode) == 'Egypt' ? '100' : '20'}', + '', + backgroundColor: AppColor.yellowColor); + } + } + } else { + // Optionally show a message or handle the throttling case + final hoursLeft = 24 - now.difference(lastRequestTime).inHours; + Get.snackbar( + '${'Please wait'.tr} $hoursLeft ${"hours before trying again.".tr}', + ''); + } + }, + child: Container( + width: Get.width * .85, + height: Get.height * .25, + decoration: BoxDecoration( + color: AppColor.deepPurpleAccent, + borderRadius: const BorderRadius.all(Radius.circular(12)), + gradient: const LinearGradient( + colors: [AppColor.blueColor, AppColor.primaryColor]), + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Row( + children: [ + Text( + '${AppInformation.appName} Wallet', + style: AppStyle.headTitle + .copyWith(color: AppColor.primaryColor), + ) + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + '${Get.find().totalAmountVisa}\$' ?? + '0.0 \$', + style: AppStyle.headTitle2, + ) + ], + ), + Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + box.read(BoxName.nameDriver), + style: AppStyle.title, + ), + Text( + "Cash Out".tr, + style: AppStyle.title, + ) + ], + ), + ) + ], + ), + ), + ); + }), + ], + ); + } +} diff --git a/lib/views/home/my_wallet/walet_captain.dart b/lib/views/home/my_wallet/walet_captain.dart index 0ad5dff..3dca79a 100644 --- a/lib/views/home/my_wallet/walet_captain.dart +++ b/lib/views/home/my_wallet/walet_captain.dart @@ -18,6 +18,7 @@ import 'package:path/path.dart'; import '../../../controller/payment/driver_payment_controller.dart'; import '../../widgets/my_scafold.dart'; +import 'card_wallet_widget.dart'; import 'points_captain.dart'; import 'weekly_payment_page.dart'; @@ -424,157 +425,6 @@ class WalletCaptain extends StatelessWidget { } } -class CardSeferWalletDriver extends StatelessWidget { - const CardSeferWalletDriver({ - super.key, - }); - - @override - Widget build(BuildContext context) { - return Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - GetBuilder(builder: (captainWalletController) { - return InkWell( - onTap: () { - Get.defaultDialog( - barrierDismissible: false, - title: 'Do you want to collect your earnings?'.tr, - titleStyle: AppStyle.title, - content: Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - 'Total wallet is '.tr, - style: AppStyle.title, - ), - const SizedBox( - width: 5, - ), - Text( - Get.find().totalAmountVisa, - style: AppStyle.number, - ), - ], - ), - const SizedBox( - height: 5, - ), - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - 'Wallet Type'.tr, - style: AppStyle.title, - ), - const SizedBox( - width: 5, - ), - MyDropDown(), - ], - ), - Form( - key: captainWalletController.formKey, - child: MyTextForm( - controller: captainWalletController.issurWallet, - label: "Enter your wallet number".tr, - hint: "Enter your wallet number".tr, - type: TextInputType.phone, - ), - ) - ], - ), - confirm: MyElevatedButton( - title: 'Ok'.tr, - onPressed: () async { - if (captainWalletController.formKey.currentState! - .validate()) { - if (double.parse(Get.find() - .totalAmountVisa) > - 100) { - Get.back(); - await Get.put(PaymobPayout()).payToWalletDriverAll( - Get.find().totalAmountVisa, - captainWalletController.issurWallet.toString(), - captainWalletController.issurWallet.toString(), - ); - } else { - Get.snackbar( - '${'The Amount is less than'.tr}${box.read(BoxName.countryCode) == 'Egypt' ? '100' : '20'}', - '', - backgroundColor: AppColor.yellowColor); - } - } - }, - kolor: AppColor.greenColor, - ), - cancel: MyElevatedButton( - title: 'cancel'.tr, - onPressed: () { - Get.back(); - }, - kolor: AppColor.redColor, - )); - }, - child: Container( - width: Get.width * .85, - height: Get.height * .25, - decoration: BoxDecoration( - color: AppColor.deepPurpleAccent, - borderRadius: const BorderRadius.all(Radius.circular(12)), - gradient: const LinearGradient( - colors: [AppColor.blueColor, AppColor.primaryColor]), - ), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Row( - children: [ - Text( - '${AppInformation.appName} Wallet', - style: AppStyle.headTitle - .copyWith(color: AppColor.primaryColor), - ) - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - '${Get.find().totalAmountVisa}\$' ?? - '0.0 \$', - style: AppStyle.headTitle2, - ) - ], - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - box.read(BoxName.nameDriver), - style: AppStyle.title, - ), - Text( - "Cash Out".tr, - style: AppStyle.title, - ) - ], - ), - ) - ], - ), - ), - ); - }), - ], - ); - } -} - class MyDropDown extends StatefulWidget { @override _MyDropDownState createState() => _MyDropDownState(); diff --git a/lib/views/home/my_wallet/weekly_payment_page.dart b/lib/views/home/my_wallet/weekly_payment_page.dart index c8f0033..1ed9b0d 100644 --- a/lib/views/home/my_wallet/weekly_payment_page.dart +++ b/lib/views/home/my_wallet/weekly_payment_page.dart @@ -52,63 +52,71 @@ class WeeklyPaymentPage extends StatelessWidget { const SizedBox( height: 10, ), - SizedBox( - height: Get.height * .8, - child: ListView.builder( - itemCount: controller.weeklyList.length, - itemBuilder: (BuildContext context, int index) { - var list = controller.weeklyList[index]; - return Padding( - padding: const EdgeInsets.all(2.0), - child: Container( - decoration: AppStyle.boxDecoration1, - child: Padding( - padding: const EdgeInsets.all(4), - child: Column( - children: [ - Card( - elevation: 2, - color: list['paymentMethod'] == 'visa' - ? AppColor.blueColor - : AppColor.secondaryColor, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Text( - list['paymentMethod'] == 'Remainder' - ? 'Remainder'.tr - : list['paymentMethod'], - style: AppStyle.title, - ), - ), - ), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Card( - child: Padding( - padding: - const EdgeInsets.all(8.0), - child: Text( - list['amount'], - style: AppStyle.number, - ), + Padding( + padding: const EdgeInsets.symmetric( + horizontal: 10, vertical: 5), + child: SizedBox( + height: Get.height * .75, + child: ListView.builder( + itemCount: controller.weeklyList.length, + itemBuilder: (BuildContext context, int index) { + var list = controller.weeklyList[index]; + return Padding( + padding: const EdgeInsets.all(2.0), + child: Container( + decoration: AppStyle.boxDecoration1, + child: Padding( + padding: const EdgeInsets.all(4), + child: Column( + children: [ + Card( + elevation: 2, + color: list['paymentMethod'] == 'visa' + ? AppColor.blueColor + : AppColor.secondaryColor, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + list['paymentMethod'] == + 'Remainder' + ? 'Remainder'.tr + : list['paymentMethod'] == + 'fromBudget' + ? 'fromBudget'.tr + : list['paymentMethod'], + style: AppStyle.title, ), ), - Text( - DateFormat('yyyy-MM-dd hh:mm a') - .format(DateTime.parse( - list['dateUpdated'])), - style: AppStyle.number, - ), - ], - ), - ], + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Card( + child: Padding( + padding: + const EdgeInsets.all(8.0), + child: Text( + list['amount'], + style: AppStyle.number, + ), + ), + ), + Text( + DateFormat('yyyy-MM-dd hh:mm a') + .format(DateTime.parse( + list['dateUpdated'])), + style: AppStyle.number, + ), + ], + ), + ], + ), ), ), - ), - ); - }, + ); + }, + ), ), ), ], diff --git a/lib/views/lang/languages.dart b/lib/views/lang/languages.dart index 236ea42..6bc1cd8 100644 --- a/lib/views/lang/languages.dart +++ b/lib/views/lang/languages.dart @@ -26,8 +26,8 @@ class Language extends StatelessWidget { const SizedBox(height: 20), MyElevatedButton( title: 'العربية', - onPressed: () { - controller.changeLang("ar"); + onPressed: () async { + await controller.changeLang("ar"); Get.defaultDialog( title: 'You should restart app to change language'.tr, titleStyle: AppStyle.title, diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index 4a898a1..670b3e4 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -227,7 +227,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0920; - LastUpgradeCheck = 1300; + LastUpgradeCheck = 1510; ORGANIZATIONNAME = ""; TargetAttributes = { 331C80D4294CF70F00263BE5 = { diff --git a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 2676655..6d42e35 100644 --- a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@