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 @@