11/17/1
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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>
|
||||||
|
|||||||
@@ -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/";
|
||||||
|
|||||||
@@ -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);
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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') {
|
||||||
|
|||||||
@@ -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...
|
||||||
|
|||||||
@@ -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);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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),
|
||||||
|
|||||||
@@ -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(),
|
||||||
|
|||||||
@@ -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,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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": "لم يتم العثور على دعوة",
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
97
lib/controller/rate/rate_app_controller.dart
Normal file
97
lib/controller/rate/rate_app_controller.dart
Normal 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');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|
||||||
|
|||||||
86
lib/views/Rate/rate_app_page.dart
Normal file
86
lib/views/Rate/rate_app_page.dart
Normal 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;
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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());
|
||||||
|
}),
|
||||||
|
)
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}),
|
}),
|
||||||
|
|||||||
@@ -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('');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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);
|
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
69
lib/views/widgets/error_snakbar.dart
Normal file
69
lib/views/widgets/error_snakbar.dart
Normal 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,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user