This commit is contained in:
Hamza-Ayed
2024-11-17 22:13:31 +02:00
parent e8c72d79a9
commit 5aeb3cf685
45 changed files with 856 additions and 284 deletions

View File

@@ -54,8 +54,8 @@ android {
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
minSdk = 23 minSdk = 23
targetSdk = flutter.targetSdkVersion targetSdk = flutter.targetSdkVersion
versionCode = 117 versionCode = 120
versionName = '1.5.17' versionName = '1.5.20'
multiDexEnabled =true multiDexEnabled =true
} }

View File

@@ -555,9 +555,10 @@
BUNDLE_LOADER = "$(TEST_HOST)"; BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1; CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 63CVT8G5P8;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0; MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.mobileapp.store.ride.RunnerTests; PRODUCT_BUNDLE_IDENTIFIER = com.mobileapp.store.ride;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@@ -573,9 +574,10 @@
BUNDLE_LOADER = "$(TEST_HOST)"; BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1; CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 63CVT8G5P8;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0; MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.mobileapp.store.ride.RunnerTests; PRODUCT_BUNDLE_IDENTIFIER = com.mobileapp.store.ride;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
@@ -589,9 +591,10 @@
BUNDLE_LOADER = "$(TEST_HOST)"; BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1; CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 63CVT8G5P8;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0; MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.mobileapp.store.ride.RunnerTests; PRODUCT_BUNDLE_IDENTIFIER = com.mobileapp.store.ride;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";

File diff suppressed because one or more lines are too long

View File

@@ -35,7 +35,7 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>APPL</string> <string>APPL</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>77</string> <string>79</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleURLTypes</key> <key>CFBundleURLTypes</key>
@@ -50,7 +50,7 @@
</dict> </dict>
</array> </array>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>4.0.77</string> <string>4.0.79</string>
<key>FirebaseAppDelegateProxyEnabled</key> <key>FirebaseAppDelegateProxyEnabled</key>
<string>NO</string> <string>NO</string>
<key>GMSApiKey</key> <key>GMSApiKey</key>

View File

@@ -74,7 +74,7 @@ class AppLink {
//-----------------ridessss------------------ //-----------------ridessss------------------
static String addRides = "$ride/rides/add.php"; static String addRides = "$ride/rides/add.php";
static String getRides = "$ride/rides/get.php"; static String getRides = "$ride/rides/get.php";
static String getMishwari = "$ride/ride/mishwari/get.php"; static String getMishwari = "$ride/mishwari/get.php";
static String getTripCountByCaptain = "$ride/rides/getTripCountByCaptain.php"; static String getTripCountByCaptain = "$ride/rides/getTripCountByCaptain.php";
static String getRideOrderID = "$ride/rides/getRideOrderID.php"; static String getRideOrderID = "$ride/rides/getRideOrderID.php";
static String getRideStatus = "$ride/rides/getRideStatus.php"; static String getRideStatus = "$ride/rides/getRideStatus.php";
@@ -196,14 +196,17 @@ class AppLink {
// ===================================== // =====================================
static String addRateToPassenger = "$ride/rate/add.php"; static String addRateToPassenger = "$ride/rate/add.php";
static String addRateToDriver = "$ride/rate/addRateToDriver.php"; static String addRateToDriver = "$ride/rate/addRateToDriver.php";
static String addRateApp = "$ride/rate/add_rate_app.php";
static String sendEmailRateingApp =
"https://api.sefer.live/sefer/ride/rate/sendEmailRateingApp.php";
static String getDriverRate = "$ride/rate/getDriverRate.php"; static String getDriverRate = "$ride/rate/getDriverRate.php";
static String getPassengerRate = "$ride/rate/getPassengerRate.php"; static String getPassengerRate = "$ride/rate/getPassengerRate.php";
////////////////emails ============// ////////////////emails ============//
static String sendEmailToPassengerForTripDetails = static String sendEmailToPassengerForTripDetails =
"$ride/rides/emailToPassengerTripDetail.php"; "https://api.sefer.live/sefer/ride/rides/emailToPassengerTripDetail.php";
static String sendEmailToDrivertransaction = static String sendEmailToDrivertransaction =
"$seferPaymentServer0/Admin/sendEmailToDrivertransaction.php"; "https://api.sefer.live/sefer/Admin/sendEmailToDrivertransaction.php";
// "https://api.sefer.live/sefer/Admin/sendEmailToDrivertransaction.php"; // "https://api.sefer.live/sefer/Admin/sendEmailToDrivertransaction.php";
// =========================================== // ===========================================
static String pathImage = "$server/upload/types/"; static String pathImage = "$server/upload/types/";

View File

@@ -14,6 +14,7 @@ import 'package:share/share.dart';
import '../../../main.dart'; import '../../../main.dart';
import '../../../print.dart'; import '../../../print.dart';
import '../../../views/widgets/error_snakbar.dart';
import '../../functions/launch.dart'; import '../../functions/launch.dart';
import '../../notification/notification_captain_controller.dart'; import '../../notification/notification_captain_controller.dart';
@@ -103,10 +104,11 @@ Download the SEFER app now and enjoy your ride!
// TODO: Implement the actual server upload logic here // TODO: Implement the actual server upload logic here
// Simulating a server request // Simulating a server request
await Future.delayed(Duration(seconds: 2)); await Future.delayed(Duration(seconds: 2));
Get.snackbar('Success'.tr,
mySnackbarSuccess(
'${selectedContacts.length} contacts saved to server'.tr); '${selectedContacts.length} contacts saved to server'.tr);
} catch (e) { } catch (e) {
Get.snackbar('Error'.tr, mySnackeBarError(
'An error occurred while saving contacts to server: $e'.tr); 'An error occurred while saving contacts to server: $e'.tr);
} }
} }
@@ -134,16 +136,13 @@ Download the SEFER app now and enjoy your ride!
update(); update();
if (contacts.isEmpty) { if (contacts.isEmpty) {
Get.snackbar('No contacts available'.tr, mySnackeBarError('Please add contacts to your phone.'.tr);
'Please add contacts to your phone.'.tr);
} }
} else { } else {
Get.snackbar('Permission denied'.tr, mySnackeBarError('Contact permission is required to pick contacts'.tr);
'Contact permission is required to pick contacts'.tr);
} }
} catch (e) { } catch (e) {
Get.snackbar( mySnackeBarError('An error occurred while picking contacts: $e'.tr);
'Error'.tr, 'An error occurred while picking contacts: $e'.tr);
} }
} }
@@ -267,7 +266,7 @@ Download the SEFER app now and enjoy your ride!
void sendInvite() async { void sendInvite() async {
if (invitePhoneController.text.isEmpty) { if (invitePhoneController.text.isEmpty) {
Get.snackbar('Error', 'Please enter an phone address'.tr); mySnackeBarError('Please enter an phone address'.tr);
return; return;
} }
@@ -281,8 +280,7 @@ Download the SEFER app now and enjoy your ride!
if (response != 'failure') { if (response != 'failure') {
var d = jsonDecode(response); var d = jsonDecode(response);
Get.snackbar('Success', 'Invite sent successfully'.tr); mySnackbarSuccess('Invite sent successfully'.tr);
String message = '${'*SEFER DRIVER CODE*'.tr}\n\n' String message = '${'*SEFER DRIVER CODE*'.tr}\n\n'
'${"Use this code in registration".tr}\n' '${"Use this code in registration".tr}\n'
'${"To get a gift for both".tr}\n\n' '${"To get a gift for both".tr}\n\n'
@@ -297,18 +295,14 @@ Download the SEFER app now and enjoy your ride!
invitePhoneController.clear(); invitePhoneController.clear();
} else { } else {
Get.snackbar('Error'.tr, "Invite code already used".tr, mySnackeBarError("Invite code already used".tr);
backgroundColor: AppColor.redColor,
duration: const Duration(seconds: 4));
} }
// } catch (e) {
// Get.snackbar('Error', 'An error occurred'.tr);
// }
} }
void sendInviteToPassenger() async { void sendInviteToPassenger() async {
if (invitePhoneController.text.isEmpty) { if (invitePhoneController.text.isEmpty) {
Get.snackbar('Error', 'Please enter an phone address'.tr); mySnackeBarError('Please enter an phone address'.tr);
return; return;
} }
@@ -323,7 +317,8 @@ Download the SEFER app now and enjoy your ride!
if (response != 'failure') { if (response != 'failure') {
var d = jsonDecode(response); var d = jsonDecode(response);
Get.snackbar('Success', 'Invite sent successfully'.tr);
mySnackbarSuccess('Invite sent successfully'.tr);
String message = '${'*SEFER APP CODE*'.tr}\n\n' String message = '${'*SEFER APP CODE*'.tr}\n\n'
'${"Use this code in registration".tr}\n' '${"Use this code in registration".tr}\n'
@@ -339,13 +334,10 @@ Download the SEFER app now and enjoy your ride!
invitePhoneController.clear(); invitePhoneController.clear();
} else { } else {
Get.snackbar('Error'.tr, "Invite code already used".tr, mySnackeBarError(
backgroundColor: AppColor.redColor, "Invite code already used".tr,
duration: const Duration(seconds: 4)); );
} }
// } catch (e) {
// Get.snackbar('Error', 'An error occurred'.tr);
// }
} }
} }

