8-21/1
This commit is contained in:
@@ -9,7 +9,8 @@ class AppLink {
|
||||
|
||||
//=======================ride===================
|
||||
static const String ride = '$server/ride/';
|
||||
static const String addCancelRide = "$server/ride/addCancelRide.php";
|
||||
static const String addCancelRide = "$server/ride/cancelRide/add.php";
|
||||
static const String cancelRide = "$server/ride/cancelRide/get.php";
|
||||
//-----------------ridessss------------------
|
||||
static const String addRides = "$ride/rides/add.php";
|
||||
static const String getRides = "$ride/rides/get.php";
|
||||
|
||||
@@ -49,6 +49,7 @@ class CRUD {
|
||||
},
|
||||
);
|
||||
print(response.request);
|
||||
|
||||
var jsonData = jsonDecode(response.body);
|
||||
if (response.statusCode == 200) {
|
||||
if (jsonData['status'] == 'success') {
|
||||
|
||||
@@ -9,9 +9,7 @@ import 'package:ride/constant/box_name.dart';
|
||||
import 'package:ride/constant/credential.dart';
|
||||
import 'package:ride/constant/links.dart';
|
||||
import 'package:ride/controller/functions/crud.dart';
|
||||
import 'package:ride/views/home/map_widget.dart/buttom_sheet_map_show.dart';
|
||||
import 'package:ride/views/widgets/elevated_btn.dart';
|
||||
|
||||
import 'package:http/http.dart' as http;
|
||||
import '../../main.dart';
|
||||
import '../../models/model/locations.dart';
|
||||
import '../firebase/firbase_messge.dart';
|
||||
@@ -46,7 +44,7 @@ class MapController extends GetxController {
|
||||
bool isCashConfirmPageShown = false;
|
||||
bool isPaymentMethodPageShown = false;
|
||||
bool isMainBottomMenuMap = true;
|
||||
double heightButtomSheetShown = 300;
|
||||
double heightButtomSheetShown = 0;
|
||||
double cashConfirmPageShown = 250;
|
||||
double paymentPageShown = Get.height * .6;
|
||||
late final LatLng southwest;
|
||||
@@ -98,14 +96,32 @@ class MapController extends GetxController {
|
||||
}
|
||||
|
||||
int selectedReason = -1;
|
||||
|
||||
void selectReason(int index) {
|
||||
String? cancelNote;
|
||||
void selectReason(int index, String note) {
|
||||
selectedReason = index;
|
||||
cancelNote = note;
|
||||
update();
|
||||
}
|
||||
|
||||
bool rideConfirm = false;
|
||||
void cancelRide() async {
|
||||
changeConfirmRide() {
|
||||
rideConfirm = true;
|
||||
//TODO add ride and get ride id and details
|
||||
update();
|
||||
}
|
||||
|
||||
Future cancelRide() async {
|
||||
var payload = {
|
||||
"driverID": "1", // Convert to String
|
||||
"passengerID":
|
||||
box.read(BoxName.pasengerID).toString(), // Convert to String
|
||||
"rideID": "222", // Convert to String
|
||||
"note": cancelNote
|
||||
};
|
||||
|
||||
print(rideConfirm);
|
||||
print(payload);
|
||||
|
||||
if (rideConfirm == false) {
|
||||
clearPlaces();
|
||||
clearpolyline();
|
||||
@@ -117,12 +133,9 @@ class MapController extends GetxController {
|
||||
clearpolyline();
|
||||
data = [];
|
||||
changeCancelRidePageShow();
|
||||
await CRUD().post(link: AppLink.addCancelRide, payload: {
|
||||
"driverID": 1,
|
||||
"passengerID": box.read(BoxName.pasengerID).toString(),
|
||||
"rideID": 222,
|
||||
"note": "zxcz"
|
||||
});
|
||||
|
||||
await CRUD().post(link: AppLink.addCancelRide, payload: payload);
|
||||
|
||||
update();
|
||||
}
|
||||
}
|
||||
@@ -385,19 +398,25 @@ class MapController extends GetxController {
|
||||
late double costDuration = 0;
|
||||
late double cost = 0;
|
||||
late double distance = 0;
|
||||
late double duration = 2;
|
||||
late double duration = 0;
|
||||
DateTime currentTime = DateTime.now();
|
||||
late Duration durationToAdd;
|
||||
late DateTime newTime = DateTime.now();
|
||||
void bottomSheet() {
|
||||
Future bottomSheet() async {
|
||||
if (data.isNotEmpty) {
|
||||
String distanceText = data[0]['distance']['text'];
|
||||
String durationText = data[0]['duration']['text'];
|
||||
String distanceText = await data[0]['distance']['text'];
|
||||
String durationText = await data[0]['duration']['text'];
|
||||
distance = getDistanceFromText(distanceText);
|
||||
duration = getDistanceFromText(durationText);
|
||||
durationToAdd = Duration(minutes: duration.toInt());
|
||||
DateTime currentTime = DateTime.now();
|
||||
newTime = currentTime.add(durationToAdd);
|
||||
averageDuration = duration / distance;
|
||||
costDuration = duration * averageDuration * 0.016;
|
||||
totalDriver = cost + costDuration;
|
||||
totalPassenger = totalDriver + (totalDriver * .16);
|
||||
tax = totalPassenger * .04;
|
||||
totaME = totalPassenger - totalDriver - tax;
|
||||
update();
|
||||
if (currentTime.hour >= 21) {
|
||||
if (distanceText.contains('km')) {
|
||||
@@ -407,6 +426,32 @@ class MapController extends GetxController {
|
||||
cost = distance * 0.23 / 1000;
|
||||
update();
|
||||
}
|
||||
} else if (currentTime.hour < 5) {
|
||||
if (distanceText.contains('km')) {
|
||||
cost = distance * 0.25;
|
||||
update();
|
||||
} else {
|
||||
cost = distance * 0.25 / 1000;
|
||||
update();
|
||||
}
|
||||
} else if (currentTime.hour >= 13 && currentTime.hour <= 16) {
|
||||
if (averageDuration > 2.5) {
|
||||
if (distanceText.contains('km')) {
|
||||
cost = distance * 0.23;
|
||||
update();
|
||||
} else {
|
||||
cost = distance * 0.25 / 1000;
|
||||
update();
|
||||
}
|
||||
} else {
|
||||
if (distanceText.contains('km')) {
|
||||
cost = distance * 0.21;
|
||||
update();
|
||||
} else {
|
||||
cost = distance * 0.21 / 1000;
|
||||
update();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (distanceText.contains('km')) {
|
||||
cost = distance * 0.21;
|
||||
@@ -416,12 +461,7 @@ class MapController extends GetxController {
|
||||
update();
|
||||
}
|
||||
}
|
||||
averageDuration = duration / distance;
|
||||
costDuration = duration * averageDuration * 0.016;
|
||||
totalDriver = cost + costDuration;
|
||||
totalPassenger = totalDriver + (totalDriver * .16);
|
||||
tax = totalPassenger * .04;
|
||||
totaME = totalPassenger - totalDriver - tax;
|
||||
|
||||
if (totalPassenger < 1) {
|
||||
totalPassenger = 1;
|
||||
update();
|
||||
@@ -435,8 +475,11 @@ class MapController extends GetxController {
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
// buttomSheetMapPage();
|
||||
changeButtomSheetShown();
|
||||
}
|
||||
buttomSheetMapPage();
|
||||
|
||||
// Get.bottomSheet(
|
||||
// Container(
|
||||
// height: 130,
|
||||
|
||||
@@ -12,9 +12,27 @@ class LocaleController extends GetxController {
|
||||
ThemeData appTheme = themeEnglish;
|
||||
|
||||
changeLang(String langcode) {
|
||||
Locale locale = Locale(langcode);
|
||||
Locale locale;
|
||||
switch (langcode) {
|
||||
case "ar":
|
||||
locale = const Locale("ar");
|
||||
appTheme = themeArabic;
|
||||
break;
|
||||
case "en":
|
||||
locale = const Locale("en");
|
||||
appTheme = themeEnglish;
|
||||
break;
|
||||
case "tr":
|
||||
locale = const Locale("tr");
|
||||
appTheme = themeEnglish;
|
||||
break;
|
||||
default:
|
||||
locale = Locale(Get.deviceLocale!.languageCode);
|
||||
appTheme = themeEnglish;
|
||||
break;
|
||||
}
|
||||
|
||||
box.write(BoxName.lang, langcode);
|
||||
appTheme = langcode == "ar" ? themeArabic : themeEnglish;
|
||||
Get.changeTheme(appTheme);
|
||||
Get.updateLocale(locale);
|
||||
update();
|
||||
@@ -23,15 +41,24 @@ class LocaleController extends GetxController {
|
||||
@override
|
||||
void onInit() {
|
||||
FirebasMessagesController().requestPermission();
|
||||
if (box.read(BoxName.lang) == "ar") {
|
||||
language = const Locale("ar");
|
||||
appTheme = themeArabic;
|
||||
} else if (box.read(BoxName.lang) == "en") {
|
||||
language = const Locale("en");
|
||||
appTheme = themeEnglish;
|
||||
} else {
|
||||
language = Locale(Get.deviceLocale!.languageCode);
|
||||
appTheme = themeEnglish;
|
||||
String storedLang = box.read(BoxName.lang) ?? "";
|
||||
switch (storedLang) {
|
||||
case "ar":
|
||||
language = const Locale("ar");
|
||||
appTheme = themeArabic;
|
||||
break;
|
||||
case "en":
|
||||
language = const Locale("en");
|
||||
appTheme = themeEnglish;
|
||||
break;
|
||||
case "tr":
|
||||
language = const Locale("tr");
|
||||
appTheme = themeEnglish;
|
||||
break;
|
||||
default:
|
||||
language = Locale(Get.deviceLocale!.languageCode);
|
||||
appTheme = themeEnglish;
|
||||
break;
|
||||
}
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
@@ -5,12 +5,178 @@ class MyTranslation extends Translations {
|
||||
Map<String, Map<String, String>> get keys => {
|
||||
"ar": {
|
||||
"Choose Language": "اختر اللغة",
|
||||
"Login": "تسجيل الدخول",
|
||||
"Enter your email address": "أدخل عنوان بريدك الإلكتروني",
|
||||
"Please enter Your Email.": "يرجى إدخال بريدك الإلكتروني.",
|
||||
"Enter your phone number": "أدخل رقم هاتفك",
|
||||
"Please enter your phone number.": "يرجى إدخال رقم هاتفك.",
|
||||
"Please enter Your Password.": "يرجى إدخال كلمة المرور.",
|
||||
"Submit": "إرسال",
|
||||
"if you dont have account": "إذا لم يكن لديك حساب",
|
||||
"Register": "تسجيل",
|
||||
"Accept Ride's Terms & Review Privacy Notice":
|
||||
"قبول شروط الاستخدام ومراجعة إشعار الخصوصية",
|
||||
"By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.":
|
||||
"من خلال اختيار 'أوافق' أدناه، قمت بمراجعة وقبول شروط الاستخدام وأقر بإشعار الخصوصية. أنا على الأقل 18 عامًا.",
|
||||
"I Agree": "أوافق",
|
||||
"First name": "الاسم الأول",
|
||||
"Enter your first name": "أدخل اسمك الأول",
|
||||
"Please enter your first name.": "يرجى إدخال اسمك الأول.",
|
||||
"Last name": "اسم العائلة",
|
||||
"Enter your last name": "أدخل اسمك الأخير",
|
||||
"Please enter your last name.": "يرجى إدخال اسمك الأخير.",
|
||||
"City": "المدينة",
|
||||
"Please enter your City.": "يرجى إدخال اسم مدينتك.",
|
||||
"Male": "ذكر",
|
||||
"Female": "أنثى",
|
||||
"Verify Email": "تحقق من البريد الإلكتروني",
|
||||
"We sent 5 digit to your Email provided":
|
||||
"لقد أرسلنا رمزًا مؤلفًا من 5 أرقام إلى بريدك الإلكتروني المُدخَل",
|
||||
"5 digit": "5 أرقام",
|
||||
"Send Verification Code": "إرسال رمز التحقق",
|
||||
"Your Ride Duration is ": "مدة رحلتك ",
|
||||
"You will be thier in": "ستكون هناك في",
|
||||
"You trip distance is": "مسافة الرحلة",
|
||||
"Fee is": "الرسوم",
|
||||
"From : ": "من: ",
|
||||
"To : ": "إلى: ",
|
||||
"Add Promo": "إضافة برومو",
|
||||
"Confirm Selection": "تأكيد الاختيار",
|
||||
"distance is": "المسافة",
|
||||
"duration is": "المدة",
|
||||
"I don't need a ride anymore": "لست بحاجة إلى رحلة بعد الآن",
|
||||
"I was just trying the application": "كنت فقط أجرب التطبيق",
|
||||
"No driver accepted my request": "لم يقبل أي سائق طلبي",
|
||||
"I added the wrong pick-up/drop-off location":
|
||||
"أضفت موقع الالتقاط/التسليم الخاطئ",
|
||||
"I don't have a reason": "ليس لدي سبب",
|
||||
"Other": "آخر",
|
||||
"Can we know why you want to cancel Ride ?":
|
||||
"هل يمكننا معرفة سبب رغبتك في إلغاء الرحلة؟",
|
||||
"Cancel Ride": "إلغاء الرحلة",
|
||||
"Add Payment Method": "إضافة طريقة الدفع",
|
||||
"Your Wallet balance is ": "رصيد المحفظة الخاص بك ",
|
||||
"Ride Wallet": "محفظة الرحلة",
|
||||
"Payment Method": "طريقة الدفع",
|
||||
"Type here Place": "اكتب هنا المكان",
|
||||
"Are You sure to ride to": "هل أنت متأكد من رغبتك في الذهاب إلى",
|
||||
"Confirm": "تأكيد",
|
||||
"Back": "رجوع",
|
||||
"You are Delete": "أنت على وشك الحذف",
|
||||
"Deleted": "تم الحذف",
|
||||
"You Dont Have Any places yet !": "ليس لديك أي أماكن بعد!",
|
||||
"Favorite Places": "الأماكن المفضلة",
|
||||
"From : Current Location": "من: الموقع الحالي",
|
||||
"Where to": "إلى أين",
|
||||
"Notifications": "الإشعارات",
|
||||
"Profile": "الملف الشخصي",
|
||||
"Home": "الصفحة الرئيسية",
|
||||
"My Cared": "المهتم به",
|
||||
"Add Card": "إضافة بطاقة",
|
||||
"Add Credit Card": "إضافة بطاقة ائتمان",
|
||||
"Please enter the cardholder name": "يرجى إدخال اسم حامل البطاقة",
|
||||
"Please enter the expiry date": "يرجى إدخال تاريخ انتهاء الصلاحية",
|
||||
"Please enter the CVV code": "يرجى إدخال رمز CVV",
|
||||
"Go To Favorite Places": "الانتقال إلى الأماكن المفضلة",
|
||||
"Go to this Target": "الانتقال إلى هذا الهدف",
|
||||
"My Profile": "ملفي الشخصي",
|
||||
"Sign Out": "تسجيل الخروج",
|
||||
"Home Page": "الصفحة الرئيسية",
|
||||
"Are you want to go to this site":
|
||||
"هل ترغب في الانتقال إلى هذا الموقع",
|
||||
"MyLocation": "موقعي",
|
||||
"my location": "موقعي",
|
||||
"Target": "هدف"
|
||||
},
|
||||
"tr": {
|
||||
"Choose Language": "Dil Seçin",
|
||||
"Login": "Giriş Yap",
|
||||
"Enter your email address": "E-posta adresinizi girin",
|
||||
"Please enter Your Email.": "Lütfen E-posta adresinizi girin.",
|
||||
"Enter your phone number": "Telefon numaranızı girin",
|
||||
"Please enter your phone number.": "Lütfen telefon numaranızı girin.",
|
||||
"Please enter Your Password.": "Lütfen şifrenizi girin.",
|
||||
"Submit": "Gönder",
|
||||
"if you dont have account": "Hesabınız yoksa",
|
||||
"Register": "Kayıt Ol",
|
||||
"Accept Ride's Terms & Review Privacy Notice":
|
||||
"Kullanım Koşullarını Kabul Edin ve Gizlilik Bildirimini İnceleyin",
|
||||
"By selecting \"I Agree\" below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.":
|
||||
"\"Kabul Ediyorum\" seçeneğini seçerek, Kullanım Koşullarını inceledim ve kabul ettim, Gizlilik Bildirimi'ni onaylıyorum. En az 18 yaşındayım.",
|
||||
"I Agree": "Kabul Ediyorum",
|
||||
"First name": "Adınız",
|
||||
"Enter your first name": "Adınızı girin",
|
||||
"Please enter your first name.": "Lütfen adınızı girin.",
|
||||
"Last name": "Soyadınız",
|
||||
"Enter your last name": "Soyadınızı girin",
|
||||
"Please enter your last name.": "Lütfen soyadınızı girin.",
|
||||
"City": "Şehir",
|
||||
"Please enter your City.": "Lütfen şehir adınızı girin.",
|
||||
"Male": "Erkek",
|
||||
"Female": "Kadın",
|
||||
"Verify Email": "E-postayı Doğrula",
|
||||
"We sent 5 digit to your Email provided":
|
||||
"E-postanıza 5 haneli bir kod gönderdik",
|
||||
"5 digit": "5 haneli",
|
||||
"Send Verification Code": "Doğrulama Kodunu Gönder",
|
||||
"Your Ride Duration is ": "Seyir Süreniz ",
|
||||
"You will be thier in": "Orada olacaksınız",
|
||||
"You trip distance is": "Gezi mesafesi",
|
||||
"Fee is": "Ücret",
|
||||
"From : ": "Başlangıç noktası: ",
|
||||
"To : ": "Varış noktası: ",
|
||||
"Add Promo": "Promosyon Ekle",
|
||||
"Confirm Selection": "Seçimi Onayla",
|
||||
"distance is": "mesafe",
|
||||
"duration is": "süre",
|
||||
"I don't need a ride anymore": "Artık bir sürüşe ihtiyacım yok",
|
||||
"I was just trying the application": "Sadece uygulamayı deniyordum",
|
||||
"No driver accepted my request":
|
||||
"Hiçbir sürücü isteğimi kabul etmedi",
|
||||
"I added the wrong pick-up/drop-off location":
|
||||
"Yanlış kalkış/varış konumu ekledim",
|
||||
"I don't have a reason": "Bir sebebim yok",
|
||||
"Other": "Diğer",
|
||||
"Can we know why you want to cancel Ride ?":
|
||||
"Neden sürüşü iptal etmek istediğinizi öğrenebilir miyiz?",
|
||||
"Cancel Ride": "Sürüşü İptal Et",
|
||||
"Add Payment Method": "Ödeme Yöntemi Ekle",
|
||||
"Your Wallet balance is ": "Cüzdan bakiyeniz ",
|
||||
"Ride Wallet": "Sürüş Cüzdanı",
|
||||
"Payment Method": "Ödeme Yöntemi",
|
||||
"Type here Place": "Buraya Yer Girin",
|
||||
"Are You sure to ride to":
|
||||
"Şuraya gitmek istediğinizden emin misiniz",
|
||||
"Confirm": "Onayla",
|
||||
"Back": "Geri",
|
||||
"You are Delete": "Silmektesiniz",
|
||||
"Deleted": "Silindi",
|
||||
"You Dont Have Any places yet !": "Henüz hiç yeriniz yok!",
|
||||
"Favorite Places": "Favori Yerler",
|
||||
"From : Current Location": "Başlangıç noktası: Mevcut Konum",
|
||||
"Where to": "Nereye",
|
||||
"Notifications": "Bildirimler",
|
||||
"Profile": "Profil",
|
||||
"Home": "Ana Sayfa",
|
||||
"My Cared": "İlgilendiğim",
|
||||
"Add Card": "Kart Ekle",
|
||||
"Add Credit Card": "Kredi Kartı Ekle",
|
||||
"Please enter the cardholder name":
|
||||
"Lütfen kart sahibinin adını girin",
|
||||
"Please enter the expiry date": "Lütfen son kullanma tarihini girin",
|
||||
"Please enter the CVV code": "Lütfen CVV kodunu girin",
|
||||
"Go To Favorite Places": "Favori Yerlere Git",
|
||||
"Go to this Target": "Bu Hedefe Git",
|
||||
"My Profile": "Profilim",
|
||||
"Sign Out": "Çıkış Yap",
|
||||
"Home Page": "Ana Sayfa",
|
||||
"Are you want to go to this site": "Bu siteye gitmek istiyor musunuz",
|
||||
"MyLocation": "Konumum",
|
||||
"my location": "konumum",
|
||||
"Target": "Hedef"
|
||||
},
|
||||
"en": {
|
||||
"Choose Language": "Choose Language",
|
||||
},
|
||||
"tr": {
|
||||
"Choose Language": "Dil seç",
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ class LoginPage extends StatelessWidget {
|
||||
Get.put(LoginController());
|
||||
return GetBuilder<LoginController>(
|
||||
builder: (controller) =>
|
||||
MyScafolld(title: 'Login', isleading: false, body: [
|
||||
MyScafolld(title: 'Login'.tr, isleading: false, body: [
|
||||
if (box.read(BoxName.agreeTerms) != 'agreed')
|
||||
agreedpage()
|
||||
else
|
||||
@@ -116,7 +116,9 @@ class LoginPage extends StatelessWidget {
|
||||
borderRadius: BorderRadius.all(
|
||||
Radius.circular(12))),
|
||||
labelText: 'Password'.tr,
|
||||
hintText: 'Enter your Password'.tr,
|
||||
hintText:
|
||||
'Please enter your phone number.'
|
||||
.tr,
|
||||
),
|
||||
validator: (value) {
|
||||
if (value!.isEmpty ||
|
||||
@@ -139,7 +141,7 @@ class LoginPage extends StatelessWidget {
|
||||
controller.login();
|
||||
}
|
||||
},
|
||||
title: 'Submit',
|
||||
title: 'Submit'.tr,
|
||||
),
|
||||
)
|
||||
],
|
||||
@@ -156,7 +158,7 @@ class LoginPage extends StatelessWidget {
|
||||
onTap: () => Get.to(() => const RegisterPage()),
|
||||
animatedTexts: [
|
||||
TypewriterAnimatedText(
|
||||
'Register',
|
||||
'Register'.tr,
|
||||
textStyle: AppStyle.headtitle2,
|
||||
speed: const Duration(milliseconds: 200),
|
||||
),
|
||||
@@ -227,7 +229,7 @@ class LoginPage extends StatelessWidget {
|
||||
],
|
||||
),
|
||||
MyElevatedButton(
|
||||
title: 'Submit',
|
||||
title: 'Submit'.tr,
|
||||
onPressed: () => controller.saveAgreementTerms())
|
||||
],
|
||||
),
|
||||
|
||||
@@ -14,7 +14,7 @@ class RegisterPage extends StatelessWidget {
|
||||
Widget build(BuildContext context) {
|
||||
Get.put(RegisterController());
|
||||
return MyScafolld(
|
||||
title: 'Register',
|
||||
title: 'Register'.tr,
|
||||
body: [
|
||||
GetBuilder<RegisterController>(
|
||||
builder: (controller) => Form(
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:ride/constant/colors.dart';
|
||||
import 'package:ride/constant/style.dart';
|
||||
import 'package:ride/views/lang/languages.dart';
|
||||
import 'package:ride/views/widgets/circle_container.dart';
|
||||
import 'package:ride/views/widgets/my_scafold.dart';
|
||||
|
||||
@@ -9,12 +13,52 @@ class HomePage extends StatelessWidget {
|
||||
Widget build(BuildContext context) {
|
||||
return MyScafolld(
|
||||
isleading: true,
|
||||
title: 'Home Page',
|
||||
title: 'Home Page'.tr,
|
||||
body: [
|
||||
Center(
|
||||
child: MyCircleContainer(
|
||||
child: const Icon(Icons.clear),
|
||||
),
|
||||
Column(
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
|
||||
child: ListTile(
|
||||
title: Text(
|
||||
'Settings'.tr,
|
||||
style: AppStyle.title,
|
||||
),
|
||||
subtitle: Text('To change some Settings'.tr),
|
||||
trailing: const Icon(
|
||||
Icons.arrow_forward_ios,
|
||||
size: 30,
|
||||
color: AppColor.primaryColor,
|
||||
),
|
||||
leading: const Icon(
|
||||
Icons.settings,
|
||||
color: AppColor.primaryColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
|
||||
child: ListTile(
|
||||
onTap: () {
|
||||
Get.to(() => Language());
|
||||
},
|
||||
title: Text(
|
||||
'Language'.tr,
|
||||
style: AppStyle.title,
|
||||
),
|
||||
subtitle: Text('To change Languge the App'.tr),
|
||||
trailing: const Icon(
|
||||
Icons.arrow_forward_ios,
|
||||
size: 30,
|
||||
color: AppColor.primaryColor,
|
||||
),
|
||||
leading: const Icon(
|
||||
Icons.language_sharp,
|
||||
color: AppColor.primaryColor,
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
],
|
||||
);
|
||||
|
||||
@@ -36,7 +36,7 @@ class MapPage extends StatelessWidget {
|
||||
minMaxZoomPreference: const MinMaxZoomPreference(6, 18),
|
||||
onLongPress: (argument) {
|
||||
Get.defaultDialog(
|
||||
title: 'Are you want to go to this site',
|
||||
title: 'Are you want to go to this site'.tr,
|
||||
content: Column(
|
||||
children: [
|
||||
Text('${argument.latitude},${argument.longitude}'),
|
||||
@@ -59,7 +59,7 @@ class MapPage extends StatelessWidget {
|
||||
controller.hidePlaces();
|
||||
|
||||
controller.changeButtomSheetShown();
|
||||
controller.bottomSheet();
|
||||
// controller.bottomSheet();
|
||||
},
|
||||
initialCameraPosition: CameraPosition(
|
||||
target: controller.mylocation,
|
||||
@@ -73,17 +73,17 @@ class MapPage extends StatelessWidget {
|
||||
icon: controller.carIcon,
|
||||
markerId: MarkerId(carLocation.toString())),
|
||||
Marker(
|
||||
markerId: const MarkerId('MyLocation'),
|
||||
markerId: MarkerId('MyLocation'.tr),
|
||||
position: controller.mylocation,
|
||||
draggable: true,
|
||||
icon: controller.markerIcon,
|
||||
onDragEnd: (value) {
|
||||
print(value);
|
||||
},
|
||||
infoWindow: const InfoWindow(title: 'my location'),
|
||||
infoWindow: InfoWindow(title: 'my location'.tr),
|
||||
),
|
||||
Marker(
|
||||
markerId: const MarkerId('destination'),
|
||||
markerId: MarkerId('Target'.tr),
|
||||
position: controller.mydestination,
|
||||
draggable: true,
|
||||
onDragEnd: (v) {
|
||||
|
||||
@@ -60,13 +60,13 @@ GetBuilder<MapController> buttomSheetMapPage() {
|
||||
Text(
|
||||
'${'Your Ride Duration is '.tr}${controller.duration} minutes'),
|
||||
Text(
|
||||
'You will be thier in ${DateFormat('h:mm a').format(controller.newTime)}'),
|
||||
'${'You will be thier in'.tr} ${DateFormat('h:mm a').format(controller.newTime)}'),
|
||||
Text(
|
||||
'You trip distance is ${controller.distance} KM')
|
||||
'${'You trip distance is'.tr} ${controller.distance} KM')
|
||||
],
|
||||
),
|
||||
Text(
|
||||
'Fee is \n${controller.totalPassenger.toStringAsFixed(2)}',
|
||||
'${'Fee is'.tr} \n${controller.totalPassenger.toStringAsFixed(2)}',
|
||||
style: AppStyle.subtitle,
|
||||
),
|
||||
],
|
||||
@@ -196,8 +196,9 @@ GetBuilder<MapController> buttomSheetMapPage() {
|
||||
),
|
||||
),
|
||||
MyElevatedButton(
|
||||
title: 'Confirm Selection',
|
||||
onPressed: () {},
|
||||
title: 'Confirm Selection'.tr,
|
||||
onPressed: () =>
|
||||
controller.changeConfirmRide(),
|
||||
)
|
||||
],
|
||||
),
|
||||
@@ -225,11 +226,11 @@ class Details extends StatelessWidget {
|
||||
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||
children: [
|
||||
Text(
|
||||
'distance is ${controller.data[0]['distance']['text']}',
|
||||
'${'distance is'.tr} ${controller.data[0]['distance']['text']}',
|
||||
style: AppStyle.title,
|
||||
),
|
||||
Text(
|
||||
'duration is ${controller.data[0]['duration']['text']}',
|
||||
'${'duration is'.tr} ${controller.data[0]['duration']['text']}',
|
||||
style: AppStyle.title,
|
||||
),
|
||||
],
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:ride/constant/colors.dart';
|
||||
import 'package:ride/constant/style.dart';
|
||||
@@ -65,7 +64,11 @@ GetBuilder<MapController> cancelRidePage() {
|
||||
groupValue: controller.selectedReason,
|
||||
onChanged: (int? value) {
|
||||
print(value);
|
||||
controller.selectReason(value!);
|
||||
print(reasons[index]);
|
||||
controller.selectReason(
|
||||
value!,
|
||||
reasons[index].toString(),
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
@@ -74,7 +77,7 @@ GetBuilder<MapController> cancelRidePage() {
|
||||
),
|
||||
MyElevatedButton(
|
||||
title: 'Cancel Ride'.tr,
|
||||
onPressed: () async {
|
||||
onPressed: () {
|
||||
controller.cancelRide();
|
||||
},
|
||||
),
|
||||
|
||||
@@ -113,7 +113,7 @@ class CashConfirmPageShown extends StatelessWidget {
|
||||
indent: 1,
|
||||
),
|
||||
MyElevatedButton(
|
||||
title: 'Add Payment Method',
|
||||
title: 'Add Payment Method'.tr,
|
||||
onPressed: () {
|
||||
controller.changePaymentMethodPageShown();
|
||||
CreditCardController().openPayment();
|
||||
|
||||
@@ -21,7 +21,7 @@ GetBuilder<MapController> formSearchPlaces() {
|
||||
child: TextField(
|
||||
decoration: InputDecoration(
|
||||
suffixIcon: const Icon(Icons.search),
|
||||
hintText: 'Type here Place',
|
||||
hintText: 'Type here Place'.tr,
|
||||
hintMaxLines: 1,
|
||||
prefixIcon: IconButton(
|
||||
onPressed: () {
|
||||
@@ -56,7 +56,8 @@ GetBuilder<MapController> formSearchPlaces() {
|
||||
onTap: () {
|
||||
controller.changeHeight();
|
||||
Get.defaultDialog(
|
||||
title: 'Are You sure to ride to ${res['name']}',
|
||||
title:
|
||||
'${'Are You sure to ride to'.tr} ${res['name']}',
|
||||
middleText: '',
|
||||
confirm: MyElevatedButton(
|
||||
title: 'Confirm'.tr,
|
||||
|
||||
@@ -67,13 +67,13 @@ class MainBottomMenuMap extends StatelessWidget {
|
||||
child: AnimatedTextKit(
|
||||
animatedTexts: [
|
||||
ScaleAnimatedText(
|
||||
'Where to ${box.read(BoxName.name)}'),
|
||||
'${'Where to'.tr} ${box.read(BoxName.name)}'),
|
||||
WavyAnimatedText(
|
||||
'Where to ${box.read(BoxName.name)}'),
|
||||
'${'Where to'.tr} ${box.read(BoxName.name)}'),
|
||||
FlickerAnimatedText(
|
||||
'Where to ${box.read(BoxName.name)}'),
|
||||
'${'Where to'.tr} ${box.read(BoxName.name)}'),
|
||||
WavyAnimatedText(
|
||||
'Where to ${box.read(BoxName.name)}'),
|
||||
'${'Where to'.tr} ${box.read(BoxName.name)}'),
|
||||
],
|
||||
isRepeatingAnimation: true,
|
||||
onTap: () {
|
||||
@@ -90,7 +90,7 @@ class MainBottomMenuMap extends StatelessWidget {
|
||||
controller.isMainBottomMenuMap
|
||||
? const SizedBox()
|
||||
: Text(
|
||||
'From : Current Location',
|
||||
'From : Current Location'.tr,
|
||||
style: AppStyle.subtitle,
|
||||
),
|
||||
controller.isMainBottomMenuMap
|
||||
@@ -181,8 +181,8 @@ class FavioratePlacesDialogu extends StatelessWidget {
|
||||
TableName.placesFavorite,
|
||||
favoritePlaces[index]['id']);
|
||||
Get.back();
|
||||
Get.snackbar('Deleted ',
|
||||
'You are Delete ${favoritePlaces[index]['name']} from your list',
|
||||
Get.snackbar('Deleted'.tr,
|
||||
'${'You are Delete'.tr} ${favoritePlaces[index]['name']} from your list',
|
||||
backgroundColor:
|
||||
AppColor.accentColor);
|
||||
},
|
||||
|
||||
@@ -83,7 +83,7 @@ class PaymentMethodPage extends StatelessWidget {
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
MyElevatedButton(
|
||||
title: 'Add Credit Card',
|
||||
title: 'Add Credit Card'.tr,
|
||||
onPressed: () async {
|
||||
SecureStorage().saveData(
|
||||
BoxName.cardNumber,
|
||||
@@ -196,7 +196,8 @@ class CreditCardWidget extends StatelessWidget {
|
||||
labelText: 'Cardholder Name'),
|
||||
validator: (value) {
|
||||
if (value!.isEmpty) {
|
||||
return 'Please enter the cardholder name';
|
||||
return 'Please enter the cardholder name'
|
||||
.tr;
|
||||
}
|
||||
return null;
|
||||
},
|
||||
@@ -228,7 +229,8 @@ class CreditCardWidget extends StatelessWidget {
|
||||
labelText: 'Expiry Date'),
|
||||
validator: (value) {
|
||||
if (value!.isEmpty) {
|
||||
return 'Please enter the expiry date';
|
||||
return 'Please enter the expiry date'
|
||||
.tr;
|
||||
}
|
||||
return null;
|
||||
},
|
||||
@@ -262,7 +264,7 @@ class CreditCardWidget extends StatelessWidget {
|
||||
validator: (value) {
|
||||
if (value!.isEmpty &&
|
||||
value.length != 3) {
|
||||
return 'Please enter the CVV code';
|
||||
return 'Please enter the CVV code'.tr;
|
||||
}
|
||||
return null;
|
||||
},
|
||||
|
||||
@@ -75,7 +75,7 @@ class PickerAnimtionContainerFormPlaces extends StatelessWidget {
|
||||
? InkWell(
|
||||
onTap: () {},
|
||||
child: formSearchPlaces(),
|
||||
)
|
||||
)
|
||||
: Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceEvenly,
|
||||
@@ -165,7 +165,7 @@ class PickerAnimtionContainerFormPlaces extends StatelessWidget {
|
||||
Get.back();
|
||||
Get.snackbar(
|
||||
'Deleted ',
|
||||
'You are Delete ${favoritePlaces[index]['name']} from your list',
|
||||
'${'You are Delete'.tr} ${favoritePlaces[index]['name']} from your list',
|
||||
backgroundColor:
|
||||
AppColor
|
||||
.accentColor);
|
||||
@@ -191,7 +191,7 @@ class PickerAnimtionContainerFormPlaces extends StatelessWidget {
|
||||
if (controller.isPickerShown &&
|
||||
controller.places.isEmpty)
|
||||
MyElevatedButton(
|
||||
title: 'Go to this Target',
|
||||
title: 'Go to this Target'.tr,
|
||||
onPressed: () async {
|
||||
await controller.getMap(
|
||||
'${controller.mylocation.latitude},${controller.mylocation.longitude}',
|
||||
|
||||
@@ -18,7 +18,7 @@ class PassengerProfilePage extends StatelessWidget {
|
||||
Get.put(ProfileController());
|
||||
return MyScafolld(
|
||||
isleading: true,
|
||||
title: 'My Profile',
|
||||
title: 'My Profile'.tr,
|
||||
body: [
|
||||
GetBuilder<ProfileController>(
|
||||
builder: (controller) => controller.isloading
|
||||
@@ -177,7 +177,7 @@ class PassengerProfilePage extends StatelessWidget {
|
||||
class GenderPicker extends StatelessWidget {
|
||||
final ProfileController controller = Get.put(ProfileController());
|
||||
|
||||
final List<String> genderOptions = ['Male', 'Female', 'Other'];
|
||||
final List<String> genderOptions = ['Male'.tr, 'Female'.tr, 'Other'.tr];
|
||||
|
||||
GenderPicker({super.key});
|
||||
|
||||
|
||||
@@ -6,46 +6,57 @@ import 'package:ride/views/widgets/elevated_btn.dart';
|
||||
import '../../constant/box_name.dart';
|
||||
import '../../controller/local/local_controller.dart';
|
||||
import '../auth/login_page.dart';
|
||||
import '../home/home_page.dart';
|
||||
import '../home/map_page.dart';
|
||||
|
||||
class Language extends GetView<LocaleController> {
|
||||
class Language extends StatelessWidget {
|
||||
const Language({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
body: Center(
|
||||
body: GetBuilder<LocaleController>(
|
||||
builder: (controller) => Center(
|
||||
child: Container(
|
||||
padding: const EdgeInsets.all(15),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
Text("Choose Language".tr,
|
||||
style: Theme.of(context).textTheme.headlineLarge),
|
||||
const SizedBox(height: 20),
|
||||
MyElevatedButton(
|
||||
title: 'Ar',
|
||||
onPressed: () {
|
||||
controller.changeLang("ar");
|
||||
// main();
|
||||
box.read(BoxName.email) != null
|
||||
? Get.offAll(() => const MapPage())
|
||||
: Get.offAll(() => LoginPage());
|
||||
},
|
||||
),
|
||||
MyElevatedButton(
|
||||
title: "En",
|
||||
onPressed: () {
|
||||
controller.changeLang("en");
|
||||
box.read(BoxName.email) != null
|
||||
? Get.offAll(() => const MapPage())
|
||||
: Get.offAll(() => LoginPage());
|
||||
},
|
||||
),
|
||||
],
|
||||
)),
|
||||
padding: const EdgeInsets.all(15),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
Text(
|
||||
"Choose Language".tr,
|
||||
style: Theme.of(context).textTheme.headlineLarge,
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
MyElevatedButton(
|
||||
title: 'Ar',
|
||||
onPressed: () {
|
||||
controller.changeLang("ar");
|
||||
box.read(BoxName.email) != null
|
||||
? Get.offAll(() => const MapPage())
|
||||
: Get.offAll(() => LoginPage());
|
||||
},
|
||||
),
|
||||
MyElevatedButton(
|
||||
title: "En",
|
||||
onPressed: () {
|
||||
controller.changeLang("en");
|
||||
box.read(BoxName.email) != null
|
||||
? Get.offAll(() => const MapPage())
|
||||
: Get.offAll(() => LoginPage());
|
||||
},
|
||||
),
|
||||
MyElevatedButton(
|
||||
title: "Tr",
|
||||
onPressed: () {
|
||||
controller.changeLang("tr");
|
||||
box.read(BoxName.email) != null
|
||||
? Get.offAll(() => const MapPage())
|
||||
: Get.offAll(() => LoginPage());
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user