diff --git a/android/app/build.gradle b/android/app/build.gradle
index 44cc32f..5b5a27b 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -54,8 +54,8 @@ android {
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
minSdk = 23
targetSdk = flutter.targetSdkVersion
- versionCode = 117
- versionName = '1.5.17'
+ versionCode = 120
+ versionName = '1.5.20'
multiDexEnabled =true
}
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index e6ef576..84e1046 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -555,9 +555,10 @@
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = 63CVT8G5P8;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = com.mobileapp.store.ride.RunnerTests;
+ PRODUCT_BUNDLE_IDENTIFIER = com.mobileapp.store.ride;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@@ -573,9 +574,10 @@
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = 63CVT8G5P8;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = com.mobileapp.store.ride.RunnerTests;
+ PRODUCT_BUNDLE_IDENTIFIER = com.mobileapp.store.ride;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
@@ -589,9 +591,10 @@
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = 63CVT8G5P8;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = com.mobileapp.store.ride.RunnerTests;
+ PRODUCT_BUNDLE_IDENTIFIER = com.mobileapp.store.ride;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
index ffab254..6bf81eb 100644
--- a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
+++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -1 +1,354 @@
-{"images":[{"size":"60x60","expected-size":"180","filename":"180.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"40x40","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"60x60","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"57x57","expected-size":"57","filename":"57.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"87","filename":"87.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"57x57","expected-size":"114","filename":"114.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"60","filename":"60.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"1024x1024","filename":"1024.png","expected-size":"1024","idiom":"ios-marketing","folder":"Assets.xcassets/AppIcon.appiconset/","scale":"1x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"72x72","expected-size":"72","filename":"72.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"76x76","expected-size":"152","filename":"152.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"50x50","expected-size":"100","filename":"100.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"76x76","expected-size":"76","filename":"76.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"50x50","expected-size":"50","filename":"50.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"72x72","expected-size":"144","filename":"144.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"40x40","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"83.5x83.5","expected-size":"167","filename":"167.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"20x20","expected-size":"20","filename":"20.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"idiom":"watch","filename":"172.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"38mm","scale":"2x","size":"86x86","expected-size":"172","role":"quickLook"},{"idiom":"watch","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"38mm","scale":"2x","size":"40x40","expected-size":"80","role":"appLauncher"},{"idiom":"watch","filename":"88.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"40mm","scale":"2x","size":"44x44","expected-size":"88","role":"appLauncher"},{"idiom":"watch","filename":"102.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"41mm","scale":"2x","size":"45x45","expected-size":"102","role":"appLauncher"},{"idiom":"watch","filename":"92.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"41mm","scale":"2x","size":"46x46","expected-size":"92","role":"appLauncher"},{"idiom":"watch","filename":"100.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"44mm","scale":"2x","size":"50x50","expected-size":"100","role":"appLauncher"},{"idiom":"watch","filename":"196.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"42mm","scale":"2x","size":"98x98","expected-size":"196","role":"quickLook"},{"idiom":"watch","filename":"216.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"44mm","scale":"2x","size":"108x108","expected-size":"216","role":"quickLook"},{"idiom":"watch","filename":"48.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"38mm","scale":"2x","size":"24x24","expected-size":"48","role":"notificationCenter"},{"idiom":"watch","filename":"55.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"42mm","scale":"2x","size":"27.5x27.5","expected-size":"55","role":"notificationCenter"},{"idiom":"watch","filename":"66.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"45mm","scale":"2x","size":"33x33","expected-size":"66","role":"notificationCenter"},{"size":"29x29","expected-size":"87","filename":"87.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"watch","role":"companionSettings","scale":"3x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"watch","role":"companionSettings","scale":"2x"},{"size":"1024x1024","expected-size":"1024","filename":"1024.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"watch-marketing","scale":"1x"},{"size":"128x128","expected-size":"128","filename":"128.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"256x256","expected-size":"256","filename":"256.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"128x128","expected-size":"256","filename":"256.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"256x256","expected-size":"512","filename":"512.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"32x32","expected-size":"32","filename":"32.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"512x512","expected-size":"512","filename":"512.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"16x16","expected-size":"16","filename":"16.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"16x16","expected-size":"32","filename":"32.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"32x32","expected-size":"64","filename":"64.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"512x512","expected-size":"1024","filename":"1024.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"}]}
\ No newline at end of file
+{
+ "images" : [
+ {
+ "filename" : "40.png",
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "20x20"
+ },
+ {
+ "filename" : "60.png",
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "20x20"
+ },
+ {
+ "filename" : "29.png",
+ "idiom" : "iphone",
+ "scale" : "1x",
+ "size" : "29x29"
+ },
+ {
+ "filename" : "58.png",
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "29x29"
+ },
+ {
+ "filename" : "87.png",
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "29x29"
+ },
+ {
+ "filename" : "80.png",
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "40x40"
+ },
+ {
+ "filename" : "120.png",
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "40x40"
+ },
+ {
+ "filename" : "57.png",
+ "idiom" : "iphone",
+ "scale" : "1x",
+ "size" : "57x57"
+ },
+ {
+ "filename" : "114.png",
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "57x57"
+ },
+ {
+ "filename" : "120.png",
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "60x60"
+ },
+ {
+ "filename" : "180.png",
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "60x60"
+ },
+ {
+ "filename" : "20.png",
+ "idiom" : "ipad",
+ "scale" : "1x",
+ "size" : "20x20"
+ },
+ {
+ "filename" : "40.png",
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "20x20"
+ },
+ {
+ "filename" : "29.png",
+ "idiom" : "ipad",
+ "scale" : "1x",
+ "size" : "29x29"
+ },
+ {
+ "filename" : "58.png",
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "29x29"
+ },
+ {
+ "filename" : "40.png",
+ "idiom" : "ipad",
+ "scale" : "1x",
+ "size" : "40x40"
+ },
+ {
+ "filename" : "80.png",
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "40x40"
+ },
+ {
+ "filename" : "50.png",
+ "idiom" : "ipad",
+ "scale" : "1x",
+ "size" : "50x50"
+ },
+ {
+ "filename" : "100.png",
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "50x50"
+ },
+ {
+ "filename" : "72.png",
+ "idiom" : "ipad",
+ "scale" : "1x",
+ "size" : "72x72"
+ },
+ {
+ "filename" : "144.png",
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "72x72"
+ },
+ {
+ "filename" : "76.png",
+ "idiom" : "ipad",
+ "scale" : "1x",
+ "size" : "76x76"
+ },
+ {
+ "filename" : "152.png",
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "76x76"
+ },
+ {
+ "filename" : "167.png",
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "83.5x83.5"
+ },
+ {
+ "filename" : "1024.png",
+ "idiom" : "ios-marketing",
+ "scale" : "1x",
+ "size" : "1024x1024"
+ },
+ {
+ "filename" : "16.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "16x16"
+ },
+ {
+ "filename" : "32.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "16x16"
+ },
+ {
+ "filename" : "32.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "32x32"
+ },
+ {
+ "filename" : "64.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "32x32"
+ },
+ {
+ "filename" : "128.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "128x128"
+ },
+ {
+ "filename" : "256.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "128x128"
+ },
+ {
+ "filename" : "256.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "256x256"
+ },
+ {
+ "filename" : "512.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "256x256"
+ },
+ {
+ "filename" : "512.png",
+ "idiom" : "mac",
+ "scale" : "1x",
+ "size" : "512x512"
+ },
+ {
+ "filename" : "1024.png",
+ "idiom" : "mac",
+ "scale" : "2x",
+ "size" : "512x512"
+ },
+ {
+ "filename" : "48.png",
+ "idiom" : "watch",
+ "role" : "notificationCenter",
+ "scale" : "2x",
+ "size" : "24x24",
+ "subtype" : "38mm"
+ },
+ {
+ "filename" : "55.png",
+ "idiom" : "watch",
+ "role" : "notificationCenter",
+ "scale" : "2x",
+ "size" : "27.5x27.5",
+ "subtype" : "42mm"
+ },
+ {
+ "filename" : "58.png",
+ "idiom" : "watch",
+ "role" : "companionSettings",
+ "scale" : "2x",
+ "size" : "29x29"
+ },
+ {
+ "filename" : "87.png",
+ "idiom" : "watch",
+ "role" : "companionSettings",
+ "scale" : "3x",
+ "size" : "29x29"
+ },
+ {
+ "filename" : "66.png",
+ "idiom" : "watch",
+ "role" : "notificationCenter",
+ "scale" : "2x",
+ "size" : "33x33",
+ "subtype" : "45mm"
+ },
+ {
+ "filename" : "80.png",
+ "idiom" : "watch",
+ "role" : "appLauncher",
+ "scale" : "2x",
+ "size" : "40x40",
+ "subtype" : "38mm"
+ },
+ {
+ "filename" : "88.png",
+ "idiom" : "watch",
+ "role" : "appLauncher",
+ "scale" : "2x",
+ "size" : "44x44",
+ "subtype" : "40mm"
+ },
+ {
+ "filename" : "92.png",
+ "idiom" : "watch",
+ "role" : "appLauncher",
+ "scale" : "2x",
+ "size" : "46x46",
+ "subtype" : "41mm"
+ },
+ {
+ "filename" : "100.png",
+ "idiom" : "watch",
+ "role" : "appLauncher",
+ "scale" : "2x",
+ "size" : "50x50",
+ "subtype" : "44mm"
+ },
+ {
+ "idiom" : "watch",
+ "role" : "appLauncher",
+ "scale" : "2x",
+ "size" : "51x51",
+ "subtype" : "45mm"
+ },
+ {
+ "idiom" : "watch",
+ "role" : "appLauncher",
+ "scale" : "2x",
+ "size" : "54x54",
+ "subtype" : "49mm"
+ },
+ {
+ "filename" : "172.png",
+ "idiom" : "watch",
+ "role" : "quickLook",
+ "scale" : "2x",
+ "size" : "86x86",
+ "subtype" : "38mm"
+ },
+ {
+ "filename" : "196.png",
+ "idiom" : "watch",
+ "role" : "quickLook",
+ "scale" : "2x",
+ "size" : "98x98",
+ "subtype" : "42mm"
+ },
+ {
+ "filename" : "216.png",
+ "idiom" : "watch",
+ "role" : "quickLook",
+ "scale" : "2x",
+ "size" : "108x108",
+ "subtype" : "44mm"
+ },
+ {
+ "idiom" : "watch",
+ "role" : "quickLook",
+ "scale" : "2x",
+ "size" : "117x117",
+ "subtype" : "45mm"
+ },
+ {
+ "idiom" : "watch",
+ "role" : "quickLook",
+ "scale" : "2x",
+ "size" : "129x129",
+ "subtype" : "49mm"
+ },
+ {
+ "filename" : "1024.png",
+ "idiom" : "watch-marketing",
+ "scale" : "1x",
+ "size" : "1024x1024"
+ },
+ {
+ "filename" : "102.png",
+ "idiom" : "watch",
+ "role" : "appLauncher",
+ "scale" : "2x",
+ "size" : "45x45",
+ "subtype" : "41mm"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index 7c88e58..0da6cd8 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -35,7 +35,7 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 77
+ 79
CFBundleSignature
????
CFBundleURLTypes
@@ -50,7 +50,7 @@
CFBundleVersion
- 4.0.77
+ 4.0.79
FirebaseAppDelegateProxyEnabled
NO
GMSApiKey
diff --git a/lib/constant/links.dart b/lib/constant/links.dart
index 458d10e..c3d52cc 100644
--- a/lib/constant/links.dart
+++ b/lib/constant/links.dart
@@ -74,7 +74,7 @@ class AppLink {
//-----------------ridessss------------------
static String addRides = "$ride/rides/add.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 getRideOrderID = "$ride/rides/getRideOrderID.php";
static String getRideStatus = "$ride/rides/getRideStatus.php";
@@ -196,14 +196,17 @@ class AppLink {
// =====================================
static String addRateToPassenger = "$ride/rate/add.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 getPassengerRate = "$ride/rate/getPassengerRate.php";
////////////////emails ============//
static String sendEmailToPassengerForTripDetails =
- "$ride/rides/emailToPassengerTripDetail.php";
+ "https://api.sefer.live/sefer/ride/rides/emailToPassengerTripDetail.php";
static String sendEmailToDrivertransaction =
- "$seferPaymentServer0/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/";
diff --git a/lib/controller/auth/captin/invit_controller.dart b/lib/controller/auth/captin/invit_controller.dart
index bae4564..44bd80b 100644
--- a/lib/controller/auth/captin/invit_controller.dart
+++ b/lib/controller/auth/captin/invit_controller.dart
@@ -14,6 +14,7 @@ import 'package:share/share.dart';
import '../../../main.dart';
import '../../../print.dart';
+import '../../../views/widgets/error_snakbar.dart';
import '../../functions/launch.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
// Simulating a server request
await Future.delayed(Duration(seconds: 2));
- Get.snackbar('Success'.tr,
+
+ mySnackbarSuccess(
'${selectedContacts.length} contacts saved to server'.tr);
} catch (e) {
- Get.snackbar('Error'.tr,
+ mySnackeBarError(
'An error occurred while saving contacts to server: $e'.tr);
}
}
@@ -134,16 +136,13 @@ Download the SEFER app now and enjoy your ride!
update();
if (contacts.isEmpty) {
- Get.snackbar('No contacts available'.tr,
- 'Please add contacts to your phone.'.tr);
+ mySnackeBarError('Please add contacts to your phone.'.tr);
}
} else {
- Get.snackbar('Permission denied'.tr,
- 'Contact permission is required to pick contacts'.tr);
+ mySnackeBarError('Contact permission is required to pick contacts'.tr);
}
} catch (e) {
- Get.snackbar(
- 'Error'.tr, 'An error occurred while picking contacts: $e'.tr);
+ mySnackeBarError('An error occurred while picking contacts: $e'.tr);
}
}
@@ -267,7 +266,7 @@ Download the SEFER app now and enjoy your ride!
void sendInvite() async {
if (invitePhoneController.text.isEmpty) {
- Get.snackbar('Error', 'Please enter an phone address'.tr);
+ mySnackeBarError('Please enter an phone address'.tr);
return;
}
@@ -281,8 +280,7 @@ Download the SEFER app now and enjoy your ride!
if (response != 'failure') {
var d = jsonDecode(response);
- Get.snackbar('Success', 'Invite sent successfully'.tr);
-
+ mySnackbarSuccess('Invite sent successfully'.tr);
String message = '${'*SEFER DRIVER CODE*'.tr}\n\n'
'${"Use this code in registration".tr}\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();
} else {
- Get.snackbar('Error'.tr, "Invite code already used".tr,
- backgroundColor: AppColor.redColor,
- duration: const Duration(seconds: 4));
+ mySnackeBarError("Invite code already used".tr);
}
- // } catch (e) {
- // Get.snackbar('Error', 'An error occurred'.tr);
- // }
}
void sendInviteToPassenger() async {
if (invitePhoneController.text.isEmpty) {
- Get.snackbar('Error', 'Please enter an phone address'.tr);
+ mySnackeBarError('Please enter an phone address'.tr);
+
return;
}
@@ -323,7 +317,8 @@ Download the SEFER app now and enjoy your ride!
if (response != 'failure') {
var d = jsonDecode(response);
- Get.snackbar('Success', 'Invite sent successfully'.tr);
+
+ mySnackbarSuccess('Invite sent successfully'.tr);
String message = '${'*SEFER APP CODE*'.tr}\n\n'
'${"Use this code in registration".tr}\n'
@@ -339,13 +334,10 @@ Download the SEFER app now and enjoy your ride!
invitePhoneController.clear();
} else {
- Get.snackbar('Error'.tr, "Invite code already used".tr,
- backgroundColor: AppColor.redColor,
- duration: const Duration(seconds: 4));
+ mySnackeBarError(
+ "Invite code already used".tr,
+ );
}
- // } catch (e) {
- // Get.snackbar('Error', 'An error occurred'.tr);
- // }
}
}
diff --git a/lib/controller/auth/captin/login_captin_controller.dart b/lib/controller/auth/captin/login_captin_controller.dart
index 785728c..feb195e 100644
--- a/lib/controller/auth/captin/login_captin_controller.dart
+++ b/lib/controller/auth/captin/login_captin_controller.dart
@@ -1,12 +1,10 @@
import 'dart:convert';
import 'dart:math';
-import 'package:SEFER/constant/colors.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/login_captin.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_secure_storage/flutter_secure_storage.dart';
import 'package:get/get.dart';
@@ -164,7 +162,7 @@ class LoginDriverController extends GetxController {
box.write(BoxName.carTypeOfDriver, 'Pink Bike');
}
} else if (int.parse(jsonDecoeded['data'][0]['year'].toString()) >
- 2017) {
+ 2016) {
if (jsonDecoeded['data'][0]['gender'].toString() != 'Male') {
box.write(BoxName.carTypeOfDriver, 'Lady');
} else {
@@ -172,7 +170,7 @@ class LoginDriverController extends GetxController {
}
} else if (int.parse(jsonDecoeded['data'][0]['year'].toString()) >
2002 &&
- int.parse(jsonDecoeded['data'][0]['year'].toString()) < 2017) {
+ int.parse(jsonDecoeded['data'][0]['year'].toString()) < 2016) {
box.write(BoxName.carTypeOfDriver, 'Speed');
} else if (int.parse(jsonDecoeded['data'][0]['year'].toString()) <
2002) {
@@ -204,7 +202,7 @@ class LoginDriverController extends GetxController {
'token': box.read(BoxName.tokenDriver),
'captain_id': box.read(BoxName.driverID).toString()
});
- CRUD().post(
+ await CRUD().post(
link:
"${AppLink.seferAlexandriaServer}/ride/firebase/addDriver.php",
payload: {
@@ -212,30 +210,29 @@ class LoginDriverController extends GetxController {
'captain_id':
box.read(BoxName.driverID).toString()
});
- CRUD().post(
- link:
- "${AppLink.seferGizaServer}/ride/firebase/addDriver.php",
- payload: {
- 'token': box.read(BoxName.tokenDriver),
- 'captain_id':
- box.read(BoxName.driverID).toString()
- });
+ // await CRUD().post(
+ // link:
+ // "${AppLink.seferGizaServer}/ride/firebase/addDriver.php",
+ // payload: {
+ // 'token': box.read(BoxName.tokenDriver),
+ // 'captain_id':
+ // box.read(BoxName.driverID).toString()
+ // });
Get.back();
}));
}
}
Get.off(() => HomeCaptain());
- // Get.off(() => LoginCaptin());
} else {
Get.offAll(() => SmsSignupEgypt());
- // Get.snackbar(jsonDecoeded['status'], jsonDecoeded['data'],
- // backgroundColor: Colors.redAccent);
+
isloading = false;
update();
}
} else {
- Get.snackbar('failure'.tr, '', backgroundColor: AppColor.redColor);
+ mySnackbarSuccess('');
+
isloading = false;
update();
}
@@ -263,7 +260,6 @@ class LoginDriverController extends GetxController {
isloading = false;
update();
- // Get.snackbar('Failure', '', backgroundColor: Colors.red);
} else {
var jsonDecoeded = jsonDecode(res);
if (jsonDecoeded.isNotEmpty) {
@@ -321,7 +317,7 @@ class LoginDriverController extends GetxController {
'change device'.tr,
jsonDecode(token)['data'][0]['token'].toString(),
[],
- 'promo.wav');
+ 'ding.wav');
Get.defaultDialog(
title: 'you will use this device?'.tr,
middleText: '',
@@ -333,7 +329,7 @@ class LoginDriverController extends GetxController {
'token': box.read(BoxName.tokenDriver),
'captain_id': box.read(BoxName.driverID).toString()
});
- CRUD().post(
+ await CRUD().post(
link:
"${AppLink.seferAlexandriaServer}/ride/firebase/addDriver.php",
payload: {
@@ -341,7 +337,7 @@ class LoginDriverController extends GetxController {
'captain_id':
box.read(BoxName.driverID).toString()
});
- CRUD().post(
+ await CRUD().post(
link:
"${AppLink.seferGizaServer}/ride/firebase/addDriver.php",
payload: {
@@ -358,13 +354,13 @@ class LoginDriverController extends GetxController {
// Get.off(() => LoginCaptin());
} else {
Get.offAll(() => SmsSignupEgypt());
- // Get.snackbar(jsonDecoeded['status'], jsonDecoeded['data'],
- // backgroundColor: Colors.redAccent);
+
isloading = false;
update();
}
} else {
- Get.snackbar('failure'.tr, '', backgroundColor: AppColor.redColor);
+ mySnackeBarError('');
+
isloading = false;
update();
}
diff --git a/lib/controller/auth/captin/register_captin_controller.dart b/lib/controller/auth/captin/register_captin_controller.dart
index 087cbd9..0b35f9b 100644
--- a/lib/controller/auth/captin/register_captin_controller.dart
+++ b/lib/controller/auth/captin/register_captin_controller.dart
@@ -4,6 +4,7 @@ import 'dart:math';
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/register_captin.dart';
+import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:SEFER/constant/box_name.dart';
@@ -152,8 +153,9 @@ class RegisterCaptainController extends GetxController {
update();
}
} else {
- Get.snackbar('Phone Number wrong'.tr, '',
- backgroundColor: AppColor.redColor);
+ mySnackeBarError(
+ 'Phone Number wrong'.tr,
+ );
}
}
}
@@ -235,11 +237,7 @@ class RegisterCaptainController extends GetxController {
// Handle case where phone number is already verified
_handleAlreadyVerified() {
- Get.snackbar(
- 'Phone number is already verified'.tr,
- '',
- backgroundColor: AppColor.greenColor,
- );
+ mySnackbarSuccess('Phone number is already verified'.tr);
box.write(BoxName.phoneVerified, '1');
box.write(BoxName.phone, '+2${phoneController.text}');
Get.put(LoginDriverController()).loginUsingCredentials(
@@ -263,7 +261,6 @@ class RegisterCaptainController extends GetxController {
},
);
- // Get.snackbar('', '');
await smsEgyptController.sendSmsEgypt(phoneNumber, randomNumber.toString());
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
void _showErrorMessage(String message) {
- Get.snackbar(
- message.tr,
- '',
- backgroundColor: AppColor.redColor,
- );
+ mySnackeBarError(message);
}
verifySMSCode() async {
@@ -315,8 +308,7 @@ class RegisterCaptainController extends GetxController {
// }
}
} else {
- Get.snackbar('Error'.tr, 'you must insert token code '.tr,
- backgroundColor: AppColor.redColor);
+ mySnackeBarError('you must insert token code '.tr);
}
}
diff --git a/lib/controller/auth/google_sign.dart b/lib/controller/auth/google_sign.dart
index bf8f3ff..360556b 100644
--- a/lib/controller/auth/google_sign.dart
+++ b/lib/controller/auth/google_sign.dart
@@ -6,6 +6,7 @@ import 'package:SEFER/controller/functions/crud.dart';
import 'package:SEFER/main.dart';
import 'package:SEFER/views/auth/captin/cards/sms_signup.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:google_sign_in/google_sign_in.dart';
@@ -116,8 +117,7 @@ class GoogleSignInHelper {
return googleUser;
} catch (error) {
- Get.snackbar('Google Sign-In error', '$error',
- backgroundColor: AppColor.redColor);
+ mySnackeBarError('$error');
addError(error.toString(), 'GoogleSignInAccount?> signInFromLogin()');
return null;
}
diff --git a/lib/controller/auth/login_controller.dart b/lib/controller/auth/login_controller.dart
index 367a053..91f7e26 100644
--- a/lib/controller/auth/login_controller.dart
+++ b/lib/controller/auth/login_controller.dart
@@ -1,6 +1,7 @@
import 'dart:convert';
import 'dart:math';
+import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:flutter/material.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:get/get.dart';
@@ -50,7 +51,7 @@ class LoginController extends GetxController {
update();
if (res == 'failure') {
//Failure
- Get.snackbar('Failure', '', backgroundColor: Colors.red);
+ mySnackeBarError('');
} else {
var jsonDecoeded = jsonDecode(res);
if (jsonDecoeded.isNotEmpty) {
@@ -90,8 +91,7 @@ class LoginController extends GetxController {
);
}
} else if (jsonDecoeded['status'] == 'Failure') {
- Get.snackbar(jsonDecoeded['status'], jsonDecoeded['data'],
- backgroundColor: Colors.redAccent);
+ mySnackeBarError(jsonDecoeded['data']);
isloading = false;
update();
}
diff --git a/lib/controller/auth/tokens_controller.dart b/lib/controller/auth/tokens_controller.dart
index 3458470..73be75e 100644
--- a/lib/controller/auth/tokens_controller.dart
+++ b/lib/controller/auth/tokens_controller.dart
@@ -1,5 +1,6 @@
import 'dart:convert';
+import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:get/get.dart';
import 'package:http/http.dart' as http;
@@ -31,7 +32,7 @@ class TokenController extends GetxController {
update();
var jsonToken = jsonDecode(res.body);
if (jsonToken['status'] == 'The token has been updated successfully.') {
- Get.snackbar('token updated'.tr, '');
+ mySnackbarSuccess('token updated'.tr);
}
}
}
diff --git a/lib/controller/firebase/firbase_messge.dart b/lib/controller/firebase/firbase_messge.dart
index e862b2e..6c85c7a 100644
--- a/lib/controller/firebase/firbase_messge.dart
+++ b/lib/controller/firebase/firbase_messge.dart
@@ -1,8 +1,7 @@
import 'dart:convert';
import 'dart:io';
import 'package:SEFER/controller/home/captin/home_captain_controller.dart';
-import 'package:SEFER/env/env.dart';
-import 'package:SEFER/print.dart';
+import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:SEFER/views/widgets/mydialoug.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
@@ -10,7 +9,6 @@ import 'package:get/get.dart';
import 'package:http/http.dart' as http;
import 'package:SEFER/views/widgets/elevated_btn.dart';
-import '../../constant/api_key.dart';
import '../../constant/box_name.dart';
import '../../constant/colors.dart';
import '../../constant/style.dart';
@@ -208,8 +206,6 @@ class FirebaseMessagesController extends GetxController {
update();
} else if (message.notification!.title! == 'Hi ,I will go now') {
- // Get.snackbar('Hi ,I will go now', '',
- // backgroundColor: AppColor.greenColor);
if (Platform.isAndroid) {
notificationController.showNotification(
'Passenger come to you'.tr, 'Hi ,I will go now'.tr, 'tone2', '');
@@ -274,14 +270,7 @@ class FirebaseMessagesController extends GetxController {
// Get.off(const CallPage());
} catch (e) {}
} else if (message.notification!.title! == 'Order Applied'.tr) {
- Get.snackbar(
- "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,
- );
+ mySnackbarSuccess("The order has been accepted by another driver.".tr);
} else if (message.notification!.title! == 'Order') {
if (Platform.isAndroid) {
notificationController.showNotification(
diff --git a/lib/controller/firebase/local_notification.dart b/lib/controller/firebase/local_notification.dart
index 1f16930..c689aad 100644
--- a/lib/controller/firebase/local_notification.dart
+++ b/lib/controller/firebase/local_notification.dart
@@ -230,7 +230,7 @@ class NotificationController extends GetxController {
});
}
- void scheduleDailyNotifications(
+ void scheduleNotificationsForSevenDays(
String title, String message, String tone) async {
final AndroidNotificationDetails android = AndroidNotificationDetails(
'high_importance_channel',
@@ -262,47 +262,72 @@ class NotificationController extends GetxController {
}
}
- // Schedule notifications for 10:00 AM and 3:00 PM daily
- await _scheduleNotificationForTime(7, 0, title, message, details);
- await _scheduleNotificationForTime(13, 0, title, message, details);
- await _scheduleNotificationForTime(18, 0, title, message, details);
- // await _scheduleNotificationForTime(0, 22, title, message, details);
+ // Schedule notifications for the next 7 days
+ for (int day = 0; day < 7; day++) {
+ // Schedule for 8:00 AM
+ await _scheduleNotificationForTime(
+ 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 _scheduleNotificationForTime(int hour, int minute, String title,
- String message, NotificationDetails details) async {
+ Future _scheduleNotificationForTime(
+ int dayOffset,
+ int hour,
+ int minute,
+ String title,
+ String message,
+ NotificationDetails details,
+ int notificationId,
+ ) async {
// Initialize and set Cairo timezone
tz.initializeTimeZones();
- final cairoLocation = tz.getLocation('Africa/Cairo'); // Set Cairo timezone
+ var cairoLocation = tz.getLocation('Africa/Cairo');
- final now = tz.TZDateTime.now(
- cairoLocation); // Use Cairo timezone for the current time
+ final now = tz.TZDateTime.now(cairoLocation);
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)) {
- scheduledDate = scheduledDate.add(const Duration(days: 1));
+ scheduledDate = scheduledDate.add(Duration(days: 1));
}
print('Current time (Cairo): $now');
print('Scheduling notification for: $scheduledDate');
await _flutterLocalNotificationsPlugin.zonedSchedule(
- 0, // Use unique IDs if you want to manage each notification separately
+ notificationId, // Unique ID for each notification
title,
message,
scheduledDate,
details,
- androidAllowWhileIdle: true,
+ androidScheduleMode: AndroidScheduleMode.exact,
uiLocalNotificationDateInterpretation:
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(
diff --git a/lib/controller/firebase/order_lay.dart b/lib/controller/firebase/order_lay.dart
index 7d5dc75..90e2938 100644
--- a/lib/controller/firebase/order_lay.dart
+++ b/lib/controller/firebase/order_lay.dart
@@ -1,10 +1,8 @@
import 'package:SEFER/constant/links.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/orderCaptin/order_request_page.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart';
import 'package:flutter/material.dart';
-import 'package:get/get.dart';
class OverlayContent1 extends StatelessWidget {
@override
diff --git a/lib/controller/functions/crud.dart b/lib/controller/functions/crud.dart
index aaed62b..d0ee70c 100644
--- a/lib/controller/functions/crud.dart
+++ b/lib/controller/functions/crud.dart
@@ -231,9 +231,9 @@ class CRUD {
);
Log.print('response: ${response.request}');
Log.print('response: ${response.body}');
- Log.print('response: ${response.statusCode}');
- Log.print('response: ${response.reasonPhrase}');
- Log.print('response: ${payload}');
+ // Log.print('response: ${response.statusCode}');
+ // Log.print('response: ${response.reasonPhrase}');
+ // Log.print('response: ${payload}');
var jsonData = jsonDecode(response.body);
if (response.statusCode == 200) {
if (jsonData['status'] == 'success') {
diff --git a/lib/controller/functions/gemeni.dart b/lib/controller/functions/gemeni.dart
index 8b520b2..517ef49 100644
--- a/lib/controller/functions/gemeni.dart
+++ b/lib/controller/functions/gemeni.dart
@@ -10,6 +10,7 @@ import 'package:SEFER/controller/functions/crud.dart';
import 'package:SEFER/controller/functions/device_info.dart';
import 'package:SEFER/main.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:flutter/material.dart';
import 'package:get/get.dart';
@@ -63,11 +64,9 @@ class AI extends GetxController {
if (res != 'failure') {
isInviteDriverFound = true;
update();
- Get.snackbar("Code approved".tr, '',
- backgroundColor: AppColor.greenColor);
+ mySnackbarSuccess("Code approved".tr);
} else {
- Get.snackbar("Code not approved".tr, '',
- backgroundColor: AppColor.redColor);
+ mySnackeBarError("Code not approved".tr);
}
}
}
@@ -80,11 +79,9 @@ class AI extends GetxController {
if (res != 'failure') {
isInviteDriverFound = true;
update();
- Get.snackbar("Code approved".tr, '',
- backgroundColor: AppColor.greenColor);
+ mySnackbarSuccess("Code approved".tr);
} else {
- Get.snackbar("Code not approved".tr, '',
- backgroundColor: AppColor.redColor);
+ mySnackeBarError("Code not approved".tr);
}
}
}
@@ -386,18 +383,17 @@ class AI extends GetxController {
CRUD().post(
link: '${AppLink.seferAlexandriaServer}/auth/captin/register.php',
payload: payload);
- Get.snackbar('Success', 'Driver data saved successfully',
- backgroundColor: AppColor.greenColor);
+ mySnackbarSuccess('Driver data saved successfully');
} else {
- Get.snackbar('Error'.tr,
- '${'Failed to save driver data'.tr}: ${status1['message']}',
- backgroundColor: Colors.red);
+ mySnackeBarError(
+ '${'Failed to save driver data'.tr}: ${status1['message']}');
}
} catch (e) {
isLoading = false;
update();
- Get.snackbar('Error'.tr, 'An error occurred while saving driver data'.tr,
- backgroundColor: Colors.red);
+ mySnackeBarError(
+ 'An error occurred while saving driver data'.tr,
+ );
}
}
@@ -408,7 +404,7 @@ class AI extends GetxController {
"InspectionResult": responseCriminalRecordEgypt['InspectionResult'],
});
if (res != 'failure') {
- Get.snackbar('uploaded sucssefuly'.tr, '');
+ mySnackbarSuccess('uploaded sucssefuly'.tr);
}
}
@@ -439,8 +435,7 @@ class AI extends GetxController {
var status = jsonDecode(res);
if (status['status'] == 'success') {
isCarSaved = true;
- Get.snackbar('Success', 'message',
- backgroundColor: AppColor.greenColor);
+ mySnackbarSuccess('');
CRUD().post(
link:
'${AppLink.seferAlexandriaServer}/ride/RegisrationCar/add.php',
@@ -979,8 +974,7 @@ class AI extends GetxController {
update();
} else {
- Get.snackbar('Error', "JSON string not found",
- backgroundColor: AppColor.redColor);
+ mySnackeBarError("JSON string not found");
}
// Rest of your code...
diff --git a/lib/controller/functions/log_out.dart b/lib/controller/functions/log_out.dart
index b13a267..00e4add 100644
--- a/lib/controller/functions/log_out.dart
+++ b/lib/controller/functions/log_out.dart
@@ -1,6 +1,7 @@
import 'dart:io';
import 'package:SEFER/views/home/on_boarding_page.dart';
+import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:SEFER/constant/box_name.dart';
@@ -174,9 +175,9 @@ class LogOutController extends GetxController {
'email': box.read(BoxName.email),
});
} else {
- Get.snackbar('Email Wrong'.tr, 'Email you inserted is Wrong.'.tr,
- snackPosition: SnackPosition.BOTTOM,
- backgroundColor: AppColor.redColor);
+ mySnackeBarError(
+ 'Email you inserted is Wrong.'.tr,
+ );
}
}
}
diff --git a/lib/controller/functions/tts.dart b/lib/controller/functions/tts.dart
index 058184b..068dab9 100644
--- a/lib/controller/functions/tts.dart
+++ b/lib/controller/functions/tts.dart
@@ -1,5 +1,6 @@
import 'package:SEFER/constant/box_name.dart';
import 'package:SEFER/main.dart';
+import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:flutter/material.dart';
import 'package:flutter_tts/flutter_tts.dart';
import 'package:get/get.dart';
@@ -45,8 +46,7 @@ class TextToSpeechController extends GetxController {
update();
}
} catch (error) {
- // Handle error gracefully, e.g., show a message
- Get.snackbar('Error', 'Failed to speak text: $error');
+ mySnackeBarError('Failed to speak text: $error');
}
}
}
diff --git a/lib/controller/functions/upload_image.dart b/lib/controller/functions/upload_image.dart
index f2d11cf..b521459 100644
--- a/lib/controller/functions/upload_image.dart
+++ b/lib/controller/functions/upload_image.dart
@@ -1,6 +1,7 @@
import 'dart:convert';
import 'dart:io';
import 'package:SEFER/constant/api_key.dart';
+import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:get/get.dart';
import 'package:http/http.dart' as http;
import 'package:image_cropper/image_cropper.dart';
@@ -152,8 +153,9 @@ class ImageController extends GetxController {
);
} catch (e) {
print('Error in choosImage: $e');
- Get.snackbar('Image Upload Failed'.tr, e.toString(),
- backgroundColor: AppColor.primaryColor);
+ mySnackeBarError('Image Upload Failed'.tr);
+ // Get.snackbar('Image Upload Failed'.tr, e.toString(),
+ // backgroundColor: AppColor.primaryColor);
} finally {
isloading = false;
update();
@@ -211,8 +213,9 @@ class ImageController extends GetxController {
);
} catch (e) {
print('Error in choosImage: $e');
- Get.snackbar('Image Upload Failed'.tr, e.toString(),
- backgroundColor: AppColor.primaryColor);
+ // Get.snackbar('Image Upload Failed'.tr, e.toString(),
+ // backgroundColor: AppColor.primaryColor);
+ mySnackeBarError('Image Upload Failed'.tr);
} finally {
isloading = false;
update();
@@ -287,8 +290,9 @@ class ImageController extends GetxController {
link,
);
} catch (e) {
- Get.snackbar('Image Upload Failed'.tr, e.toString(),
- backgroundColor: AppColor.redColor);
+ mySnackeBarError('Image Upload Failed'.tr);
+ // Get.snackbar('Image Upload Failed'.tr, e.toString(),
+ // backgroundColor: AppColor.redColor);
} finally {
isloading = false;
update();
@@ -420,8 +424,9 @@ class ImageController extends GetxController {
link,
);
} catch (e) {
- Get.snackbar('Image Upload Failed'.tr, e.toString(),
- backgroundColor: AppColor.redColor);
+ mySnackeBarError('Image Upload Failed'.tr);
+ // Get.snackbar('Image Upload Failed'.tr, e.toString(),
+ // backgroundColor: AppColor.redColor);
} finally {
isloading = false;
update();
diff --git a/lib/controller/home/captin/help/assurance_controller.dart b/lib/controller/home/captin/help/assurance_controller.dart
index e6c81e4..9b14b02 100644
--- a/lib/controller/home/captin/help/assurance_controller.dart
+++ b/lib/controller/home/captin/help/assurance_controller.dart
@@ -4,6 +4,7 @@ import 'package:SEFER/constant/box_name.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:get/get.dart';
import '../../../../constant/colors.dart';
@@ -43,20 +44,13 @@ class AssuranceHealthController extends GetxController {
if (response != 'failure') {
// Handle success (e.g., show a success message)
- print("Health assurance data saved successfully");
- Get.snackbar(
- "Success".tr,
- "You have successfully opted for health insurance.".tr,
- backgroundColor: AppColor.greenColor,
- );
+
+ mySnackbarSuccess(
+ "You have successfully opted for health insurance.".tr);
} else {
// Handle failure (e.g., show an error message)
print("Failed to save health assurance data");
- Get.snackbar(
- "Error".tr,
- "Please enter a health insurance status.".tr,
- backgroundColor: AppColor.redColor,
- );
+ mySnackeBarError("Please enter a health insurance status.".tr);
}
} catch (e) {
// Handle any errors
diff --git a/lib/controller/home/captin/help/video_controller.dart b/lib/controller/home/captin/help/video_controller.dart
index 6f57f8c..e9c9c60 100644
--- a/lib/controller/home/captin/help/video_controller.dart
+++ b/lib/controller/home/captin/help/video_controller.dart
@@ -3,6 +3,7 @@ import 'dart:convert';
import 'package:SEFER/constant/links.dart';
import 'package:SEFER/controller/functions/crud.dart';
import 'package:SEFER/print.dart';
+import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:get/get.dart';
import 'package:video_player/video_player.dart';
@@ -57,10 +58,10 @@ class VideoController extends GetxController {
// Log.print('videos: ${videos}');
update();
} else {
- Get.snackbar('Error'.tr, '');
+ mySnackeBarError('');
}
} catch (e) {
- Get.snackbar("Error", e.toString());
+ mySnackeBarError(e.toString());
} finally {
isLoading(false);
}
diff --git a/lib/controller/home/captin/home_captain_controller.dart b/lib/controller/home/captin/home_captain_controller.dart
index 7434d14..e772c48 100644
--- a/lib/controller/home/captin/home_captain_controller.dart
+++ b/lib/controller/home/captin/home_captain_controller.dart
@@ -302,13 +302,13 @@ class HomeCaptainController extends GetxController {
'token': box.read(BoxName.tokenDriver),
'captain_id': box.read(BoxName.driverID).toString()
});
- CRUD().post(
+ await CRUD().post(
link: "${AppLink.seferAlexandriaServer}/ride/firebase/addDriver.php",
payload: {
'token': box.read(BoxName.tokenDriver),
'captain_id': box.read(BoxName.driverID).toString()
});
- CRUD().post(
+ await CRUD().post(
link: "${AppLink.seferGizaServer}/ride/firebase/addDriver.php",
payload: {
'token': box.read(BoxName.tokenDriver),
diff --git a/lib/controller/home/captin/map_driver_controller.dart b/lib/controller/home/captin/map_driver_controller.dart
index e4ff59b..dade0c3 100644
--- a/lib/controller/home/captin/map_driver_controller.dart
+++ b/lib/controller/home/captin/map_driver_controller.dart
@@ -551,7 +551,8 @@ class MapDriverController extends GetxController {
);
MyDialog().getDialog('Are you sure to exit ride ?'.tr, '', () {
if (distanceToDestination > 900 ||
- (double.parse(distance) < 1000 && distanceToDestination > 150)) {
+ (double.parse(distance.toString()) < 1000 &&
+ distanceToDestination > 150)) {
Get.back();
finishRideFromDriver1();
} else {
@@ -611,16 +612,17 @@ class MapDriverController extends GetxController {
paymentAmount = totalCost;
box.write(BoxName.statusDriverLocation, 'off');
// changeRideToBeginToPassenger();
- await CRUD()
- .post(link: "${AppLink.seferCairoServer}/rides/update.php", payload: {
- 'id': rideId,
- 'rideTimeFinish': DateTime.now().toString(),
- 'status': 'Finished',
- 'price': totalCost,
- });
+ await CRUD().post(
+ link: "${AppLink.seferCairoServer}/ride/rides/update.php",
+ payload: {
+ 'id': rideId,
+ 'rideTimeFinish': DateTime.now().toString(),
+ 'status': 'Finished',
+ 'price': totalCost,
+ });
if (AppLink.endPoint != AppLink.seferCairoServer) {
CRUD().post(
- link: "${AppLink.endPoint}/rides/update.php",
+ link: "${AppLink.endPoint}/ride/rides/update.php",
payload: {
'id': rideId,
'rideTimeFinish': DateTime.now().toString(),
diff --git a/lib/controller/home/payment/captain_wallet_controller.dart b/lib/controller/home/payment/captain_wallet_controller.dart
index 9347b1e..9f004b0 100644
--- a/lib/controller/home/payment/captain_wallet_controller.dart
+++ b/lib/controller/home/payment/captain_wallet_controller.dart
@@ -4,6 +4,7 @@ import 'package:SEFER/constant/colors.dart';
import 'package:SEFER/constant/style.dart';
import 'package:SEFER/controller/firebase/firbase_messge.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart';
+import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:SEFER/constant/box_name.dart';
@@ -81,22 +82,10 @@ class CaptainWalletController extends GetxController {
amountToNewDriverMap = d['data'];
// update();
} else {
- Get.snackbar(
- "This driver is not registered".tr,
- '',
- duration: const Duration(seconds: 3),
- backgroundColor: AppColor.redColor,
- snackPosition: SnackPosition.BOTTOM,
- );
+ mySnackeBarError("This driver is not registered".tr);
}
} else {
- Get.snackbar(
- 'Your Budget less than needed'.tr,
- '',
- duration: const Duration(seconds: 3),
- backgroundColor: AppColor.redColor,
- snackPosition: SnackPosition.BOTTOM,
- );
+ mySnackeBarError('Your Budget less than needed'.tr);
}
}
}
diff --git a/lib/controller/home/payment/paymob_payout.dart b/lib/controller/home/payment/paymob_payout.dart
index 0420a7c..513d7ac 100644
--- a/lib/controller/home/payment/paymob_payout.dart
+++ b/lib/controller/home/payment/paymob_payout.dart
@@ -5,6 +5,7 @@ import 'package:SEFER/constant/box_name.dart';
import 'package:SEFER/constant/colors.dart';
import 'package:SEFER/main.dart';
import 'package:SEFER/print.dart';
+import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:get/get.dart';
import 'package:http/http.dart' as http;
import 'package:secure_string_operations/secure_string_operations.dart';
@@ -91,14 +92,11 @@ class PaymobPayout extends GetxController {
'Wallet',
box.read(BoxName.emailDriver).toString());
- Get.snackbar('Transaction successful'.tr,
- '${'Transaction successful'.tr} ${dec['amount']}',
- backgroundColor: AppColor.greenColor);
+ mySnackbarSuccess('${'Transaction successful'.tr} ${dec['amount']}');
Get.find().refreshCaptainWallet();
} else if (dec['disbursement_status'] == 'failed') {
- Get.snackbar('Transaction failed'.tr, 'Transaction failed'.tr,
- backgroundColor: AppColor.redColor);
+ mySnackeBarError('Transaction failed'.tr);
}
}
@@ -175,14 +173,10 @@ class PaymobPayout extends GetxController {
'Wallet',
box.read(BoxName.emailDriver).toString());
- Get.snackbar('Transaction successful'.tr,
- '${'Transaction successful'.tr} ${dec['amount']}',
- backgroundColor: AppColor.greenColor);
-
+ mySnackbarSuccess('${'Transaction successful'.tr} ${dec['amount']}');
Get.find().refreshCaptainWallet();
} else if (dec['disbursement_status'] == 'failed') {
- Get.snackbar('Transaction failed'.tr, 'Transaction failed'.tr,
- backgroundColor: AppColor.redColor);
+ mySnackeBarError('Transaction failed'.tr);
}
}
diff --git a/lib/controller/local/translations.dart b/lib/controller/local/translations.dart
index 62ac7bf..fc8f915 100644
--- a/lib/controller/local/translations.dart
+++ b/lib/controller/local/translations.dart
@@ -197,7 +197,13 @@ class MyTranslation extends Translations {
"Choose from contact": "اختر من جهات الاتصال",
"Cancel": "إلغاء",
"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.":
"افتح التطبيق لتبقى على اطلاع واستعداد للمهام القادمة.",
"No invitation found": "لم يتم العثور على دعوة",
diff --git a/lib/controller/payment/payment_controller.dart b/lib/controller/payment/payment_controller.dart
index 04a33d2..04b49fc 100644
--- a/lib/controller/payment/payment_controller.dart
+++ b/lib/controller/payment/payment_controller.dart
@@ -4,6 +4,7 @@ import 'package:SEFER/constant/style.dart';
import 'package:SEFER/controller/functions/tts.dart';
import 'package:SEFER/controller/payment/paymob/paymob_response.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:flutter/material.dart';
import 'package:flutter_paypal/flutter_paypal.dart';
@@ -396,7 +397,8 @@ class PaymentController extends GetxController {
'accountBank': box.read(BoxName.accountIdStripeConnect),
});
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(),
onPayment: (PaymobResponseWallet response) {},
);
- // Log.print('message: ${response!.message}');
- // Log.print('responseCode: ${response.responseCode}');
- // Log.print('success: ${response.success}');
- // Log.print('transactionID: ${response.transactionID}');
- if (response!.responseCode == '200' && response.success == true) {
+ Log.print('message: ${response!.message}');
+ Log.print('responseCode: ${response.responseCode}');
+ Log.print('success: ${response.success}');
+ Log.print('transactionID: ${response.transactionID}');
+ if (response.responseCode.toString() == '200' &&
+ response.success == true) {
// Log.print('transactionID wewer: ${response.transactionID}');
Toast.show(context, 'Payment Successful'.tr, AppColor.greenColor);
method();
diff --git a/lib/controller/rate/rate_app_controller.dart b/lib/controller/rate/rate_app_controller.dart
new file mode 100644
index 0000000..862fad6
--- /dev/null
+++ b/lib/controller/rate/rate_app_controller.dart
@@ -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 _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');
+ }
+ }
+}
diff --git a/lib/controller/rate/rate_conroller.dart b/lib/controller/rate/rate_conroller.dart
index 81669c8..4cd172d 100644
--- a/lib/controller/rate/rate_conroller.dart
+++ b/lib/controller/rate/rate_conroller.dart
@@ -2,6 +2,7 @@ import 'package:SEFER/constant/colors.dart';
import 'package:SEFER/controller/firebase/firbase_messge.dart';
import 'package:SEFER/controller/home/captin/map_driver_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:get/get.dart';
import 'package:SEFER/constant/box_name.dart';
@@ -54,8 +55,7 @@ class RateController extends GetxController {
'token': paymentToken2,
}).then((value) async {
if (value != 'failure') {
- Get.snackbar('Wallet Added'.tr, '',
- backgroundColor: AppColor.greenColor);
+ mySnackbarSuccess('Wallet Added'.tr);
// if (double.parse(
// Get.find().totalAmountVisa) >
// remainingFee) {
diff --git a/lib/main.dart b/lib/main.dart
index 5b16a68..1f0421b 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -130,6 +130,8 @@ void main() async {
}
if (Platform.isAndroid || Platform.isIOS) {
+ NotificationController notificationController =
+ Get.put(NotificationController());
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
@@ -141,8 +143,7 @@ void main() async {
// if (Platform.isAndroid) {
// await Get.put(NotificationController()).initNotifications();
// }
- NotificationController notificationController =
- Get.put(NotificationController());
+
await notificationController.initNotifications();
// Generate a random index to pick a message
@@ -150,7 +151,7 @@ void main() async {
final randomMessage = driverMessages[random.nextInt(driverMessages.length)];
// Schedule the notification with the random message
- notificationController.scheduleDailyNotifications(
+ notificationController.scheduleNotificationsForSevenDays(
randomMessage.split(':')[0],
randomMessage.split(':')[1],
"ding",
diff --git a/lib/splash_screen_page.dart b/lib/splash_screen_page.dart
index 59ef7b1..0bf8e5a 100644
--- a/lib/splash_screen_page.dart
+++ b/lib/splash_screen_page.dart
@@ -6,7 +6,6 @@ import 'package:SEFER/constant/colors.dart';
import 'package:SEFER/constant/info.dart';
import 'package:SEFER/constant/style.dart';
-import 'controller/functions/location_background_controller.dart';
import 'controller/home/splash_screen_controlle.dart';
import 'main.dart';
diff --git a/lib/views/Rate/rate_app_page.dart b/lib/views/Rate/rate_app_page.dart
new file mode 100644
index 0000000..5ab1402
--- /dev/null
+++ b/lib/views/Rate/rate_app_page.dart
@@ -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;
+ },
+ );
+ }),
+ );
+ }
+}
diff --git a/lib/views/auth/captin/cards/sms_signup.dart b/lib/views/auth/captin/cards/sms_signup.dart
index 889315a..c7a8533 100644
--- a/lib/views/auth/captin/cards/sms_signup.dart
+++ b/lib/views/auth/captin/cards/sms_signup.dart
@@ -1,3 +1,4 @@
+import 'package:SEFER/constant/colors.dart';
import 'package:SEFER/constant/style.dart';
import 'package:SEFER/controller/auth/captin/register_captin_controller.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:get/get.dart';
+import '../../../Rate/rate_app_page.dart';
+
class SmsSignupEgypt extends StatelessWidget {
SmsSignupEgypt({super.key});
@@ -102,6 +105,15 @@ class SmsSignupEgypt extends StatelessWidget {
title: 'Submit'.tr,
),
),
+ Padding(
+ padding: const EdgeInsets.all(16.0),
+ child: MyElevatedButton(
+ kolor: AppColor.yellowColor,
+ title: "Rate Our App".tr,
+ onPressed: () {
+ Get.to(RatingScreen());
+ }),
+ )
],
);
}),
diff --git a/lib/views/auth/captin/driver_car_controller.dart b/lib/views/auth/captin/driver_car_controller.dart
index 04fad6c..47f72f3 100644
--- a/lib/views/auth/captin/driver_car_controller.dart
+++ b/lib/views/auth/captin/driver_car_controller.dart
@@ -5,6 +5,7 @@ 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:get/get.dart';
class DriverCarController extends GetxController {
@@ -60,10 +61,11 @@ class DriverCarController extends GetxController {
},
);
if (res != 'failure') {
- Get.snackbar('Success'.tr, '', backgroundColor: AppColor.greenColor);
+ mySnackbarSuccess('');
+
fetchCatrsForDrivers();
} else {
- Get.snackbar('Error'.tr, '', backgroundColor: AppColor.redColor);
+ mySnackeBarError('');
}
}
diff --git a/lib/views/auth/captin/invite_driver_screen.dart b/lib/views/auth/captin/invite_driver_screen.dart
index 5ebbe63..3cca4d6 100644
--- a/lib/views/auth/captin/invite_driver_screen.dart
+++ b/lib/views/auth/captin/invite_driver_screen.dart
@@ -1,13 +1,11 @@
import 'package:SEFER/constant/box_name.dart';
import 'package:SEFER/constant/colors.dart';
import 'package:SEFER/main.dart';
-import 'package:SEFER/views/widgets/mydialoug.dart';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
import '../../../controller/auth/captin/invit_controller.dart';
-import '../../widgets/elevated_btn.dart';
class InviteScreen extends StatelessWidget {
final InviteController controller = Get.put(InviteController());
diff --git a/lib/views/auth/captin/login_captin.dart b/lib/views/auth/captin/login_captin.dart
index dfc6d60..f702baa 100644
--- a/lib/views/auth/captin/login_captin.dart
+++ b/lib/views/auth/captin/login_captin.dart
@@ -1,8 +1,6 @@
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/widgets/my_textField.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
@@ -18,7 +16,6 @@ import '../../../constant/style.dart';
import '../../../controller/auth/apple_sigin.dart';
import '../../../controller/auth/captin/login_captin_controller.dart';
import '../../../controller/auth/google_sign.dart';
-import '../../../controller/functions/location_permission.dart';
import '../../../controller/functions/overlay_permisssion.dart';
import '../../../main.dart';
import '../../../print.dart';
diff --git a/lib/views/home/Captin/assurance_health_page.dart b/lib/views/home/Captin/assurance_health_page.dart
index e37a574..872a6cd 100644
--- a/lib/views/home/Captin/assurance_health_page.dart
+++ b/lib/views/home/Captin/assurance_health_page.dart
@@ -1,5 +1,6 @@
import 'package:SEFER/constant/box_name.dart';
import 'package:SEFER/main.dart';
+import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
@@ -168,12 +169,15 @@ class AssuranceHealthPage extends StatelessWidget {
Navigator.of(context)
.pop(); // Just close the dialog
// Optionally show feedback if the driver opts out
- Get.snackbar(
- "Opted out".tr,
+ // Get.snackbar(
+ // "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."
- .tr,
- backgroundColor:
- CupertinoColors.systemGrey);
+ .tr);
},
),
],
diff --git a/lib/views/home/Captin/home_captain/drawer_captain.dart b/lib/views/home/Captin/home_captain/drawer_captain.dart
index ec3acf3..90cde19 100644
--- a/lib/views/home/Captin/home_captain/drawer_captain.dart
+++ b/lib/views/home/Captin/home_captain/drawer_captain.dart
@@ -1,6 +1,7 @@
import 'package:SEFER/constant/api_key.dart';
import 'package:SEFER/constant/links.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/invite_driver_screen.dart';
import 'package:SEFER/views/notification/available_rides_page.dart';
@@ -102,11 +103,18 @@ class CupertinoDrawerCaptain extends StatelessWidget {
),
_buildDivider(),
_buildDrawerItem(
- icon: CupertinoIcons.settings,
+ icon:
+ Icons.play_circle_filled, // Icon representing video play
text: 'Videos Tutorials'.tr,
onTap: () => Get.to(() => VideoListPage()),
),
_buildDivider(),
+ _buildDrawerItem(
+ icon: Icons.star, // Another option with a filled star icon
+ text: "Rate Our App".tr,
+ onTap: () => Get.to(() => RatingScreen()),
+ ),
+ _buildDivider(),
_buildDrawerItem(
icon: CupertinoIcons.settings,
text: 'Settings'.tr,
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 1a945e7..bf29453 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
@@ -1,26 +1,16 @@
-import 'dart:convert';
-import 'dart:math';
-
import 'package:SEFER/constant/box_name.dart';
import 'package:SEFER/controller/firebase/local_notification.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_font_icons/flutter_font_icons.dart';
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 'package:timezone/data/latest.dart' as tz;
-import 'package:timezone/timezone.dart' as tz;
import '../../../../../constant/colors.dart';
-import '../../../../../constant/notification.dart';
-import '../../../../../controller/functions/audio_controller.dart';
-import '../../../../../print.dart';
import '../../../../Rate/ride_calculate_driver.dart';
import '../../../../../controller/functions/location_controller.dart';
-import '../../driver_map_page.dart';
-import '../../orderCaptin/order_speed_request.dart';
GetBuilder leftMainMenuCaptainIcons() {
return GetBuilder(
@@ -195,34 +185,13 @@ GetBuilder leftMainMenuCaptainIcons() {
child: Builder(builder: (context) {
return IconButton(
onPressed: () async {
- // NotificationController().showNotification(
- // ' message.notification!.title.toString()',
- // ' message.notification!.body.toString()',
- // 'order',
- // '');
-
- 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",
- // );
+ // mySnakeBarError('ad');
+ Get.to(() => VipOrderPage(), arguments: {
+ 'myListString': 'myListString',
+ 'DriverList': 'myList',
+ // 'PolylineJson': myPoints,
+ 'body': 'message.notification!.body'
+ });
},
icon: const Icon(
FontAwesome5.window_close,
diff --git a/lib/views/home/my_wallet/card_wallet_widget.dart b/lib/views/home/my_wallet/card_wallet_widget.dart
index 41e4f43..c238fc5 100644
--- a/lib/views/home/my_wallet/card_wallet_widget.dart
+++ b/lib/views/home/my_wallet/card_wallet_widget.dart
@@ -1,11 +1,9 @@
-import 'package:SEFER/print.dart';
import 'package:flutter/cupertino.dart';
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';
diff --git a/lib/views/home/my_wallet/walet_captain.dart b/lib/views/home/my_wallet/walet_captain.dart
index f9dd1b5..fc285a2 100644
--- a/lib/views/home/my_wallet/walet_captain.dart
+++ b/lib/views/home/my_wallet/walet_captain.dart
@@ -4,6 +4,7 @@ import 'package:SEFER/controller/functions/tts.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/payment_history_driver_page.dart';
+import 'package:SEFER/views/widgets/error_snakbar.dart';
import 'package:SEFER/views/widgets/mydialoug.dart';
import 'package:flutter/cupertino.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/style.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/views/widgets/elevated_btn.dart';
import 'package:SEFER/views/widgets/my_textField.dart';
import 'package:SEFER/views/widgets/mycircular.dart';
import '../../../controller/payment/driver_payment_controller.dart';
-import '../../../print.dart';
import '../../widgets/my_scafold.dart';
import 'card_wallet_widget.dart';
import 'points_captain.dart';
@@ -380,10 +379,8 @@ class WalletCaptain extends StatelessWidget {
await controller.payFromBudget();
} else {
Get.back();
- Get.snackbar('Your Budget less than needed'.tr, '',
- duration: const Duration(seconds: 3),
- backgroundColor: AppColor.redColor,
- snackPosition: SnackPosition.BOTTOM);
+
+ mySnackeBarError('Your Budget less than needed'.tr);
}
},
),
@@ -405,8 +402,8 @@ class WalletCaptain extends StatelessWidget {
if (double.parse(controller.totalAmountVisa) > 15) {
Get.to(() => const TransferBudgetPage());
} else {
- Get.snackbar(
- "You don't have enough money in your SEFER wallet".tr, '');
+ mySnackeBarError(
+ "You don't have enough money in your SEFER wallet".tr);
}
},
);
@@ -507,9 +504,7 @@ Future addBankCodeEgypt(
});
print('res: ${res}');
if (res != 'failure') {
- Get.snackbar(
- 'updated succses'.tr, 'bank account added succesfly',
- backgroundColor: AppColor.greenColor);
+ mySnackbarSuccess('bank account added succesfly'.tr);
}
}
}));
diff --git a/lib/views/home/profile/cars_inserting_page.dart b/lib/views/home/profile/cars_inserting_page.dart
index 2af3b11..21056ef 100644
--- a/lib/views/home/profile/cars_inserting_page.dart
+++ b/lib/views/home/profile/cars_inserting_page.dart
@@ -1,4 +1,3 @@
-import 'package:SEFER/splash_screen_page.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart';
import 'package:SEFER/views/widgets/my_scafold.dart';
import 'package:flutter/material.dart';
diff --git a/lib/views/home/profile/passenger_profile_page.dart b/lib/views/home/profile/passenger_profile_page.dart
index 59d5ad1..da8a268 100644
--- a/lib/views/home/profile/passenger_profile_page.dart
+++ b/lib/views/home/profile/passenger_profile_page.dart
@@ -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/material.dart';
import 'package:get/get.dart';
diff --git a/lib/views/notification/notification_captain.dart b/lib/views/notification/notification_captain.dart
index 6ede68d..cb379db 100644
--- a/lib/views/notification/notification_captain.dart
+++ b/lib/views/notification/notification_captain.dart
@@ -2,7 +2,6 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:SEFER/controller/notification/notification_captain_controller.dart';
import 'package:flutter/cupertino.dart';
-import 'package:get/get.dart';
class NotificationCaptain extends StatelessWidget {
const NotificationCaptain({Key? key}) : super(key: key);
diff --git a/lib/views/widgets/error_snakbar.dart b/lib/views/widgets/error_snakbar.dart
new file mode 100644
index 0000000..8b7e73b
--- /dev/null
+++ b/lib/views/widgets/error_snakbar.dart
@@ -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,
+ ),
+ ),
+ );
+}