View File

@@ -1,12 +1,10 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:math'; import 'dart:math';
import 'package:SEFER/constant/colors.dart';
import 'package:SEFER/controller/functions/location_background_controller.dart'; import 'package:SEFER/controller/functions/location_background_controller.dart';
import 'package:SEFER/print.dart';
import 'package:SEFER/views/auth/captin/cards/sms_signup.dart'; import 'package:SEFER/views/auth/captin/cards/sms_signup.dart';
import 'package:SEFER/views/auth/captin/login_captin.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart'; import 'package:SEFER/views/widgets/elevated_btn.dart';
import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@@ -164,7 +162,7 @@ class LoginDriverController extends GetxController {
box.write(BoxName.carTypeOfDriver, 'Pink Bike'); box.write(BoxName.carTypeOfDriver, 'Pink Bike');
} }
} else if (int.parse(jsonDecoeded['data'][0]['year'].toString()) > } else if (int.parse(jsonDecoeded['data'][0]['year'].toString()) >
2017) { 2016) {
if (jsonDecoeded['data'][0]['gender'].toString() != 'Male') { if (jsonDecoeded['data'][0]['gender'].toString() != 'Male') {
box.write(BoxName.carTypeOfDriver, 'Lady'); box.write(BoxName.carTypeOfDriver, 'Lady');
} else { } else {
@@ -172,7 +170,7 @@ class LoginDriverController extends GetxController {
} }
} else if (int.parse(jsonDecoeded['data'][0]['year'].toString()) > } else if (int.parse(jsonDecoeded['data'][0]['year'].toString()) >
2002 && 2002 &&
int.parse(jsonDecoeded['data'][0]['year'].toString()) < 2017) { int.parse(jsonDecoeded['data'][0]['year'].toString()) < 2016) {
box.write(BoxName.carTypeOfDriver, 'Speed'); box.write(BoxName.carTypeOfDriver, 'Speed');
} else if (int.parse(jsonDecoeded['data'][0]['year'].toString()) < } else if (int.parse(jsonDecoeded['data'][0]['year'].toString()) <
2002) { 2002) {
@@ -204,7 +202,7 @@ class LoginDriverController extends GetxController {
'token': box.read(BoxName.tokenDriver), 'token': box.read(BoxName.tokenDriver),
'captain_id': box.read(BoxName.driverID).toString() 'captain_id': box.read(BoxName.driverID).toString()
}); });
CRUD().post( await CRUD().post(
link: link:
"${AppLink.seferAlexandriaServer}/ride/firebase/addDriver.php", "${AppLink.seferAlexandriaServer}/ride/firebase/addDriver.php",
payload: { payload: {
@@ -212,30 +210,29 @@ class LoginDriverController extends GetxController {
'captain_id': 'captain_id':
box.read(BoxName.driverID).toString() box.read(BoxName.driverID).toString()
}); });
CRUD().post( // await CRUD().post(
link: // link:
"${AppLink.seferGizaServer}/ride/firebase/addDriver.php", // "${AppLink.seferGizaServer}/ride/firebase/addDriver.php",
payload: { // payload: {
'token': box.read(BoxName.tokenDriver), // 'token': box.read(BoxName.tokenDriver),
'captain_id': // 'captain_id':
box.read(BoxName.driverID).toString() // box.read(BoxName.driverID).toString()
}); // });
Get.back(); Get.back();
})); }));
} }
} }
Get.off(() => HomeCaptain()); Get.off(() => HomeCaptain());
// Get.off(() => LoginCaptin());
} else { } else {
Get.offAll(() => SmsSignupEgypt()); Get.offAll(() => SmsSignupEgypt());
// Get.snackbar(jsonDecoeded['status'], jsonDecoeded['data'],
// backgroundColor: Colors.redAccent);
isloading = false; isloading = false;
update(); update();
} }
} else { } else {
Get.snackbar('failure'.tr, '', backgroundColor: AppColor.redColor); mySnackbarSuccess('');
isloading = false; isloading = false;
update(); update();
} }
@@ -263,7 +260,6 @@ class LoginDriverController extends GetxController {
isloading = false; isloading = false;
update(); update();
// Get.snackbar('Failure', '', backgroundColor: Colors.red);
} else { } else {
var jsonDecoeded = jsonDecode(res); var jsonDecoeded = jsonDecode(res);
if (jsonDecoeded.isNotEmpty) { if (jsonDecoeded.isNotEmpty) {
@@ -321,7 +317,7 @@ class LoginDriverController extends GetxController {
'change device'.tr, 'change device'.tr,
jsonDecode(token)['data'][0]['token'].toString(), jsonDecode(token)['data'][0]['token'].toString(),
[], [],
'promo.wav'); 'ding.wav');
Get.defaultDialog( Get.defaultDialog(
title: 'you will use this device?'.tr, title: 'you will use this device?'.tr,
middleText: '', middleText: '',
@@ -333,7 +329,7 @@ class LoginDriverController extends GetxController {
'token': box.read(BoxName.tokenDriver), 'token': box.read(BoxName.tokenDriver),
'captain_id': box.read(BoxName.driverID).toString() 'captain_id': box.read(BoxName.driverID).toString()
}); });
CRUD().post( await CRUD().post(
link: link:
"${AppLink.seferAlexandriaServer}/ride/firebase/addDriver.php", "${AppLink.seferAlexandriaServer}/ride/firebase/addDriver.php",
payload: { payload: {
@@ -341,7 +337,7 @@ class LoginDriverController extends GetxController {
'captain_id': 'captain_id':
box.read(BoxName.driverID).toString() box.read(BoxName.driverID).toString()
}); });
CRUD().post( await CRUD().post(
link: link:
"${AppLink.seferGizaServer}/ride/firebase/addDriver.php", "${AppLink.seferGizaServer}/ride/firebase/addDriver.php",
payload: { payload: {
@@ -358,13 +354,13 @@ class LoginDriverController extends GetxController {
// Get.off(() => LoginCaptin()); // Get.off(() => LoginCaptin());
} else { } else {
Get.offAll(() => SmsSignupEgypt()); Get.offAll(() => SmsSignupEgypt());
// Get.snackbar(jsonDecoeded['status'], jsonDecoeded['data'],
// backgroundColor: Colors.redAccent);
isloading = false; isloading = false;
update(); update();
} }
} else { } else {
Get.snackbar('failure'.tr, '', backgroundColor: AppColor.redColor); mySnackeBarError('');
isloading = false; isloading = false;
update(); update();
} }

View File

@@ -4,6 +4,7 @@ import 'dart:math';
import 'package:SEFER/controller/auth/captin/login_captin_controller.dart'; import 'package:SEFER/controller/auth/captin/login_captin_controller.dart';
import 'package:SEFER/views/auth/captin/cards/egypt_card_a_i.dart'; import 'package:SEFER/views/auth/captin/cards/egypt_card_a_i.dart';
import 'package:SEFER/views/auth/captin/register_captin.dart'; import 'package:SEFER/views/auth/captin/register_captin.dart';
import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:SEFER/constant/box_name.dart'; import 'package:SEFER/constant/box_name.dart';
@@ -152,8 +153,9 @@ class RegisterCaptainController extends GetxController {
update(); update();
} }
} else { } else {
Get.snackbar('Phone Number wrong'.tr, '', mySnackeBarError(
backgroundColor: AppColor.redColor); 'Phone Number wrong'.tr,
);
} }
} }
} }
@@ -235,11 +237,7 @@ class RegisterCaptainController extends GetxController {
// Handle case where phone number is already verified // Handle case where phone number is already verified
_handleAlreadyVerified() { _handleAlreadyVerified() {
Get.snackbar( mySnackbarSuccess('Phone number is already verified'.tr);
'Phone number is already verified'.tr,
'',
backgroundColor: AppColor.greenColor,
);
box.write(BoxName.phoneVerified, '1'); box.write(BoxName.phoneVerified, '1');
box.write(BoxName.phone, '+2${phoneController.text}'); box.write(BoxName.phone, '+2${phoneController.text}');
Get.put(LoginDriverController()).loginUsingCredentials( Get.put(LoginDriverController()).loginUsingCredentials(
@@ -263,7 +261,6 @@ class RegisterCaptainController extends GetxController {
}, },
); );
// Get.snackbar('', '');
await smsEgyptController.sendSmsEgypt(phoneNumber, randomNumber.toString()); await smsEgyptController.sendSmsEgypt(phoneNumber, randomNumber.toString());
lastOtpSentTime = DateTime.now(); // Update the last OTP sent time lastOtpSentTime = DateTime.now(); // Update the last OTP sent time
@@ -274,11 +271,7 @@ class RegisterCaptainController extends GetxController {
// Show error message in case of invalid phone number // Show error message in case of invalid phone number
void _showErrorMessage(String message) { void _showErrorMessage(String message) {
Get.snackbar( mySnackeBarError(message);
message.tr,
'',
backgroundColor: AppColor.redColor,
);
} }
verifySMSCode() async { verifySMSCode() async {
@@ -315,8 +308,7 @@ class RegisterCaptainController extends GetxController {
// } // }
} }
} else { } else {
Get.snackbar('Error'.tr, 'you must insert token code '.tr, mySnackeBarError('you must insert token code '.tr);
backgroundColor: AppColor.redColor);
} }
} }

