This commit is contained in:
Hamza-Ayed
2025-02-07 23:55:33 +03:00
parent 3162ae823e
commit 5f53461b34
18 changed files with 965 additions and 933 deletions

View File

@@ -39,7 +39,43 @@ class CRUD {
return jsonData['status'];
}
// }
Future<dynamic> post({
required String link,
Map<String, dynamic>? payload,
}) async {
// String? basicAuthCredentials =
// await storage.read(key: BoxName.basicAuthCredentials);
var url = Uri.parse(
link,
);
var response = await http.post(
url,
body: payload,
headers: {
"Content-Type": "application/x-www-form-urlencoded",
'Authorization':
'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials))}',
},
);
Log.print('request: ${response.request}');
Log.print('response: ${response.body}');
Log.print('payload: ${payload}');
var jsonData = jsonDecode(response.body);
if (response.statusCode == 200) {
if (jsonData['status'] == 'success') {
return response.body;
} else {
// String errorMessage = jsonData['message'];
// Get.snackbar('Error'.tr, errorMessage.tr,
// backgroundColor: AppColor.redColor);
return (jsonData['status']);
}
} else {
return response.statusCode;
}
}
Future<dynamic> getAgoraToken({
required String channelName,
@@ -206,42 +242,6 @@ class CRUD {
} else {}
}
Future<dynamic> post({
required String link,
Map<String, dynamic>? payload,
}) async {
// String? basicAuthCredentials =
// await storage.read(key: BoxName.basicAuthCredentials);
var url = Uri.parse(
link,
);
var response = await http.post(
url,
body: payload,
headers: {
"Content-Type": "application/x-www-form-urlencoded",
'Authorization':
'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials))}',
},
);
Log.print('request: ${response.request}');
Log.print('response: ${response.body}');
Log.print('payload: ${payload}');
var jsonData = jsonDecode(response.body);
if (response.statusCode == 200) {
if (jsonData['status'] == 'success') {
return response.body;
} else {
// String errorMessage = jsonData['message'];
// Get.snackbar('Error'.tr, errorMessage.tr,
// backgroundColor: AppColor.redColor);
return (jsonData['status']);
}
} else {
return response.statusCode;
}
}
Future<dynamic> postPayMob({
required String link,
Map<String, dynamic>? payload,

View File

@@ -52,7 +52,6 @@ class AppInitializer {
try {
var res =
await CRUD().get(link: AppLink.getLocationAreaLinks, payload: {});
Log.print('res: ${res}');
if (res != 'failure') {
links = List<Map<String, dynamic>>.from(jsonDecode(res)['message']);
await box.remove(BoxName.locationName);
@@ -70,8 +69,6 @@ class AppInitializer {
await box.write(BoxName.paymentLink,
encryptionHelper.decryptData(links[4]['server_link']));
}
} catch (e) {
print('Error fetching or decoding location data: $e');
}
} catch (e) {}
}
}

View File

@@ -1,8 +1,9 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:sefer_driver/constant/box_name.dart';
import 'package:sefer_driver/main.dart';
import 'package:sefer_driver/controller/themes/themes.dart';
import '../../constant/box_name.dart';
import '../../main.dart';
import '../themes/themes.dart';
class LocaleController extends GetxController {
Locale? language;
@@ -73,6 +74,16 @@ class LocaleController extends GetxController {
appTheme = lightThemeEnglish;
box.write(BoxName.lang, 'hi');
break;
case "ar-ma":
locale = const Locale("ar-ma");
appTheme = lightThemeArabic;
box.write(BoxName.lang, 'ar-ma');
break;
case "ar-gulf":
locale = const Locale("ar-gulf");
appTheme = lightThemeArabic;
box.write(BoxName.lang, 'ar-gulf');
break;
default:
locale = Locale(Get.deviceLocale!.languageCode);
box.write(BoxName.lang, Get.deviceLocale!.languageCode);

File diff suppressed because it is too large Load Diff

View File

@@ -19,6 +19,7 @@ import '../../constant/links.dart';
import '../../main.dart';
import '../../print.dart';
import '../functions/crud.dart';
import '../functions/encrypt_decrypt.dart';
import '../functions/toast.dart';
import 'paymob/paymob_wallet.dart';
@@ -155,15 +156,9 @@ class PaymentController extends GetxController {
paymentIntentClientSecret: clientSecret,
merchantDisplayName: AppInformation.appName,
billingDetails: BillingDetails(
name: box.read(BoxName.nameDriver) == null
? box.read(BoxName.name).toString()
: box.read(BoxName.nameDriver).toString(),
email: box.read(BoxName.emailDriver) == null
? box.read(BoxName.email).toString()
: box.read(BoxName.emailDriver).toString(),
phone: box.read(BoxName.phoneDriver) == null
? box.read(BoxName.phone).toString()
: box.read(BoxName.phoneDriver).toString(),
name: encryptionHelper.decryptData(box.read(BoxName.nameDriver)),
email: encryptionHelper.decryptData(box.read(BoxName.emailDriver)),
phone: encryptionHelper.decryptData(box.read(BoxName.phoneDriver)),
address: Address(
city: 'city',
country: box.read(BoxName.countryCode), //'United States'

View File

@@ -7,6 +7,7 @@ import 'package:url_launcher/url_launcher.dart';
import '../../constant/api_key.dart';
import '../../main.dart';
import '../functions/encrypt_decrypt.dart';
class PaymobManager extends GetxController {
String authanticationToken1 = "";
@@ -132,11 +133,13 @@ class PaymobManager extends GetxController {
"amount_cents": amount,
"currency": currency,
"billing_data": {
"first_name": box.read(BoxName.nameDriver) ?? box.read(BoxName.name),
"last_name": box.read(BoxName.lastNameDriver) ?? box.read(BoxName.name),
"email": box.read(BoxName.emailDriver) ?? box.read(BoxName.email),
"first_name":
encryptionHelper.decryptData(box.read(BoxName.nameDriver)),
"last_name":
encryptionHelper.decryptData(box.read(BoxName.lastNameDriver)),
"email": encryptionHelper.decryptData(box.read(BoxName.emailDriver)),
"phone_number":
box.read(BoxName.phoneDriver) ?? box.read(BoxName.phone),
encryptionHelper.decryptData(box.read(BoxName.phoneDriver)),
"apartment": "NA",
"floor": "NA",
"street": "NA",

View File

@@ -1,4 +1,5 @@
import 'package:sefer_driver/constant/box_name.dart';
import 'package:sefer_driver/controller/functions/encrypt_decrypt.dart';
import 'package:sefer_driver/main.dart';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
@@ -223,10 +224,11 @@ class PaymobBillingData {
Map<String, dynamic> toJson() {
return {
"email": box.read(BoxName.email) ?? box.read(BoxName.emailDriver),
"first_name": box.read(BoxName.name) ?? box.read(BoxName.nameDriver),
"last_name": box.read(BoxName.name) ?? box.read(BoxName.nameDriver),
"phone_number": box.read(BoxName.phone) ?? box.read(BoxName.phoneDriver),
"email": encryptionHelper.decryptData(box.read(BoxName.emailDriver)),
"first_name": box.read(BoxName.nameDriver),
"last_name": box.read(BoxName.nameDriver),
"phone_number":
encryptionHelper.decryptData(box.read(BoxName.phoneDriver)),
"apartment": apartment ?? "NA",
"floor": floor ?? "NA",
"building": building ?? "NA",

View File

@@ -1,4 +1,5 @@
import 'package:sefer_driver/constant/box_name.dart';
import 'package:sefer_driver/controller/functions/encrypt_decrypt.dart';
import 'package:sefer_driver/main.dart';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
@@ -266,10 +267,10 @@ class PaymobBillingDataWallet {
Map<String, dynamic> toJson() {
return {
"email": box.read(BoxName.email) ?? box.read(BoxName.emailDriver),
"email": encryptionHelper.decryptData(box.read(BoxName.emailDriver)),
"first_name": box.read(BoxName.name) ?? box.read(BoxName.nameDriver),
"last_name": box.read(BoxName.name) ?? box.read(BoxName.nameDriver),
"phone_number": box.read(BoxName.phone) ?? box.read(BoxName.phoneDriver),
"phone_number": (box.read(BoxName.phoneWallet)),
"apartment": apartment ?? "NA",
"floor": floor ?? "NA",
"building": building ?? "NA",

View File

@@ -2,22 +2,22 @@ import 'package:get/get.dart';
List<OnBoardingModel> onBoardingList = [
OnBoardingModel(
title: 'Welcome to Sefer!'.tr,
title: 'Welcome to Tripz!'.tr,
image: 'assets/images/on1.png',
body:
'Sefer is the ride-hailing app that is safe, reliable, and accessible.'
'Tripz is the ride-hailing app that is safe, reliable, and accessible.'
.tr,
),
OnBoardingModel(
title: 'Get to your destination quickly and easily.'.tr,
image: 'assets/images/on2.png',
body: 'With Sefer, you can get a ride to your destination in minutes.'.tr,
body: 'With Tripz, you can get a ride to your destination in minutes.'.tr,
),
OnBoardingModel(
title: 'Enjoy a safe and comfortable ride.'.tr,
image: 'assets/images/on3.png',
body:
'Sefer is committed to safety, and all of our captains are carefully screened and background checked.'
'Tripz is committed to safety, and all of our captains are carefully screened and background checked.'
.tr,
),
];

View File

@@ -4,6 +4,7 @@ import 'package:sefer_driver/constant/colors.dart';
import 'package:sefer_driver/constant/style.dart';
import 'package:sefer_driver/controller/home/payment/captain_wallet_controller.dart';
import 'package:sefer_driver/controller/payment/payment_controller.dart';
import 'package:sefer_driver/views/widgets/mydialoug.dart';
import '../../../constant/box_name.dart';
import '../../../main.dart';
@@ -105,6 +106,13 @@ class PointsCaptain extends StatelessWidget {
.getCaptainWalletFromBuyPoints();
});
}
MyDialog().getDialog(
'phone number is wrong'.tr,
'',
() {
Get.back();
},
);
// Get.back();
}));
},

View File

@@ -1,7 +1,8 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:sefer_driver/views/home/Captin/home_captain/home_captin.dart';
import 'package:sefer_driver/views/widgets/elevated_btn.dart';
import '../../controller/local/local_controller.dart';
class Language extends StatelessWidget {
@@ -14,46 +15,55 @@ class Language extends StatelessWidget {
middle: Text('Choose Language'.tr),
border: null,
),
child: SafeArea(
child: GetBuilder<LocaleController>(
builder: (controller) => Center(
child: Padding(
padding: const EdgeInsets.all(16),
child: Column(
children: [
_buildHeader(),
const SizedBox(height: 20),
Expanded(
child: ListView(
physics: const BouncingScrollPhysics(),
children: [
_buildLanguageButton(
'العربية', 'ar', controller, context),
_buildLanguageButton(
'English', 'en', controller, context),
_buildLanguageButton(
'Türkçe', 'tr', controller, context),
_buildLanguageButton(
'Français', 'fr', controller, context),
_buildLanguageButton(
'Italiano', 'it', controller, context),
_buildLanguageButton(
'Deutsch', 'de', controller, context),
_buildLanguageButton(
'Ελληνικά', 'el', controller, context),
_buildLanguageButton(
'Español', 'es', controller, context),
_buildLanguageButton(
'فارسی', 'fa', controller, context),
_buildLanguageButton('中文', 'zh', controller, context),
_buildLanguageButton(
'Русский', 'ru', controller, context),
_buildLanguageButton(
'हिन्दी', 'hi', controller, context),
],
child: Material(
// Wrap SafeArea with Material widget
child: SafeArea(
child: GetBuilder<LocaleController>(
builder: (controller) => Center(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_buildHeader(),
const SizedBox(height: 20),
Expanded(
child: ListView(
physics: const BouncingScrollPhysics(),
children: [
_buildLanguageButton(
'العربية', 'ar', controller, context, '🇪🇬'),
_buildLanguageButton('العربية (الخليج)', 'ar-gulf',
controller, context, '🇸🇦'),
_buildLanguageButton('العربية (المغرب)', 'ar-ma',
controller, context, '🇲🇦'),
_buildLanguageButton(
'English', 'en', controller, context, '🇺🇸'),
_buildLanguageButton(
'Türkçe', 'tr', controller, context, '🇹🇷'),
_buildLanguageButton(
'Français', 'fr', controller, context, '🇫🇷'),
_buildLanguageButton(
'Italiano', 'it', controller, context, '🇮🇹'),
_buildLanguageButton(
'Deutsch', 'de', controller, context, '🇩🇪'),
_buildLanguageButton(
'Ελληνικά', 'el', controller, context, '🇬🇷'),
_buildLanguageButton(
'Español', 'es', controller, context, '🇪🇸'),
_buildLanguageButton(
'فارسی', 'fa', controller, context, '🇮🇷'),
_buildLanguageButton(
'中文', 'zh', controller, context, '🇨🇳'),
_buildLanguageButton(
'Русский', 'ru', controller, context, '🇷🇺'),
_buildLanguageButton(
'हिन्दी', 'hi', controller, context, '🇮🇳'),
],
),
),
),
],
],
),
),
),
),
@@ -63,39 +73,28 @@ class Language extends StatelessWidget {
}
Widget _buildHeader() {
return Container(
padding: const EdgeInsets.all(20),
decoration: BoxDecoration(
gradient: const LinearGradient(
colors: [Color(0xFF2196F3), Color(0xFF1976D2)],
begin: Alignment.topLeft,
end: Alignment.bottomRight,
),
borderRadius: BorderRadius.circular(16),
boxShadow: [
BoxShadow(
color: CupertinoColors.systemBlue.withOpacity(0.2),
blurRadius: 10,
offset: const Offset(0, 4),
),
],
),
return Padding(
padding: const EdgeInsets.only(top: 20, bottom: 10),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Icon(
CupertinoIcons.globe,
color: CupertinoColors.white,
size: 48,
),
const SizedBox(height: 16),
Text(
'Choose Language'.tr,
'Language Options'.tr,
style: const TextStyle(
color: CupertinoColors.white,
fontSize: 22,
fontSize: 24,
fontWeight: FontWeight.bold,
color: CupertinoColors.black, // Or your theme primary color
),
textAlign: TextAlign.center,
textAlign: TextAlign.start,
),
const SizedBox(height: 8),
Text(
'Select your preferred language for the app interface.',
style: TextStyle(
fontSize: 16,
color: CupertinoColors.secondaryLabel,
),
textAlign: TextAlign.start,
),
],
),
@@ -103,28 +102,49 @@ class Language extends StatelessWidget {
}
Widget _buildLanguageButton(String title, String langCode,
LocaleController controller, BuildContext context) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 8),
child: MyElevatedButton(
title: title,
onPressed: () async {
controller.changeLang(langCode);
showCupertinoDialog(
context: context,
builder: (context) => CupertinoAlertDialog(
title: Text('You should restart app to change language'.tr),
actions: [
CupertinoDialogAction(
child: Text('Ok'.tr),
onPressed: () {
Get.offAll(() => HomeCaptain());
},
),
],
),
);
},
));
LocaleController controller, BuildContext context, String flagIcon) {
return Container(
decoration: BoxDecoration(
color: CupertinoColors.white,
borderRadius: BorderRadius.circular(12),
boxShadow: [
BoxShadow(
color: CupertinoColors.systemGrey5.withOpacity(0.5),
spreadRadius: 1,
blurRadius: 3,
offset: const Offset(0, 2),
),
],
),
child: ListTile(
leading: Text(flagIcon,
style: const TextStyle(fontSize: 28)), // Using flag icon as leading
title: Text(
title,
style: const TextStyle(
fontWeight: FontWeight.w500,
),
),
trailing: const Icon(CupertinoIcons.chevron_forward,
color: CupertinoColors.inactiveGray),
onTap: () async {
controller.changeLang(langCode);
showCupertinoDialog(
context: context,
builder: (context) => CupertinoAlertDialog(
title: Text('You should restart app to change language'.tr),
actions: [
CupertinoDialogAction(
child: Text('Ok'.tr),
onPressed: () {
Get.offAll(() => HomeCaptain());
},
),
],
),
);
},
),
);
}
}