View File

@@ -6,6 +6,7 @@ import 'package:SEFER/controller/functions/crud.dart';
import 'package:SEFER/main.dart'; import 'package:SEFER/main.dart';
import 'package:SEFER/views/auth/captin/cards/sms_signup.dart'; import 'package:SEFER/views/auth/captin/cards/sms_signup.dart';
import 'package:SEFER/views/home/on_boarding_page.dart'; import 'package:SEFER/views/home/on_boarding_page.dart';
import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:google_sign_in/google_sign_in.dart'; import 'package:google_sign_in/google_sign_in.dart';
@@ -116,8 +117,7 @@ class GoogleSignInHelper {
return googleUser; return googleUser;
} catch (error) { } catch (error) {
Get.snackbar('Google Sign-In error', '$error', mySnackeBarError('$error');
backgroundColor: AppColor.redColor);
addError(error.toString(), 'GoogleSignInAccount?> signInFromLogin()'); addError(error.toString(), 'GoogleSignInAccount?> signInFromLogin()');
return null; return null;
} }

View File

@@ -1,6 +1,7 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:math'; import 'dart:math';
import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@@ -50,7 +51,7 @@ class LoginController extends GetxController {
update(); update();
if (res == 'failure') { if (res == 'failure') {
//Failure //Failure
Get.snackbar('Failure', '', backgroundColor: Colors.red); mySnackeBarError('');
} else { } else {
var jsonDecoeded = jsonDecode(res); var jsonDecoeded = jsonDecode(res);
if (jsonDecoeded.isNotEmpty) { if (jsonDecoeded.isNotEmpty) {
@@ -90,8 +91,7 @@ class LoginController extends GetxController {
); );
} }
} else if (jsonDecoeded['status'] == 'Failure') { } else if (jsonDecoeded['status'] == 'Failure') {
Get.snackbar(jsonDecoeded['status'], jsonDecoeded['data'], mySnackeBarError(jsonDecoeded['data']);
backgroundColor: Colors.redAccent);
isloading = false; isloading = false;
update(); update();
} }

View File

@@ -1,5 +1,6 @@
import 'dart:convert'; import 'dart:convert';
import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
@@ -31,7 +32,7 @@ class TokenController extends GetxController {
update(); update();
var jsonToken = jsonDecode(res.body); var jsonToken = jsonDecode(res.body);
if (jsonToken['status'] == 'The token has been updated successfully.') { if (jsonToken['status'] == 'The token has been updated successfully.') {
Get.snackbar('token updated'.tr, ''); mySnackbarSuccess('token updated'.tr);
} }
} }
} }

View File

@@ -1,8 +1,7 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:SEFER/controller/home/captin/home_captain_controller.dart'; import 'package:SEFER/controller/home/captin/home_captain_controller.dart';
import 'package:SEFER/env/env.dart'; import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:SEFER/print.dart';
import 'package:SEFER/views/widgets/mydialoug.dart'; import 'package:SEFER/views/widgets/mydialoug.dart';
import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@@ -10,7 +9,6 @@ import 'package:get/get.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:SEFER/views/widgets/elevated_btn.dart'; import 'package:SEFER/views/widgets/elevated_btn.dart';
import '../../constant/api_key.dart';
import '../../constant/box_name.dart'; import '../../constant/box_name.dart';
import '../../constant/colors.dart'; import '../../constant/colors.dart';
import '../../constant/style.dart'; import '../../constant/style.dart';
@@ -208,8 +206,6 @@ class FirebaseMessagesController extends GetxController {
update(); update();
} else if (message.notification!.title! == 'Hi ,I will go now') { } else if (message.notification!.title! == 'Hi ,I will go now') {
// Get.snackbar('Hi ,I will go now', '',
// backgroundColor: AppColor.greenColor);
if (Platform.isAndroid) { if (Platform.isAndroid) {
notificationController.showNotification( notificationController.showNotification(
'Passenger come to you'.tr, 'Hi ,I will go now'.tr, 'tone2', ''); 'Passenger come to you'.tr, 'Hi ,I will go now'.tr, 'tone2', '');
@@ -274,14 +270,7 @@ class FirebaseMessagesController extends GetxController {
// Get.off(const CallPage()); // Get.off(const CallPage());
} catch (e) {} } catch (e) {}
} else if (message.notification!.title! == 'Order Applied'.tr) { } else if (message.notification!.title! == 'Order Applied'.tr) {
Get.snackbar( mySnackbarSuccess("The order has been accepted by another driver.".tr);
"The order has been accepted by another driver."
.tr, // Corrected grammar
"Be more mindful next time to avoid dropping orders."
.tr, // Improved sentence structure
backgroundColor: AppColor.yellowColor,
snackPosition: SnackPosition.BOTTOM,
);
} else if (message.notification!.title! == 'Order') { } else if (message.notification!.title! == 'Order') {
if (Platform.isAndroid) { if (Platform.isAndroid) {
notificationController.showNotification( notificationController.showNotification(

View File

@@ -230,7 +230,7 @@ class NotificationController extends GetxController {
}); });
} }
void scheduleDailyNotifications( void scheduleNotificationsForSevenDays(
String title, String message, String tone) async { String title, String message, String tone) async {
final AndroidNotificationDetails android = AndroidNotificationDetails( final AndroidNotificationDetails android = AndroidNotificationDetails(
'high_importance_channel', 'high_importance_channel',
@@ -262,47 +262,72 @@ class NotificationController extends GetxController {
} }
} }
// Schedule notifications for 10:00 AM and 3:00 PM daily // Schedule notifications for the next 7 days
await _scheduleNotificationForTime(7, 0, title, message, details); for (int day = 0; day < 7; day++) {
await _scheduleNotificationForTime(13, 0, title, message, details); // Schedule for 8:00 AM
await _scheduleNotificationForTime(18, 0, title, message, details); await _scheduleNotificationForTime(
// await _scheduleNotificationForTime(0, 22, title, message, details); day, 7, 0, title, message, details, day * 1000 + 1); // Unique ID
print('Daily notifications scheduled successfully'); await _scheduleNotificationForTime(
day, 10, 14, title, message, details, day * 1000 + 2); // Unique ID
// Schedule for 3:00 PM
await _scheduleNotificationForTime(
day, 13, 0, title, message, details, day * 1000 + 3); // Unique ID
// Schedule for 8:00 PM
await _scheduleNotificationForTime(
day, 20, 0, title, message, details, day * 1000 + 4); // Unique ID
}
print('Notifications scheduled successfully for the next 7 days');
} }
// Helper function to get the next instance of a specific hour and minute Future<void> _scheduleNotificationForTime(
Future<void> _scheduleNotificationForTime(int hour, int minute, String title, int dayOffset,
String message, NotificationDetails details) async { int hour,
int minute,
String title,
String message,
NotificationDetails details,
int notificationId,
) async {
// Initialize and set Cairo timezone // Initialize and set Cairo timezone
tz.initializeTimeZones(); tz.initializeTimeZones();
final cairoLocation = tz.getLocation('Africa/Cairo'); // Set Cairo timezone var cairoLocation = tz.getLocation('Africa/Cairo');
final now = tz.TZDateTime.now( final now = tz.TZDateTime.now(cairoLocation);
cairoLocation); // Use Cairo timezone for the current time
tz.TZDateTime scheduledDate = tz.TZDateTime( tz.TZDateTime scheduledDate = tz.TZDateTime(
cairoLocation, now.year, now.month, now.day, hour, minute); cairoLocation,
now.year,
now.month,
now.day + dayOffset, // Add offset to schedule for the next days
hour,
minute,
);
// If scheduled time is already past today, schedule it for the next day // If the scheduled time is in the past, move it to the next day
if (scheduledDate.isBefore(now)) { if (scheduledDate.isBefore(now)) {
scheduledDate = scheduledDate.add(const Duration(days: 1)); scheduledDate = scheduledDate.add(Duration(days: 1));
} }
print('Current time (Cairo): $now'); print('Current time (Cairo): $now');
print('Scheduling notification for: $scheduledDate'); print('Scheduling notification for: $scheduledDate');
await _flutterLocalNotificationsPlugin.zonedSchedule( await _flutterLocalNotificationsPlugin.zonedSchedule(
0, // Use unique IDs if you want to manage each notification separately notificationId, // Unique ID for each notification
title, title,
message, message,
scheduledDate, scheduledDate,
details, details,
androidAllowWhileIdle: true, androidScheduleMode: AndroidScheduleMode.exact,
uiLocalNotificationDateInterpretation: uiLocalNotificationDateInterpretation:
UILocalNotificationDateInterpretation.absoluteTime, UILocalNotificationDateInterpretation.absoluteTime,
matchDateTimeComponents: DateTimeComponents.time, matchDateTimeComponents:
null, // Don't repeat automatically; we handle 7 days manually
); );
print('Notification scheduled successfully for Cairo timezone');
print('Notification scheduled successfully for: $scheduledDate');
} }
void scheduleNotificationEvery10Hours( void scheduleNotificationEvery10Hours(

View File

@@ -1,10 +1,8 @@
import 'package:SEFER/constant/links.dart'; import 'package:SEFER/constant/links.dart';
import 'package:SEFER/controller/functions/crud.dart'; import 'package:SEFER/controller/functions/crud.dart';
import 'package:SEFER/views/home/Captin/home_captain/home_captin.dart'; import 'package:SEFER/views/home/Captin/home_captain/home_captin.dart';
import 'package:SEFER/views/home/Captin/orderCaptin/order_request_page.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart'; import 'package:SEFER/views/widgets/elevated_btn.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart';
class OverlayContent1 extends StatelessWidget { class OverlayContent1 extends StatelessWidget {
@override @override

View File

@@ -231,9 +231,9 @@ class CRUD {
); );
Log.print('response: ${response.request}'); Log.print('response: ${response.request}');
Log.print('response: ${response.body}'); Log.print('response: ${response.body}');
Log.print('response: ${response.statusCode}'); // Log.print('response: ${response.statusCode}');
Log.print('response: ${response.reasonPhrase}'); // Log.print('response: ${response.reasonPhrase}');
Log.print('response: ${payload}'); // Log.print('response: ${payload}');
var jsonData = jsonDecode(response.body); var jsonData = jsonDecode(response.body);
if (response.statusCode == 200) { if (response.statusCode == 200) {
if (jsonData['status'] == 'success') { if (jsonData['status'] == 'success') {

View File

@@ -10,6 +10,7 @@ import 'package:SEFER/controller/functions/crud.dart';
import 'package:SEFER/controller/functions/device_info.dart'; import 'package:SEFER/controller/functions/device_info.dart';
import 'package:SEFER/main.dart'; import 'package:SEFER/main.dart';
import 'package:SEFER/views/home/Captin/home_captain/home_captin.dart'; import 'package:SEFER/views/home/Captin/home_captain/home_captin.dart';
import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:SEFER/views/widgets/mydialoug.dart'; import 'package:SEFER/views/widgets/mydialoug.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@@ -63,11 +64,9 @@ class AI extends GetxController {
if (res != 'failure') { if (res != 'failure') {
isInviteDriverFound = true; isInviteDriverFound = true;
update(); update();
Get.snackbar("Code approved".tr, '', mySnackbarSuccess("Code approved".tr);
backgroundColor: AppColor.greenColor);
} else { } else {
Get.snackbar("Code not approved".tr, '', mySnackeBarError("Code not approved".tr);
backgroundColor: AppColor.redColor);
} }
} }
} }
@@ -80,11 +79,9 @@ class AI extends GetxController {
if (res != 'failure') { if (res != 'failure') {
isInviteDriverFound = true; isInviteDriverFound = true;
update(); update();
Get.snackbar("Code approved".tr, '', mySnackbarSuccess("Code approved".tr);
backgroundColor: AppColor.greenColor);
} else { } else {
Get.snackbar("Code not approved".tr, '', mySnackeBarError("Code not approved".tr);
backgroundColor: AppColor.redColor);
} }
} }
} }
@@ -386,18 +383,17 @@ class AI extends GetxController {
CRUD().post( CRUD().post(
link: '${AppLink.seferAlexandriaServer}/auth/captin/register.php', link: '${AppLink.seferAlexandriaServer}/auth/captin/register.php',
payload: payload); payload: payload);
Get.snackbar('Success', 'Driver data saved successfully', mySnackbarSuccess('Driver data saved successfully');
backgroundColor: AppColor.greenColor);
} else { } else {
Get.snackbar('Error'.tr, mySnackeBarError(
'${'Failed to save driver data'.tr}: ${status1['message']}', '${'Failed to save driver data'.tr}: ${status1['message']}');
backgroundColor: Colors.red);
} }
} catch (e) { } catch (e) {
isLoading = false; isLoading = false;
update(); update();
Get.snackbar('Error'.tr, 'An error occurred while saving driver data'.tr, mySnackeBarError(
backgroundColor: Colors.red); 'An error occurred while saving driver data'.tr,
);
} }
} }
@@ -408,7 +404,7 @@ class AI extends GetxController {
"InspectionResult": responseCriminalRecordEgypt['InspectionResult'], "InspectionResult": responseCriminalRecordEgypt['InspectionResult'],
}); });
if (res != 'failure') { if (res != 'failure') {
Get.snackbar('uploaded sucssefuly'.tr, ''); mySnackbarSuccess('uploaded sucssefuly'.tr);
} }
} }
@@ -439,8 +435,7 @@ class AI extends GetxController {
var status = jsonDecode(res); var status = jsonDecode(res);
if (status['status'] == 'success') { if (status['status'] == 'success') {
isCarSaved = true; isCarSaved = true;
Get.snackbar('Success', 'message', mySnackbarSuccess('');
backgroundColor: AppColor.greenColor);
CRUD().post( CRUD().post(
link: link:
'${AppLink.seferAlexandriaServer}/ride/RegisrationCar/add.php', '${AppLink.seferAlexandriaServer}/ride/RegisrationCar/add.php',
@@ -979,8 +974,7 @@ class AI extends GetxController {
update(); update();
} else { } else {
Get.snackbar('Error', "JSON string not found", mySnackeBarError("JSON string not found");
backgroundColor: AppColor.redColor);
} }
// Rest of your code... // Rest of your code...

View File

@@ -1,6 +1,7 @@
import 'dart:io'; import 'dart:io';
import 'package:SEFER/views/home/on_boarding_page.dart'; import 'package:SEFER/views/home/on_boarding_page.dart';
import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:SEFER/constant/box_name.dart'; import 'package:SEFER/constant/box_name.dart';
@@ -174,9 +175,9 @@ class LogOutController extends GetxController {
'email': box.read(BoxName.email), 'email': box.read(BoxName.email),
}); });
} else { } else {
Get.snackbar('Email Wrong'.tr, 'Email you inserted is Wrong.'.tr, mySnackeBarError(
snackPosition: SnackPosition.BOTTOM, 'Email you inserted is Wrong.'.tr,
backgroundColor: AppColor.redColor); );
} }
} }
} }

View File

@@ -1,5 +1,6 @@
import 'package:SEFER/constant/box_name.dart'; import 'package:SEFER/constant/box_name.dart';
import 'package:SEFER/main.dart'; import 'package:SEFER/main.dart';
import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_tts/flutter_tts.dart'; import 'package:flutter_tts/flutter_tts.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@@ -45,8 +46,7 @@ class TextToSpeechController extends GetxController {
update(); update();
} }
} catch (error) { } catch (error) {
// Handle error gracefully, e.g., show a message mySnackeBarError('Failed to speak text: $error');
Get.snackbar('Error', 'Failed to speak text: $error');
} }
} }
} }

View File

@@ -1,6 +1,7 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:SEFER/constant/api_key.dart'; import 'package:SEFER/constant/api_key.dart';
import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:image_cropper/image_cropper.dart'; import 'package:image_cropper/image_cropper.dart';
@@ -152,8 +153,9 @@ class ImageController extends GetxController {
); );
} catch (e) { } catch (e) {
print('Error in choosImage: $e'); print('Error in choosImage: $e');
Get.snackbar('Image Upload Failed'.tr, e.toString(), mySnackeBarError('Image Upload Failed'.tr);
backgroundColor: AppColor.primaryColor); // Get.snackbar('Image Upload Failed'.tr, e.toString(),
// backgroundColor: AppColor.primaryColor);
} finally { } finally {
isloading = false; isloading = false;
update(); update();
@@ -211,8 +213,9 @@ class ImageController extends GetxController {
); );
} catch (e) { } catch (e) {
print('Error in choosImage: $e'); print('Error in choosImage: $e');
Get.snackbar('Image Upload Failed'.tr, e.toString(), // Get.snackbar('Image Upload Failed'.tr, e.toString(),
backgroundColor: AppColor.primaryColor); // backgroundColor: AppColor.primaryColor);
mySnackeBarError('Image Upload Failed'.tr);
} finally { } finally {
isloading = false; isloading = false;
update(); update();
@@ -287,8 +290,9 @@ class ImageController extends GetxController {
link, link,
); );
} catch (e) { } catch (e) {
Get.snackbar('Image Upload Failed'.tr, e.toString(), mySnackeBarError('Image Upload Failed'.tr);
backgroundColor: AppColor.redColor); // Get.snackbar('Image Upload Failed'.tr, e.toString(),
// backgroundColor: AppColor.redColor);
} finally { } finally {
isloading = false; isloading = false;
update(); update();
@@ -420,8 +424,9 @@ class ImageController extends GetxController {
link, link,
); );
} catch (e) { } catch (e) {
Get.snackbar('Image Upload Failed'.tr, e.toString(), mySnackeBarError('Image Upload Failed'.tr);
backgroundColor: AppColor.redColor); // Get.snackbar('Image Upload Failed'.tr, e.toString(),
// backgroundColor: AppColor.redColor);
} finally { } finally {
isloading = false; isloading = false;
update(); update();

View File

@@ -4,6 +4,7 @@ import 'package:SEFER/constant/box_name.dart';
import 'package:SEFER/constant/links.dart'; import 'package:SEFER/constant/links.dart';
import 'package:SEFER/controller/functions/crud.dart'; import 'package:SEFER/controller/functions/crud.dart';
import 'package:SEFER/main.dart'; import 'package:SEFER/main.dart';
import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import '../../../../constant/colors.dart'; import '../../../../constant/colors.dart';
@@ -43,20 +44,13 @@ class AssuranceHealthController extends GetxController {
if (response != 'failure') { if (response != 'failure') {
// Handle success (e.g., show a success message) // Handle success (e.g., show a success message)
print("Health assurance data saved successfully");
Get.snackbar( mySnackbarSuccess(
"Success".tr, "You have successfully opted for health insurance.".tr);
"You have successfully opted for health insurance.".tr,
backgroundColor: AppColor.greenColor,
);
} else { } else {
// Handle failure (e.g., show an error message) // Handle failure (e.g., show an error message)
print("Failed to save health assurance data"); print("Failed to save health assurance data");
Get.snackbar( mySnackeBarError("Please enter a health insurance status.".tr);
"Error".tr,
"Please enter a health insurance status.".tr,
backgroundColor: AppColor.redColor,
);
} }
} catch (e) { } catch (e) {
// Handle any errors // Handle any errors

View File

@@ -3,6 +3,7 @@ import 'dart:convert';
import 'package:SEFER/constant/links.dart'; import 'package:SEFER/constant/links.dart';
import 'package:SEFER/controller/functions/crud.dart'; import 'package:SEFER/controller/functions/crud.dart';
import 'package:SEFER/print.dart'; import 'package:SEFER/print.dart';
import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:video_player/video_player.dart'; import 'package:video_player/video_player.dart';
@@ -57,10 +58,10 @@ class VideoController extends GetxController {
// Log.print('videos: ${videos}'); // Log.print('videos: ${videos}');
update(); update();
} else { } else {
Get.snackbar('Error'.tr, ''); mySnackeBarError('');
} }
} catch (e) { } catch (e) {
Get.snackbar("Error", e.toString()); mySnackeBarError(e.toString());
} finally { } finally {
isLoading(false); isLoading(false);
} }

View File

@@ -302,13 +302,13 @@ class HomeCaptainController extends GetxController {
'token': box.read(BoxName.tokenDriver), 'token': box.read(BoxName.tokenDriver),
'captain_id': box.read(BoxName.driverID).toString() 'captain_id': box.read(BoxName.driverID).toString()
}); });
CRUD().post( await CRUD().post(
link: "${AppLink.seferAlexandriaServer}/ride/firebase/addDriver.php", link: "${AppLink.seferAlexandriaServer}/ride/firebase/addDriver.php",
payload: { payload: {
'token': box.read(BoxName.tokenDriver), 'token': box.read(BoxName.tokenDriver),
'captain_id': box.read(BoxName.driverID).toString() 'captain_id': box.read(BoxName.driverID).toString()
}); });
CRUD().post( await CRUD().post(
link: "${AppLink.seferGizaServer}/ride/firebase/addDriver.php", link: "${AppLink.seferGizaServer}/ride/firebase/addDriver.php",
payload: { payload: {
'token': box.read(BoxName.tokenDriver), 'token': box.read(BoxName.tokenDriver),

View File

@@ -551,7 +551,8 @@ class MapDriverController extends GetxController {
); );
MyDialog().getDialog('Are you sure to exit ride ?'.tr, '', () { MyDialog().getDialog('Are you sure to exit ride ?'.tr, '', () {
if (distanceToDestination > 900 || if (distanceToDestination > 900 ||
(double.parse(distance) < 1000 && distanceToDestination > 150)) { (double.parse(distance.toString()) < 1000 &&
distanceToDestination > 150)) {
Get.back(); Get.back();
finishRideFromDriver1(); finishRideFromDriver1();
} else { } else {
@@ -611,16 +612,17 @@ class MapDriverController extends GetxController {
paymentAmount = totalCost; paymentAmount = totalCost;
box.write(BoxName.statusDriverLocation, 'off'); box.write(BoxName.statusDriverLocation, 'off');
// changeRideToBeginToPassenger(); // changeRideToBeginToPassenger();
await CRUD() await CRUD().post(
.post(link: "${AppLink.seferCairoServer}/rides/update.php", payload: { link: "${AppLink.seferCairoServer}/ride/rides/update.php",
'id': rideId, payload: {
'rideTimeFinish': DateTime.now().toString(), 'id': rideId,
'status': 'Finished', 'rideTimeFinish': DateTime.now().toString(),
'price': totalCost, 'status': 'Finished',
}); 'price': totalCost,
});
if (AppLink.endPoint != AppLink.seferCairoServer) { if (AppLink.endPoint != AppLink.seferCairoServer) {
CRUD().post( CRUD().post(
link: "${AppLink.endPoint}/rides/update.php", link: "${AppLink.endPoint}/ride/rides/update.php",
payload: { payload: {
'id': rideId, 'id': rideId,
'rideTimeFinish': DateTime.now().toString(), 'rideTimeFinish': DateTime.now().toString(),

View File

@@ -4,6 +4,7 @@ import 'package:SEFER/constant/colors.dart';
import 'package:SEFER/constant/style.dart'; import 'package:SEFER/constant/style.dart';
import 'package:SEFER/controller/firebase/firbase_messge.dart'; import 'package:SEFER/controller/firebase/firbase_messge.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart'; import 'package:SEFER/views/widgets/elevated_btn.dart';
import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:SEFER/constant/box_name.dart'; import 'package:SEFER/constant/box_name.dart';
@@ -81,22 +82,10 @@ class CaptainWalletController extends GetxController {
amountToNewDriverMap = d['data']; amountToNewDriverMap = d['data'];
// update(); // update();
} else { } else {
Get.snackbar( mySnackeBarError("This driver is not registered".tr);
"This driver is not registered".tr,
'',
duration: const Duration(seconds: 3),
backgroundColor: AppColor.redColor,
snackPosition: SnackPosition.BOTTOM,
);
} }
} else { } else {
Get.snackbar( mySnackeBarError('Your Budget less than needed'.tr);
'Your Budget less than needed'.tr,
'',
duration: const Duration(seconds: 3),
backgroundColor: AppColor.redColor,
snackPosition: SnackPosition.BOTTOM,
);
} }
} }
} }

View File

@@ -5,6 +5,7 @@ import 'package:SEFER/constant/box_name.dart';
import 'package:SEFER/constant/colors.dart'; import 'package:SEFER/constant/colors.dart';
import 'package:SEFER/main.dart'; import 'package:SEFER/main.dart';
import 'package:SEFER/print.dart'; import 'package:SEFER/print.dart';
import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:secure_string_operations/secure_string_operations.dart'; import 'package:secure_string_operations/secure_string_operations.dart';
@@ -91,14 +92,11 @@ class PaymobPayout extends GetxController {
'Wallet', 'Wallet',
box.read(BoxName.emailDriver).toString()); box.read(BoxName.emailDriver).toString());
Get.snackbar('Transaction successful'.tr, mySnackbarSuccess('${'Transaction successful'.tr} ${dec['amount']}');
'${'Transaction successful'.tr} ${dec['amount']}',
backgroundColor: AppColor.greenColor);
Get.find<CaptainWalletController>().refreshCaptainWallet(); Get.find<CaptainWalletController>().refreshCaptainWallet();
} else if (dec['disbursement_status'] == 'failed') { } else if (dec['disbursement_status'] == 'failed') {
Get.snackbar('Transaction failed'.tr, 'Transaction failed'.tr, mySnackeBarError('Transaction failed'.tr);
backgroundColor: AppColor.redColor);
} }
} }
@@ -175,14 +173,10 @@ class PaymobPayout extends GetxController {
'Wallet', 'Wallet',
box.read(BoxName.emailDriver).toString()); box.read(BoxName.emailDriver).toString());
Get.snackbar('Transaction successful'.tr, mySnackbarSuccess('${'Transaction successful'.tr} ${dec['amount']}');
'${'Transaction successful'.tr} ${dec['amount']}',
backgroundColor: AppColor.greenColor);
Get.find<CaptainWalletController>().refreshCaptainWallet(); Get.find<CaptainWalletController>().refreshCaptainWallet();
} else if (dec['disbursement_status'] == 'failed') { } else if (dec['disbursement_status'] == 'failed') {
Get.snackbar('Transaction failed'.tr, 'Transaction failed'.tr, mySnackeBarError('Transaction failed'.tr);
backgroundColor: AppColor.redColor);
} }
} }

View File

@@ -197,7 +197,13 @@ class MyTranslation extends Translations {
"Choose from contact": "اختر من جهات الاتصال", "Choose from contact": "اختر من جهات الاتصال",
"Cancel": "إلغاء", "Cancel": "إلغاء",
"Open App": "افتح التطبيق", "Open App": "افتح التطبيق",
"Add new car": "أضف سيارة جديدة", "Ok I will go now.": "حسنًا، سأذهب الآن.",
"Hi, I will go now": "مرحبًا، سأذهب الآن.",
"Add new car": "أضف سيارة جديدة", "Rate Our App": "قيّم تطبيقنا",
"How would you rate our app?": "كيف تقيم تطبيقنا؟",
"write comment here": "اكتب تعليقك هنا",
"Submit Rating": "إرسال التقييم",
"Rating submitted successfully": "تم إرسال التقييم بنجاح",
"Open the app to stay updated and ready for upcoming tasks.": "Open the app to stay updated and ready for upcoming tasks.":
"افتح التطبيق لتبقى على اطلاع واستعداد للمهام القادمة.", "افتح التطبيق لتبقى على اطلاع واستعداد للمهام القادمة.",
"No invitation found": "لم يتم العثور على دعوة", "No invitation found": "لم يتم العثور على دعوة",

View File

@@ -4,6 +4,7 @@ import 'package:SEFER/constant/style.dart';
import 'package:SEFER/controller/functions/tts.dart'; import 'package:SEFER/controller/functions/tts.dart';
import 'package:SEFER/controller/payment/paymob/paymob_response.dart'; import 'package:SEFER/controller/payment/paymob/paymob_response.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart'; import 'package:SEFER/views/widgets/elevated_btn.dart';
import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_paypal/flutter_paypal.dart'; import 'package:flutter_paypal/flutter_paypal.dart';
@@ -396,7 +397,8 @@ class PaymentController extends GetxController {
'accountBank': box.read(BoxName.accountIdStripeConnect), 'accountBank': box.read(BoxName.accountIdStripeConnect),
}); });
if (jsonDecode(res)['status'] == 'success') { if (jsonDecode(res)['status'] == 'success') {
Get.snackbar('Account Updated', ''); mySnackbarSuccess('Account Updated'.tr);
// Get.snackbar('Account Updated', '');
} }
} }
@@ -589,11 +591,12 @@ class PaymentController extends GetxController {
billingData: PaymobBillingDataWallet(), billingData: PaymobBillingDataWallet(),
onPayment: (PaymobResponseWallet response) {}, onPayment: (PaymobResponseWallet response) {},
); );
// Log.print('message: ${response!.message}'); Log.print('message: ${response!.message}');
// Log.print('responseCode: ${response.responseCode}'); Log.print('responseCode: ${response.responseCode}');
// Log.print('success: ${response.success}'); Log.print('success: ${response.success}');
// Log.print('transactionID: ${response.transactionID}'); Log.print('transactionID: ${response.transactionID}');
if (response!.responseCode == '200' && response.success == true) { if (response.responseCode.toString() == '200' &&
response.success == true) {
// Log.print('transactionID wewer: ${response.transactionID}'); // Log.print('transactionID wewer: ${response.transactionID}');
Toast.show(context, 'Payment Successful'.tr, AppColor.greenColor); Toast.show(context, 'Payment Successful'.tr, AppColor.greenColor);
method(); method();

View File

@@ -0,0 +1,97 @@
import 'dart:convert';
import 'package:SEFER/constant/box_name.dart';
import 'package:SEFER/constant/colors.dart';
import 'package:SEFER/constant/links.dart';
import 'package:SEFER/controller/functions/crud.dart';
import 'package:SEFER/main.dart';
import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:SEFER/views/widgets/mydialoug.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
// Import url_launcher to open the app store
import 'package:url_launcher/url_launcher.dart';
class RatingController extends GetxController {
var userRating = 0.obs;
final comment = TextEditingController();
void submitRating(int rating) {
userRating.value = rating;
_saveRating(rating);
}
void _redirectToAppStore() async {
// URLs for App Store and Google Play Store
const appStoreUrl = 'https://apps.apple.com/app/6502189302';
const playStoreUrl =
'https://play.google.com/store/apps/details?id=com.sefer_driver';
final url = GetPlatform.isIOS ? appStoreUrl : playStoreUrl;
if (await launchUrl(Uri.parse(url))) {
await launchUrl(Uri.parse(url));
} else {
mySnackeBarError("Could not open the app store.");
}
}
Future<void> _saveRating(int rating) async {
// Build the payload with user data
final payload = {
"name": box.read(BoxName.driverID) != null
? box.read(BoxName.nameDriver)
: box.read(BoxName.name),
"email": box.read(BoxName.driverID) == null
? box.read(BoxName.email).toString()
: box.read(BoxName.emailDriver).toString(),
"phone": box.read(BoxName.driverID) == null
? box.read(BoxName.phone)
: box.read(BoxName.phoneDriver),
"userId": box.read(BoxName.driverID) ?? box.read(BoxName.passengerID),
"userType": box.read(BoxName.driverID) != null ? "driver" : "passenger",
"rating": rating.toString(),
"comment": comment.text.isEmpty
? 'nothing'
: comment.text, // Get actual text from comment controller
};
// Send the rating data to the backend
var res = await CRUD().post(link: AppLink.addRateApp, payload: payload);
// Handle the response and check if it's JSON-formatted
if (res != 'failure') {
try {
// Attempt to parse the response as JSON
final parsedResponse = jsonDecode(res);
if (parsedResponse['status'] == 'success') {
// Display a success message
await CRUD().post(link: AppLink.sendEmailRateingApp, payload: {
"name": payload["name"],
"email": payload["email"],
"rating": rating.toString(),
"comment": payload["comment"],
});
MyDialog().getDialog('Rating submitted successfully'.tr, '', () {
if (rating == 5) {
Get.back();
_redirectToAppStore();
} else {
Get.back();
}
});
// Send confirmation email if the rating was successfully submitted
} else {
mySnackeBarError('Failed to submit rating');
}
} catch (e) {
// If JSON decoding fails, log the response directly
// Get.snackbar('Success', 'Rating submitted successfully',
// backgroundColor: AppColor.greenColor);
}
} else {
mySnackeBarError('Failed to connect to the server');
}
}
}

View File

@@ -2,6 +2,7 @@ import 'package:SEFER/constant/colors.dart';
import 'package:SEFER/controller/firebase/firbase_messge.dart'; import 'package:SEFER/controller/firebase/firbase_messge.dart';
import 'package:SEFER/controller/home/captin/map_driver_controller.dart'; import 'package:SEFER/controller/home/captin/map_driver_controller.dart';
import 'package:SEFER/controller/payment/payment_controller.dart'; import 'package:SEFER/controller/payment/payment_controller.dart';
import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:SEFER/constant/box_name.dart'; import 'package:SEFER/constant/box_name.dart';
@@ -54,8 +55,7 @@ class RateController extends GetxController {
'token': paymentToken2, 'token': paymentToken2,
}).then((value) async { }).then((value) async {
if (value != 'failure') { if (value != 'failure') {
Get.snackbar('Wallet Added'.tr, '', mySnackbarSuccess('Wallet Added'.tr);
backgroundColor: AppColor.greenColor);
// if (double.parse( // if (double.parse(
// Get.find<CaptainWalletController>().totalAmountVisa) > // Get.find<CaptainWalletController>().totalAmountVisa) >
// remainingFee) { // remainingFee) {

View File

@@ -130,6 +130,8 @@ void main() async {
} }
if (Platform.isAndroid || Platform.isIOS) { if (Platform.isAndroid || Platform.isIOS) {
NotificationController notificationController =
Get.put(NotificationController());
await Firebase.initializeApp( await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform, options: DefaultFirebaseOptions.currentPlatform,
); );
@@ -141,8 +143,7 @@ void main() async {
// if (Platform.isAndroid) { // if (Platform.isAndroid) {
// await Get.put(NotificationController()).initNotifications(); // await Get.put(NotificationController()).initNotifications();
// } // }
NotificationController notificationController =
Get.put(NotificationController());
await notificationController.initNotifications(); await notificationController.initNotifications();
// Generate a random index to pick a message // Generate a random index to pick a message
@@ -150,7 +151,7 @@ void main() async {
final randomMessage = driverMessages[random.nextInt(driverMessages.length)]; final randomMessage = driverMessages[random.nextInt(driverMessages.length)];
// Schedule the notification with the random message // Schedule the notification with the random message
notificationController.scheduleDailyNotifications( notificationController.scheduleNotificationsForSevenDays(
randomMessage.split(':')[0], randomMessage.split(':')[0],
randomMessage.split(':')[1], randomMessage.split(':')[1],
"ding", "ding",

View File

@@ -6,7 +6,6 @@ import 'package:SEFER/constant/colors.dart';
import 'package:SEFER/constant/info.dart'; import 'package:SEFER/constant/info.dart';
import 'package:SEFER/constant/style.dart'; import 'package:SEFER/constant/style.dart';
import 'controller/functions/location_background_controller.dart';
import 'controller/home/splash_screen_controlle.dart'; import 'controller/home/splash_screen_controlle.dart';
import 'main.dart'; import 'main.dart';

View File

@@ -0,0 +1,86 @@
import 'package:SEFER/views/widgets/elevated_btn.dart';
import 'package:SEFER/views/widgets/my_textField.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../../controller/rate/rate_app_controller.dart';
class RatingScreen extends StatelessWidget {
// Initialize the RatingController using GetX for state management
final RatingController ratingController = Get.put(RatingController());
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
// Display title "Rate Our App", with .tr for localization support
title: Text("Rate Our App".tr),
),
body: Center(
child: Obx(() {
// Observe changes in userRating; when updated, rebuild the UI accordingly
return Padding(
padding: const EdgeInsets.all(8.0),
child: ListView(
// mainAxisAlignment:
// MainAxisAlignment.center, // Center content vertically
children: [
ClipRRect(
borderRadius: BorderRadius.circular(15),
child: Image.asset('assets/images/logo.gif')),
const SizedBox(height: 10),
// Text prompt asking the user to rate the app, with localization support
Text("How would you rate our app?".tr),
const SizedBox(height: 10), // Vertical spacing between elements
MyTextForm(
controller: ratingController.comment,
label: 'write comment here'.tr,
hint: 'write comment here'.tr,
type: TextInputType.name,
),
// Build and display the row of rating stars
_buildRatingStars(),
const SizedBox(
height: 20), // Additional spacing before the button
// Button to submit the selected rating
MyElevatedButton(
onPressed: () {
// Calls submitRating() method in the controller with the current rating value
ratingController
.submitRating(ratingController.userRating.value);
},
// Button text "Submit Rating" with localization support
title: "Submit Rating".tr,
),
],
),
);
}),
),
);
}
// Widget function to display a row of clickable star icons for rating
Widget _buildRatingStars() {
return Row(
mainAxisAlignment:
MainAxisAlignment.center, // Center-aligns stars horizontally
children: List.generate(5, (index) {
return IconButton(
// Display a star icon, filled if selected, otherwise grey
icon: Icon(
Icons.star,
color: index < ratingController.userRating.value
? Colors.orange // Orange for selected stars
: Colors.grey, // Grey for unselected stars
),
onPressed: () {
// Update user rating in the controller when a star is clicked
ratingController.userRating.value = index + 1;
},
);
}),
);
}
}

View File

@@ -1,3 +1,4 @@
import 'package:SEFER/constant/colors.dart';
import 'package:SEFER/constant/style.dart'; import 'package:SEFER/constant/style.dart';
import 'package:SEFER/controller/auth/captin/register_captin_controller.dart'; import 'package:SEFER/controller/auth/captin/register_captin_controller.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart'; import 'package:SEFER/views/widgets/elevated_btn.dart';
@@ -7,6 +8,8 @@ import 'package:SEFER/views/widgets/mycircular.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import '../../../Rate/rate_app_page.dart';
class SmsSignupEgypt extends StatelessWidget { class SmsSignupEgypt extends StatelessWidget {
SmsSignupEgypt({super.key}); SmsSignupEgypt({super.key});
@@ -102,6 +105,15 @@ class SmsSignupEgypt extends StatelessWidget {
title: 'Submit'.tr, title: 'Submit'.tr,
), ),
), ),
Padding(
padding: const EdgeInsets.all(16.0),
child: MyElevatedButton(
kolor: AppColor.yellowColor,
title: "Rate Our App".tr,
onPressed: () {
Get.to(RatingScreen());
}),
)
], ],
); );
}), }),

View File

@@ -5,6 +5,7 @@ import 'package:SEFER/constant/colors.dart';
import 'package:SEFER/constant/links.dart'; import 'package:SEFER/constant/links.dart';
import 'package:SEFER/controller/functions/crud.dart'; import 'package:SEFER/controller/functions/crud.dart';
import 'package:SEFER/main.dart'; import 'package:SEFER/main.dart';
import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
class DriverCarController extends GetxController { class DriverCarController extends GetxController {
@@ -60,10 +61,11 @@ class DriverCarController extends GetxController {
}, },
); );
if (res != 'failure') { if (res != 'failure') {
Get.snackbar('Success'.tr, '', backgroundColor: AppColor.greenColor); mySnackbarSuccess('');
fetchCatrsForDrivers(); fetchCatrsForDrivers();
} else { } else {
Get.snackbar('Error'.tr, '', backgroundColor: AppColor.redColor); mySnackeBarError('');
} }
} }

View File

@@ -1,13 +1,11 @@
import 'package:SEFER/constant/box_name.dart'; import 'package:SEFER/constant/box_name.dart';
import 'package:SEFER/constant/colors.dart'; import 'package:SEFER/constant/colors.dart';
import 'package:SEFER/main.dart'; import 'package:SEFER/main.dart';
import 'package:SEFER/views/widgets/mydialoug.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import '../../../controller/auth/captin/invit_controller.dart'; import '../../../controller/auth/captin/invit_controller.dart';
import '../../widgets/elevated_btn.dart';
class InviteScreen extends StatelessWidget { class InviteScreen extends StatelessWidget {
final InviteController controller = Get.put(InviteController()); final InviteController controller = Get.put(InviteController());

View File

@@ -1,8 +1,6 @@
import 'dart:io'; import 'dart:io';
import 'package:SEFER/controller/auth/facebook_login.dart';
import 'package:SEFER/views/auth/captin/contact_us_page.dart'; import 'package:SEFER/views/auth/captin/contact_us_page.dart';
import 'package:SEFER/views/widgets/my_textField.dart';
import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@@ -18,7 +16,6 @@ import '../../../constant/style.dart';
import '../../../controller/auth/apple_sigin.dart'; import '../../../controller/auth/apple_sigin.dart';
import '../../../controller/auth/captin/login_captin_controller.dart'; import '../../../controller/auth/captin/login_captin_controller.dart';
import '../../../controller/auth/google_sign.dart'; import '../../../controller/auth/google_sign.dart';
import '../../../controller/functions/location_permission.dart';
import '../../../controller/functions/overlay_permisssion.dart'; import '../../../controller/functions/overlay_permisssion.dart';
import '../../../main.dart'; import '../../../main.dart';
import '../../../print.dart'; import '../../../print.dart';

View File

@@ -1,5 +1,6 @@
import 'package:SEFER/constant/box_name.dart'; import 'package:SEFER/constant/box_name.dart';
import 'package:SEFER/main.dart'; import 'package:SEFER/main.dart';
import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@@ -168,12 +169,15 @@ class AssuranceHealthPage extends StatelessWidget {
Navigator.of(context) Navigator.of(context)
.pop(); // Just close the dialog .pop(); // Just close the dialog
// Optionally show feedback if the driver opts out // Optionally show feedback if the driver opts out
Get.snackbar( // Get.snackbar(
"Opted out".tr, // "Opted out".tr,
// "You have chosen not to proceed with health insurance."
// .tr,
// backgroundColor:
// CupertinoColors.systemGrey);
mySnackbarSuccess(
"You have chosen not to proceed with health insurance." "You have chosen not to proceed with health insurance."
.tr, .tr);
backgroundColor:
CupertinoColors.systemGrey);
}, },
), ),
], ],

View File

@@ -1,6 +1,7 @@
import 'package:SEFER/constant/api_key.dart'; import 'package:SEFER/constant/api_key.dart';
import 'package:SEFER/constant/links.dart'; import 'package:SEFER/constant/links.dart';
import 'package:SEFER/controller/home/captin/home_captain_controller.dart'; import 'package:SEFER/controller/home/captin/home_captain_controller.dart';
import 'package:SEFER/views/Rate/rate_app_page.dart';
import 'package:SEFER/views/auth/captin/contact_us_page.dart'; import 'package:SEFER/views/auth/captin/contact_us_page.dart';
import 'package:SEFER/views/auth/captin/invite_driver_screen.dart'; import 'package:SEFER/views/auth/captin/invite_driver_screen.dart';
import 'package:SEFER/views/notification/available_rides_page.dart'; import 'package:SEFER/views/notification/available_rides_page.dart';
@@ -102,11 +103,18 @@ class CupertinoDrawerCaptain extends StatelessWidget {
), ),
_buildDivider(), _buildDivider(),
_buildDrawerItem( _buildDrawerItem(
icon: CupertinoIcons.settings, icon:
Icons.play_circle_filled, // Icon representing video play
text: 'Videos Tutorials'.tr, text: 'Videos Tutorials'.tr,
onTap: () => Get.to(() => VideoListPage()), onTap: () => Get.to(() => VideoListPage()),
), ),
_buildDivider(), _buildDivider(),
_buildDrawerItem(
icon: Icons.star, // Another option with a filled star icon
text: "Rate Our App".tr,
onTap: () => Get.to(() => RatingScreen()),
),
_buildDivider(),
_buildDrawerItem( _buildDrawerItem(
icon: CupertinoIcons.settings, icon: CupertinoIcons.settings,
text: 'Settings'.tr, text: 'Settings'.tr,

View File

@@ -1,26 +1,16 @@
import 'dart:convert';
import 'dart:math';
import 'package:SEFER/constant/box_name.dart'; import 'package:SEFER/constant/box_name.dart';
import 'package:SEFER/controller/firebase/local_notification.dart'; import 'package:SEFER/controller/firebase/local_notification.dart';
import 'package:SEFER/main.dart'; import 'package:SEFER/main.dart';
import 'package:bubble_head/bubble.dart'; import 'package:SEFER/views/home/Captin/orderCaptin/vip_order_page.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_font_icons/flutter_font_icons.dart'; import 'package:flutter_font_icons/flutter_font_icons.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:SEFER/controller/home/captin/home_captain_controller.dart'; import 'package:SEFER/controller/home/captin/home_captain_controller.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:timezone/data/latest.dart' as tz;
import 'package:timezone/timezone.dart' as tz;
import '../../../../../constant/colors.dart'; import '../../../../../constant/colors.dart';
import '../../../../../constant/notification.dart';
import '../../../../../controller/functions/audio_controller.dart';
import '../../../../../print.dart';
import '../../../../Rate/ride_calculate_driver.dart'; import '../../../../Rate/ride_calculate_driver.dart';
import '../../../../../controller/functions/location_controller.dart'; import '../../../../../controller/functions/location_controller.dart';
import '../../driver_map_page.dart';
import '../../orderCaptin/order_speed_request.dart';
GetBuilder<HomeCaptainController> leftMainMenuCaptainIcons() { GetBuilder<HomeCaptainController> leftMainMenuCaptainIcons() {
return GetBuilder<HomeCaptainController>( return GetBuilder<HomeCaptainController>(
@@ -195,34 +185,13 @@ GetBuilder<HomeCaptainController> leftMainMenuCaptainIcons() {
child: Builder(builder: (context) { child: Builder(builder: (context) {
return IconButton( return IconButton(
onPressed: () async { onPressed: () async {
// NotificationController().showNotification( // mySnakeBarError('ad');
// ' message.notification!.title.toString()', Get.to(() => VipOrderPage(), arguments: {
// ' message.notification!.body.toString()', 'myListString': 'myListString',
// 'order', 'DriverList': 'myList',
// ''); // 'PolylineJson': myPoints,
'body': 'message.notification!.body'
NotificationController notificationController = });
Get.put(NotificationController());
await notificationController.initNotifications();
final random = Random();
final randomMessage =
driverMessages[random.nextInt(driverMessages.length)];
Log.print(
' randomMessage.split[0]: ${randomMessage.split(':')[0]}');
Log.print(
' randomMessage.split([1]: ${randomMessage.split(':')[1]}');
// Schedule the notification with the random message
notificationController.showNotification(
randomMessage.split(':')[0],
randomMessage.split(':')[1],
"ding",
'');
// notificationController.scheduleNotificationEvery10Hours(
// "افتح التطبيق".tr,
// "افتح التطبيق لتبقى على اطلاع واستعداد للمهام القادمة.".tr,
// "ding",
// );
}, },
icon: const Icon( icon: const Icon(
FontAwesome5.window_close, FontAwesome5.window_close,

View File

@@ -1,11 +1,9 @@
import 'package:SEFER/print.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import '../../../constant/box_name.dart'; import '../../../constant/box_name.dart';
import '../../../constant/colors.dart'; import '../../../constant/colors.dart';
import '../../../constant/info.dart';
import '../../../constant/style.dart'; import '../../../constant/style.dart';
import '../../../controller/home/payment/captain_wallet_controller.dart'; import '../../../controller/home/payment/captain_wallet_controller.dart';
import '../../../controller/home/payment/paymob_payout.dart'; import '../../../controller/home/payment/paymob_payout.dart';

View File

@@ -4,6 +4,7 @@ import 'package:SEFER/controller/functions/tts.dart';
import 'package:SEFER/controller/home/payment/paymob_payout.dart'; import 'package:SEFER/controller/home/payment/paymob_payout.dart';
import 'package:SEFER/views/home/my_wallet/bank_account_egypt.dart'; import 'package:SEFER/views/home/my_wallet/bank_account_egypt.dart';
import 'package:SEFER/views/home/my_wallet/payment_history_driver_page.dart'; import 'package:SEFER/views/home/my_wallet/payment_history_driver_page.dart';
import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:SEFER/views/widgets/mydialoug.dart'; import 'package:SEFER/views/widgets/mydialoug.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@@ -13,14 +14,12 @@ import 'package:SEFER/constant/colors.dart';
import 'package:SEFER/constant/info.dart'; import 'package:SEFER/constant/info.dart';
import 'package:SEFER/constant/style.dart'; import 'package:SEFER/constant/style.dart';
import 'package:SEFER/controller/home/payment/captain_wallet_controller.dart'; import 'package:SEFER/controller/home/payment/captain_wallet_controller.dart';
import 'package:SEFER/controller/payment/payment_controller.dart';
import 'package:SEFER/main.dart'; import 'package:SEFER/main.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart'; import 'package:SEFER/views/widgets/elevated_btn.dart';
import 'package:SEFER/views/widgets/my_textField.dart'; import 'package:SEFER/views/widgets/my_textField.dart';
import 'package:SEFER/views/widgets/mycircular.dart'; import 'package:SEFER/views/widgets/mycircular.dart';
import '../../../controller/payment/driver_payment_controller.dart'; import '../../../controller/payment/driver_payment_controller.dart';
import '../../../print.dart';
import '../../widgets/my_scafold.dart'; import '../../widgets/my_scafold.dart';
import 'card_wallet_widget.dart'; import 'card_wallet_widget.dart';
import 'points_captain.dart'; import 'points_captain.dart';
@@ -380,10 +379,8 @@ class WalletCaptain extends StatelessWidget {
await controller.payFromBudget(); await controller.payFromBudget();
} else { } else {
Get.back(); Get.back();
Get.snackbar('Your Budget less than needed'.tr, '',
duration: const Duration(seconds: 3), mySnackeBarError('Your Budget less than needed'.tr);
backgroundColor: AppColor.redColor,
snackPosition: SnackPosition.BOTTOM);
} }
}, },
), ),
@@ -405,8 +402,8 @@ class WalletCaptain extends StatelessWidget {
if (double.parse(controller.totalAmountVisa) > 15) { if (double.parse(controller.totalAmountVisa) > 15) {
Get.to(() => const TransferBudgetPage()); Get.to(() => const TransferBudgetPage());
} else { } else {
Get.snackbar( mySnackeBarError(
"You don't have enough money in your SEFER wallet".tr, ''); "You don't have enough money in your SEFER wallet".tr);
} }
}, },
); );
@@ -507,9 +504,7 @@ Future<dynamic> addBankCodeEgypt(
}); });
print('res: ${res}'); print('res: ${res}');
if (res != 'failure') { if (res != 'failure') {
Get.snackbar( mySnackbarSuccess('bank account added succesfly'.tr);
'updated succses'.tr, 'bank account added succesfly',
backgroundColor: AppColor.greenColor);
} }
} }
})); }));

View File

@@ -1,4 +1,3 @@
import 'package:SEFER/splash_screen_page.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart'; import 'package:SEFER/views/widgets/elevated_btn.dart';
import 'package:SEFER/views/widgets/my_scafold.dart'; import 'package:SEFER/views/widgets/my_scafold.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';

View File

@@ -1,5 +1,3 @@
import 'package:SEFER/controller/auth/captin/login_captin_controller.dart';
import 'package:SEFER/views/auth/captin/login_captin.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';

View File

@@ -2,7 +2,6 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:SEFER/controller/notification/notification_captain_controller.dart'; import 'package:SEFER/controller/notification/notification_captain_controller.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
class NotificationCaptain extends StatelessWidget { class NotificationCaptain extends StatelessWidget {
const NotificationCaptain({Key? key}) : super(key: key); const NotificationCaptain({Key? key}) : super(key: key);

View File

@@ -0,0 +1,69 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../../constant/colors.dart';
SnackbarController mySnackeBarError(String message) {
return Get.snackbar(
'Error'.tr,
message,
backgroundColor: AppColor.redColor.withOpacity(0.9),
colorText: AppColor.secondaryColor,
icon: const Icon(Icons.error, color: AppColor.secondaryColor),
shouldIconPulse: true,
snackPosition: SnackPosition.TOP,
margin: const EdgeInsets.all(10),
borderRadius: 10,
animationDuration: const Duration(milliseconds: 500),
forwardAnimationCurve: Curves.easeOutBack,
reverseAnimationCurve: Curves.easeInBack,
titleText: Text(
'Error'.tr,
style: const TextStyle(
fontWeight: FontWeight.bold,
color: Colors.white,
fontSize: 16,
),
),
messageText: Text(
message,
style: TextStyle(
color: Colors.white.withOpacity(0.9),
fontSize: 14,
),
),
);
}
SnackbarController mySnackbarSuccess(String message) {
return Get.snackbar(
'Success'.tr,
message,
backgroundColor: AppColor.greenColor
.withOpacity(0.9), // Assuming green color for success
colorText: AppColor.secondaryColor,
icon: const Icon(Icons.check_circle, color: AppColor.secondaryColor),
shouldIconPulse: true,
snackPosition: SnackPosition.TOP,
margin: const EdgeInsets.all(10),
borderRadius: 10,
animationDuration: const Duration(milliseconds: 500),
forwardAnimationCurve: Curves.easeOutBack,
reverseAnimationCurve: Curves.easeInBack,
titleText: Text(
'Success'.tr,
style: const TextStyle(
fontWeight: FontWeight.bold,
color: Colors.white,
fontSize: 16,
),
),
messageText: Text(
message,
style: TextStyle(
color: Colors.white.withOpacity(0.9),
fontSize: 14,
),
),
);
}