fix issues and translation

fatima
Fatimah Alshammari 3 years ago
parent e8d9334918
commit 8058231f43

@ -1,5 +1,6 @@
import 'package:car_customer_app/models/post_params_model.dart';
import 'package:car_customer_app/models/user/user.dart';
class AppState {
@ -20,4 +21,13 @@ class AppState {
set setUser(v) => _user = v;
User get getUser => _user??User();
PostParamsModel? _postParams;
PostParamsModel? get postParamsObject => _postParams;
Map<String, dynamic> get postParamsJson => _postParams?.toJson() ?? {};
void setPostParamsModel(PostParamsModel _postParams) {
this._postParams = _postParams;
}
}

@ -14,7 +14,73 @@ class CodegenLoader extends AssetLoader{
return Future.value(mapLocales[locale.toString()]);
}
static const Map<String,dynamic> en = {
static const Map<String,dynamic> ar_SA = {
"firstTimeLogIn": "تسجيل الدخول لأول مره",
"signUp": "تسجيل دخول",
"changeMobile": "تغيير رقم الجوال",
"notifications": "الاشعارات",
"general": "عام",
"defineLicences": "تحديد الرخص",
"dealershipSettings": "اعدادات البيع",
"changePassword": "تغيير كلمة المرور",
"retrievePassword": "استرجاع كلمة المرور",
"changeEmail": "تغيير الايميل",
"verify": "تحقق",
"signOut": "تسجيل خروج",
"enterEmail": "ادخل الايميل",
"enterNewEmail": "ادخل ايميل جديد",
"enterCurrentPassword": "كلمة المرور الحاليه",
"enterNewPassword": "كلمة المرور الجديده",
"enterOldPassword": "كلمة المرور القديمه",
"confirm": "تأكيد",
"enterNewPhoneNumber": "رقم جوال جديد",
"completeProfile": "الملف الشخصي",
"continu": "استمرار",
"confirmPassword": "تأكيد كلمة المرور",
"createPassword": "انشاء كلمة مرور جديده",
"email": "ايميل",
"firstName": "الأسم الأول *",
"surname": "اسم العائله *",
"confirmPass": "تأكيد كلمة المرور *",
"createPass": "انشاء كلمة مرور جديده *",
"newPassword": " كلمة مرور جديده",
"forgetPassword": "نسيت كلمة المرور",
"editAccount": "تعديل الحساب",
"change": "تغيير",
"verifyAccount": "التحقق من الحساب",
"login": "تسجيل دخول",
"welcomeMessage": "مرحبا",
"forgetPass": "نسيت كلمة المرور ؟",
"enterPhoneNumber": "رقم جوال ",
"phoneNumberVerified": "تم التحقق من الجوال",
"verifyNewPassword": "التحقق من كلمة المرور",
"EnterPass": "ادخل كلمة المرور",
"alreadySigned": " تم تسجيل الدخول",
"emailChangedSuccessfully": "تم تغيير الايميل بنجاح",
"passwordIsUpdated": "تم تحجيث كلمة المرور",
"passwordShouldContains": "كلمة المرور يجب ان تحتوي على رمز رقم حرف كبير حرف صغير",
" successfullyRegistered": "تم التسجيل بنجاح",
"pleaseEnterSamePassword": "ادخل كلمة مرور مطابقه",
"firstNameMandatory": "ادخل الأسم الأول ",
"surnameNameMandatory": "ادخل اسم العائله",
"passwordNameMandatory": "ادخل كلمة المرور",
"enterValidEmail": "ادخل ايميل صحيح",
"pleaseAcceptTerms": "يجب الموافقه على الشروط",
"emailVerified": "تم التحقق من الايميل بنجاح",
"selectMethod": "اختر",
"emailAddress": "ايميل",
"loginSelection": "اختر",
"selectCountryCode": "اختر رمز الدوله",
"selectProviderRole": "اختر نوع الخدمه",
"addPhoneNo": "اضف الهاتف",
"onlyCustomerApp": "نأسف هذا التطبيق فقط للعملاء",
"imageUploaded": "تم تحميل الصوره",
"fileLarger": "1KB حجم الملف اكبر من",
"account": "الحساب",
"edit": "تعديل",
"imageDeleted": "تم حذف الصوره",
"dashboard": "الصفحه الرئيسيه",
"termsOfService": "من خلال إنشاء حساب فإنك توافق على شروط الخدمة و\n سياسة الخصوصية",
"title": "Hello",
"msg": "Hello {} in the {} world ",
"msg_named": "{} are written in the {lang} language",
@ -53,6 +119,72 @@ class CodegenLoader extends AssetLoader{
"reset_locale": "Reset Language"
};
static const Map<String,dynamic> en_US = {
"firstTimeLogIn": "First Time Log In",
"signUp": "Sing Up",
"changeMobile": "Change Mobile",
"notifications": "Notifications",
"general": "General",
"defineLicences": "Define Licences",
"dealershipSettings": "Dealership Settings",
"changePassword": "Change Password",
"retrievePassword": "Retrieve Password",
"changeEmail": "Change Email",
"verify": "Verify",
"signOut": "Sign Out",
"enterEmail": "Enter Email",
"enterNewEmail": "Enter New Email",
"enterNewPassword": "Enter New Password",
"enterCurrentPassword": "Enter Current Password",
"enterOldPassword": "Enter Old Password",
"confirm": "Confirm",
"completeProfile": "Complete Profile",
"enterNewPhoneNumber": "Enter New Phone Number",
"enterPhoneNumber": "Enter Phone Number",
"continu": "Continue",
"confirmPassword": "Confirm Password",
"createPassword": "Create Password",
"email": "Email",
"firstName": "First Name *",
"surname": "Surname *",
"confirmPass": "Confirm Password *",
"createPass": "Create Password *",
"newPassword": "New Password",
"forgetPassword": "Forget Password",
"editAccount": "Edit Account",
"change": "Change",
"verifyAccount": "Verify Account",
"login": "Log In",
"welcomeMessage": "Welcome Message",
"forgetPass": "Forget Password ?",
"phoneNumberVerified": "Phone Number Verified",
"verifyNewPassword": "Verify New Password",
"EnterPass": "Enter Password ?",
"alreadySigned": " Already Signed Up and Logged In",
"emailChangedSuccessfully": "Email is Changed Successfully",
"passwordIsUpdated": "Password is Updated",
"passwordShouldContains": "Password Should contains Character, Number, Capital and small letters,",
" successfullyRegistered": " Successfully Registered, Please login once,",
"pleaseEnterSamePassword": "Please enter same password",
"firstNameMandatory": "First name is mandatory",
"surnameNameMandatory": "Surname is mandatory",
"passwordNameMandatory": "Password is mandatory",
"enterValidEmail": "Enter Valid Email",
"pleaseAcceptTerms": "Please accept terms",
"emailVerified": "Email is verified successfully",
"selectMethod": "Select Method",
"emailAddress": "Email Address",
"loginSelection": "Login Selection",
"selectCountryCode": "Please select Country Code",
"selectProviderRole": "Please select Provider Role",
"addPhoneNo": "Please add Phone No",
"onlyCustomerApp": "Sorry, Only Customer's can log in this app",
"imageUploaded": "Image is uploaded",
"fileLarger": "File is larger then 1KB",
"account": "Account",
"edit": "EDIT",
"imageDeleted": "Image is Deleted",
"dashboard": "Dashboard/Main Page",
"termsOfService": "By creating an account you agree to our Terms of Service and\n Privacy Policy",
"title": "Hello",
"msg": "Hello {} in the {} world ",
"msg_named": "{} are written in the {lang} language",
@ -90,5 +222,5 @@ static const Map<String,dynamic> en_US = {
},
"reset_locale": "Reset Language"
};
static const Map<String, Map<String,dynamic>> mapLocales = {"en": en, "en_US": en_US};
static const Map<String, Map<String,dynamic>> mapLocales = {"ar_SA": ar_SA, "en_US": en_US};
}

@ -1,4 +1,6 @@
import 'package:car_customer_app/classes/app_state.dart';
import 'package:car_customer_app/config/app_provider.dart';
import 'package:car_customer_app/models/post_params_model.dart';
import 'package:car_customer_app/theme/app_theme.dart';
import 'package:easy_localization/easy_localization.dart';
@ -15,24 +17,35 @@ Future<void> main() async {
runApp(
EasyLocalization(
supportedLocales: [
Locale('en', 'US'),
Locale('ar', 'SA'),
Locale('en', 'US')
],
fallbackLocale: Locale('ar', 'SA'),
path: 'resources/langs',
child: MyApp(),
),
);
}
class MyApp extends StatelessWidget {
// todo terminal command to genertate translation files
// flutter pub run easy_localization:generate --source-dir ./resources/langs
// todo terminal command to genertate translation keys
// flutter pub run easy_localization:generate --source-dir ./resources/langs -f keys -o locale_keys.g.dart
// command to generate languages data from json
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return AppProvider(
child: Sizer(
builder: (context, orientation, deviceType) {
AppState().setPostParamsModel(
PostParamsModel(languageID: EasyLocalization.of(context)?.locale.languageCode == "ar" ? 1 : 2,),
);
return MaterialApp(
theme: AppTheme.getTheme(),
theme: AppTheme.getTheme(EasyLocalization.of(context)?.locale.languageCode == "ar"),
debugShowCheckedModeBanner: false,
localizationsDelegates: context.localizationDelegates,
supportedLocales: context.supportedLocales,

@ -0,0 +1,35 @@
class PostParamsModel {
double? versionID;
int? channel;
int? languageID;
String? mobileType;
String? logInTokenID;
String? tokenID;
PostParamsModel({this.versionID, this.channel, this.languageID, this.mobileType, this.logInTokenID, this.tokenID});
PostParamsModel.fromJson(Map<String, dynamic> json) {
versionID = json['VersionID'];
channel = json['Channel'];
languageID = json['LanguageID'];
mobileType = json['MobileType'];
logInTokenID = json['LogInTokenID'];
tokenID = json['TokenID'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['VersionID'] = this.versionID;
data['Channel'] = this.channel;
data['LanguageID'] = this.languageID;
data['MobileType'] = this.mobileType;
data['LogInTokenID'] = this.logInTokenID;
data['TokenID'] = this.tokenID;
return data;
}
set setLogInTokenID(String? token) => logInTokenID = token;
set setTokenID(String? token) => tokenID = token;
}

@ -1,4 +1,5 @@
import 'package:car_customer_app/api/shared_prefrence.dart';
import 'package:car_customer_app/generated/locale_keys.g.dart';
import 'package:car_customer_app/theme/colors.dart';
import 'package:car_customer_app/utils/navigator.dart';
import 'package:car_customer_app/widgets/app_bar.dart';
@ -6,6 +7,7 @@ import 'package:car_customer_app/widgets/show_fill_button.dart';
import 'package:car_customer_app/extensions/int_extensions.dart';
import 'package:car_customer_app/extensions/string_extensions.dart';
import 'package:car_customer_app/extensions/widget_extensions.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
import '../../api/client/user_api_client.dart';
@ -57,7 +59,7 @@ class _DashboardPageState extends State<DashboardPage> {
drawer: showDrawer(context),
body: Container(
child: Center(
child: "Dashboard/Main Page".toText24(),
child: LocaleKeys.dashboard.tr().toText24(),
),
),
);
@ -114,7 +116,8 @@ class _DashboardPageState extends State<DashboardPage> {
Utils.showLoading(context);
ImageResponse response = await UserApiClent().UpdateUserImage("");
if (response.messageStatus == 1) {
Utils.showToast("Image is Deleted");
Utils.showToast( LocaleKeys.imageDeleted.tr());
//("Image is Deleted");
setState(() {
AppState().getUser.data!.userInfo!.userImageUrl = response.data;
});
@ -145,7 +148,7 @@ class _DashboardPageState extends State<DashboardPage> {
),
),
ShowFillButton(
title: "EDIT",
title:LocaleKeys.edit.tr(),
onPressed: () {
navigateWithName(context, AppRoutes.editAccoundPage);
},
@ -155,19 +158,19 @@ class _DashboardPageState extends State<DashboardPage> {
),
ListTile(
leading: Icon(Icons.notifications),
title: "Notifications".toText12(),
title: LocaleKeys.notifications.tr().toText12(),
),
ListTile(
leading: Icon(Icons.settings),
title: "General".toText12(),
title: LocaleKeys.general.tr().toText12(),
),
ListTile(
leading: Icon(Icons.person),
title: "Account".toText12(),
title: LocaleKeys.account.tr().toText12(),
),
ListTile(
leading: Icon(Icons.logout),
title: "Sign Out".toText12(),
title: LocaleKeys.signOut.tr().toText12(),
onTap: () {
pop(context);
pop(context);
@ -204,7 +207,8 @@ class _DashboardPageState extends State<DashboardPage> {
int sizeInBytes = pickedImageFile.lengthSync();
// double sizeInMb = sizeInBytes / (1024 * 1024);
if (sizeInBytes > 1000) {
Utils.showToast("File is larger then 1KB");
Utils.showToast(LocaleKeys.fileLarger.tr());
//("File is larger then 1KB");
} else {
image64 = convertFileToBase64(pickedImageFile);
@ -213,7 +217,8 @@ class _DashboardPageState extends State<DashboardPage> {
Utils.hideLoading(context);
Navigator.pop(context);
if (response.messageStatus == 1) {
Utils.showToast("Image is uploaded");
Utils.showToast(LocaleKeys.imageUploaded.tr());
//("Image is uploaded");
AppState().getUser.data!.userInfo!.userImageUrl = response.data;
} else {
Utils.showToast(response.message ?? "");
@ -234,7 +239,8 @@ class _DashboardPageState extends State<DashboardPage> {
int sizeInBytes = pickedImageFile.lengthSync();
// double sizeInMb = sizeInBytes / (1024 * 1024);
if (sizeInBytes > 1000) {
Utils.showToast("File is larger then 1KB");
Utils.showToast(LocaleKeys.fileLarger.tr());
//("File is larger then 1KB");
} else {
image64 = convertFileToBase64(pickedImageFile);
@ -243,7 +249,8 @@ class _DashboardPageState extends State<DashboardPage> {
Utils.hideLoading(context);
Navigator.pop(context);
if (response.messageStatus == 1) {
Utils.showToast("Image is uploaded");
Utils.showToast(LocaleKeys.imageUploaded.tr());
//("Image is uploaded");
AppState().getUser.data!.userInfo!.userImageUrl = response.data;
} else {
Utils.showToast(response.message ?? "");

@ -4,6 +4,7 @@ import 'package:car_customer_app/classes/utils.dart';
import 'package:car_customer_app/config/routes.dart';
import 'package:car_customer_app/extensions/int_extensions.dart';
import 'package:car_customer_app/extensions/string_extensions.dart';
import 'package:car_customer_app/generated/locale_keys.g.dart';
import 'package:car_customer_app/models/user/change_email.dart';
import 'package:car_customer_app/models/user/confirm_email.dart';
import 'package:car_customer_app/utils/navigator.dart';
@ -12,6 +13,7 @@ import 'package:car_customer_app/widgets/dialog/dialogs.dart';
import 'package:car_customer_app/widgets/dialog/message_dialog.dart';
import 'package:car_customer_app/widgets/dialog/otp_dialog.dart';
import 'package:car_customer_app/widgets/show_fill_button.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
import 'dart:convert';
@ -30,7 +32,7 @@ class _ChangeEmailPageState extends State<ChangeEmailPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: appBar(title: "Change Email"),
appBar: appBar(title: LocaleKeys.changeEmail.tr()),
body: SingleChildScrollView(
child: Container(
// width: double.infinity,
@ -38,11 +40,11 @@ class _ChangeEmailPageState extends State<ChangeEmailPage> {
padding: EdgeInsets.all(40),
child: Column(
children: [
"Enter Email".toText24(),
LocaleKeys.enterEmail.tr().toText24(),
12.height,
TextFormField(
decoration: InputDecoration(
hintText: "Enter New Email",
hintText: LocaleKeys.enterNewEmail,
hintStyle: TextStyle(color: Colors.grey),
border: OutlineInputBorder(
borderRadius: const BorderRadius.all(
@ -56,7 +58,8 @@ class _ChangeEmailPageState extends State<ChangeEmailPage> {
12.height,
TextFormField(
decoration: InputDecoration(
hintText: "Enter Current Password",
hintText: LocaleKeys.enterCurrentPassword.tr(),
// hintText: "Enter Current Password ",
hintStyle: TextStyle(color: Colors.grey),
border: OutlineInputBorder(
borderRadius: const BorderRadius.all(
@ -69,7 +72,7 @@ class _ChangeEmailPageState extends State<ChangeEmailPage> {
),
40.height,
ShowFillButton(
title: "Confirm",
title: LocaleKeys.confirm.tr(),
width: double.infinity,
onPressed: () {
changeEmail(context);
@ -97,7 +100,8 @@ class _ChangeEmailPageState extends State<ChangeEmailPage> {
showMDialog(
context,
child: MessageDialog(
title: "Email is Changed Successfully",
title: LocaleKeys.emailChangedSuccessfully.tr(),
//"Email is Changed Successfully",
onClick: () {
Navigator.of(context).pushNamedAndRemoveUntil(AppRoutes.loginWithPassword, (Route<dynamic> route) => false);
},

@ -4,6 +4,7 @@ import 'package:car_customer_app/classes/utils.dart';
import 'package:car_customer_app/config/routes.dart';
import 'package:car_customer_app/extensions/int_extensions.dart';
import 'package:car_customer_app/extensions/string_extensions.dart';
import 'package:car_customer_app/generated/locale_keys.g.dart';
import 'package:car_customer_app/models/user/change_mobile.dart';
import 'package:car_customer_app/models/user/confirm_mobile.dart';
import 'package:car_customer_app/utils/navigator.dart';
@ -12,6 +13,7 @@ import 'package:car_customer_app/widgets/dialog/dialogs.dart';
import 'package:car_customer_app/widgets/dialog/message_dialog.dart';
import 'package:car_customer_app/widgets/dialog/otp_dialog.dart';
import 'package:car_customer_app/widgets/show_fill_button.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
import 'dart:convert';
@ -31,7 +33,7 @@ class _ChangeMobilePageState extends State<ChangeMobilePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: appBar(title: "Change Mobile Number"),
appBar: appBar(title: LocaleKeys.changeMobile.tr(),),
body: SingleChildScrollView(
child: Container(
// width: double.infinity,
@ -39,11 +41,12 @@ class _ChangeMobilePageState extends State<ChangeMobilePage> {
padding: EdgeInsets.all(40),
child: Column(
children: [
"Enter New Phone Number".toText24(),
LocaleKeys.enterNewPhoneNumber.tr().toText24(),
12.height,
TextFormField(
decoration: InputDecoration(
hintText: "Enter New Phone Number",
//hintText: "Enter New Phone Number",
hintText: LocaleKeys.enterNewPhoneNumber.tr(),
hintStyle: TextStyle(color: Colors.grey),
border: OutlineInputBorder(
borderRadius: const BorderRadius.all(
@ -57,7 +60,8 @@ class _ChangeMobilePageState extends State<ChangeMobilePage> {
12.height,
TextFormField(
decoration: InputDecoration(
hintText: "Enter Current Password",
hintText: LocaleKeys.enterCurrentPassword.tr(),
// hintText: "Enter Current Password",
hintStyle: TextStyle(color: Colors.grey),
border: OutlineInputBorder(
borderRadius: const BorderRadius.all(
@ -70,7 +74,7 @@ class _ChangeMobilePageState extends State<ChangeMobilePage> {
),
40.height,
ShowFillButton(
title: "Confirm",
title: LocaleKeys.confirm.tr(),
width: double.infinity,
onPressed: () {
changeMobile(context);
@ -98,7 +102,8 @@ class _ChangeMobilePageState extends State<ChangeMobilePage> {
showMDialog(
context,
child: MessageDialog(
title: "Phone Number Verified",
title:LocaleKeys.phoneNumberVerified.tr(),
//"Phone Number Verified",
onClick: () {
Navigator.of(context).pushNamedAndRemoveUntil(AppRoutes.loginWithPassword, (Route<dynamic> route) => false);
},

@ -2,6 +2,7 @@ import 'package:car_customer_app/api/client/user_api_client.dart';
import 'package:car_customer_app/classes/utils.dart';
import 'package:car_customer_app/config/routes.dart';
import 'package:car_customer_app/generated/locale_keys.g.dart';
import 'package:car_customer_app/models/user/change_password.dart';
import 'package:car_customer_app/models/user/confirm_password.dart';
import 'package:car_customer_app/utils/navigator.dart';
@ -13,6 +14,7 @@ import 'package:car_customer_app/widgets/show_fill_button.dart';
import 'package:car_customer_app/extensions/string_extensions.dart';
import 'package:car_customer_app/extensions/int_extensions.dart';
import 'package:car_customer_app/widgets/txt_field.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
import 'dart:convert';
@ -34,7 +36,7 @@ class _ChangePasswordPageState extends State<ChangePasswordPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: appBar(title: "Change Password"),
appBar: appBar(title: LocaleKeys.changePassword.tr()),
body: SingleChildScrollView(
child: Container(
// width: double.infinity,
@ -42,11 +44,12 @@ class _ChangePasswordPageState extends State<ChangePasswordPage> {
padding: EdgeInsets.all(40),
child: Column(
children: [
"Enter New Password".toText24(),
LocaleKeys.enterNewPassword.tr().toText24(),
12.height,
TextFormField(
decoration: InputDecoration(
hintText: "Enter Old Password",
// hintText: "Enter Old Password",
hintText: LocaleKeys.enterOldPassword.tr(),
hintStyle: TextStyle(color: Colors.grey),
border: OutlineInputBorder(
borderRadius: const BorderRadius.all(
@ -60,7 +63,8 @@ class _ChangePasswordPageState extends State<ChangePasswordPage> {
12.height,
TextFormField(
decoration: InputDecoration(
hintText: "Enter New Password",
//hintText: "Enter New Password",
hintText: LocaleKeys.enterNewPassword.tr(),
hintStyle: TextStyle(color: Colors.grey),
border: OutlineInputBorder(
borderRadius: const BorderRadius.all(
@ -73,7 +77,7 @@ class _ChangePasswordPageState extends State<ChangePasswordPage> {
),
40.height,
ShowFillButton(
title: "Confirm",
title: LocaleKeys.confirm.tr(),
width: double.infinity,
onPressed: () {
changePassword(context);
@ -92,7 +96,8 @@ class _ChangePasswordPageState extends State<ChangePasswordPage> {
MResponse res = await UserApiClent().ChangePassword(currentPasswor, newPassword);
Utils.hideLoading(context);
if (res.messageStatus == 1) {
Utils.showToast("Password is Updated");
Utils.showToast(LocaleKeys.passwordIsUpdated.tr());
//("Password is Updated");
// navigateWithName(context, AppRoutes.loginWithPassword);
Navigator.of(context)
.pushNamedAndRemoveUntil(AppRoutes.loginWithPassword, (Route<dynamic> route) => false);
@ -100,7 +105,8 @@ class _ChangePasswordPageState extends State<ChangePasswordPage> {
Utils.showToast(res.message ?? "");
}
} else {
Utils.showToast("Password Should contains Character, Number, Capital and small letters");
Utils.showToast(LocaleKeys.passwordShouldContains.tr());
//("Password Should contains Character, Number, Capital and small letters");
}
}

@ -1,6 +1,7 @@
import 'package:car_customer_app/api/client/user_api_client.dart';
import 'package:car_customer_app/classes/utils.dart';
import 'package:car_customer_app/config/routes.dart';
import 'package:car_customer_app/generated/locale_keys.g.dart';
import 'package:car_customer_app/models/m_response.dart';
import 'package:car_customer_app/models/user/basic_otp.dart';
import 'package:car_customer_app/models/user/register_user.dart';
@ -15,6 +16,7 @@ import 'package:car_customer_app/extensions/widget_extensions.dart';
import 'package:car_customer_app/extensions/int_extensions.dart';
import 'package:car_customer_app/extensions/string_extensions.dart';
import 'package:car_customer_app/widgets/txt_field.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
class CompleteProfilePage extends StatefulWidget {
@ -39,7 +41,7 @@ class _CompleteProfilePageState extends State<CompleteProfilePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: appBar(title: "Sign Up"),
appBar: appBar(title: LocaleKeys.signUp.tr()),
body: Container(
width: double.infinity,
height: double.infinity,
@ -48,11 +50,11 @@ class _CompleteProfilePageState extends State<CompleteProfilePage> {
padding: EdgeInsets.all(20),
child: Column(
children: [
"Complete Profile".toText24(),
LocaleKeys.completeProfile.tr().toText24(),
12.height,
TxtField(
hint: "First Name *",
hint: LocaleKeys.firstName.tr(),
value: firstName,
onChanged: (v) {
firstName = v;
@ -60,7 +62,7 @@ class _CompleteProfilePageState extends State<CompleteProfilePage> {
),
12.height,
TxtField(
hint: "Surname *",
hint:LocaleKeys.surname.tr(),
value: lastName,
onChanged: (v) {
lastName = v;
@ -68,17 +70,17 @@ class _CompleteProfilePageState extends State<CompleteProfilePage> {
),
12.height,
TxtField(
hint: "Email",
hint: LocaleKeys.email.tr(),
value: email,
isButtonEnable: email!.length > 0 ? true : false,
buttonTitle: "Verify",
// isButtonEnable: email!.length > 0 ? true : false,
buttonTitle: LocaleKeys.verify.tr(),
onChanged: (v) {
email = v;
},
),
12.height,
TxtField(
hint: "Create Password *",
hint: LocaleKeys.createPass.tr(),
isPasswordEnabled: true,
maxLines: 1,
value: password,
@ -88,7 +90,7 @@ class _CompleteProfilePageState extends State<CompleteProfilePage> {
),
12.height,
TxtField(
hint: "Confirm Password *",
hint: LocaleKeys.confirmPass.tr(),
isPasswordEnabled: true,
maxLines: 1,
value: confirmPassword,
@ -104,12 +106,12 @@ class _CompleteProfilePageState extends State<CompleteProfilePage> {
Row(
children: [
buildCheckbox(),
"By creating an account you agree to our Terms of Service and\n Privacy Policy".toText12(),
LocaleKeys.termsOfService.tr().toText12(),
],
),
16.height,
ShowFillButton(
title: "Continue",
title: LocaleKeys.continu.tr(),
width: double.infinity,
onPressed: () {
if (validation()) performCompleteProfile();
@ -165,17 +167,20 @@ class _CompleteProfilePageState extends State<CompleteProfilePage> {
RegisterUser user = await UserApiClent().basicComplete(widget.user.data?.userId ?? "", firstName!, lastName!, email!, password!);
Utils.hideLoading(context);
if (user.messageStatus == 1) {
Utils.showToast("Successfully Registered, Please login once");
Utils.showToast(LocaleKeys.successfullyRegistered.tr());
//("Successfully Registered, Please login once");
pop(context);
// navigateReplaceWithName(context, AppRoutes.dashboard,arguments: user);
} else {
Utils.showToast(user.message ?? "");
}
} else {
Utils.showToast("Please enter same password");
Utils.showToast(LocaleKeys.pleaseEnterSamePassword.tr());
//("Please enter same password");
}
} else {
Utils.showToast("Password Should contains Character, Number, Capital and small letters");
Utils.showToast(LocaleKeys.passwordShouldContains.tr());
//("Password Should contains Character, Number, Capital and small letters");
}
}
@ -194,21 +199,26 @@ class _CompleteProfilePageState extends State<CompleteProfilePage> {
bool validation() {
bool isValid = true;
if (firstName!.isEmpty) {
Utils.showToast("First name is mandatory");
Utils.showToast(LocaleKeys.firstNameMandatory.tr());
//("First name is mandatory");
isValid = false;
} else if (lastName!.isEmpty) {
Utils.showToast("Surname is mandatory");
Utils.showToast(LocaleKeys.surnameNameMandatory.tr());
//("Surname is mandatory");
isValid = false;
} else if (email!.isNotEmpty) {
if(!isEmail(email!)){
Utils.showToast("Enter Valid Email");
Utils.showToast(LocaleKeys.enterValidEmail.tr());
//("Enter Valid Email");
isValid = false;
}
}else if (password!.isEmpty) {
Utils.showToast("Password is mandatory");
Utils.showToast(LocaleKeys.passwordNameMandatory.tr());
//("Password is mandatory");
isValid = false;
} else if (!isChecked) {
Utils.showToast("Please accept terms");
Utils.showToast(LocaleKeys.pleaseAcceptTerms.tr());
//("Please accept terms");
isValid = false;
}
return isValid;

@ -5,11 +5,13 @@ import 'package:car_customer_app/classes/utils.dart';
import 'package:car_customer_app/config/routes.dart';
import 'package:car_customer_app/extensions/int_extensions.dart';
import 'package:car_customer_app/extensions/string_extensions.dart';
import 'package:car_customer_app/generated/locale_keys.g.dart';
import 'package:car_customer_app/models/user/confirm_password.dart';
import 'package:car_customer_app/utils/navigator.dart';
import 'package:car_customer_app/widgets/app_bar.dart';
import 'package:car_customer_app/widgets/show_fill_button.dart';
import 'package:car_customer_app/widgets/txt_field.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
import 'dart:convert';
@ -29,17 +31,18 @@ class ConfirmNewPasswordPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: appBar(title: "Forget Password"),
appBar: appBar(title: LocaleKeys.forgetPassword.tr()),
body: Container(
width: double.infinity,
height: double.infinity,
padding: EdgeInsets.all(40),
child: Column(
children: [
"New Password".toText24(),
LocaleKeys.newPassword.tr().toText24(),
12.height,
TxtField(
hint: "Inter New Password",
// hint: "Enter New Password",
hint: LocaleKeys.enterNewPassword.tr(),
value: newPassword,
onChanged: (v) {
newPassword = v;
@ -47,7 +50,7 @@ class ConfirmNewPasswordPage extends StatelessWidget {
),
40.height,
ShowFillButton(
title: "Confirm",
title: LocaleKeys.confirm.tr(),
width: double.infinity,
onPressed: () {
confirmPasswordOTP(context);

@ -2,6 +2,7 @@ import 'package:car_customer_app/api/client/user_api_client.dart';
import 'package:car_customer_app/classes/utils.dart';
import 'package:car_customer_app/config/routes.dart';
import 'package:car_customer_app/generated/locale_keys.g.dart';
import 'package:car_customer_app/models/user/confirm_password.dart';
import 'package:car_customer_app/utils/navigator.dart';
import 'package:car_customer_app/utils/utils.dart';
@ -12,6 +13,7 @@ import 'package:car_customer_app/widgets/show_fill_button.dart';
import 'package:car_customer_app/extensions/string_extensions.dart';
import 'package:car_customer_app/extensions/int_extensions.dart';
import 'package:car_customer_app/widgets/txt_field.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
import 'dart:convert';
@ -33,7 +35,7 @@ class _ConfirmNewPasswordPageState extends State<ConfirmNewPasswordPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: appBar(title: "Forget Password"),
appBar: appBar(title: LocaleKeys.forgetPassword.tr()),
body: SingleChildScrollView(
child: Container(
// width: double.infinity,
@ -41,11 +43,12 @@ class _ConfirmNewPasswordPageState extends State<ConfirmNewPasswordPage> {
padding: EdgeInsets.all(40),
child: Column(
children: [
"New Password".toText24(),
LocaleKeys.newPassword.toText24(),
12.height,
TextFormField(
decoration: InputDecoration(
hintText: "Enter New Password",
// hintText: "Enter New Password",
hintText: LocaleKeys.enterNewPassword.tr(),
hintStyle: TextStyle(color: Colors.grey),
border: OutlineInputBorder(
borderRadius: const BorderRadius.all(
@ -59,7 +62,8 @@ class _ConfirmNewPasswordPageState extends State<ConfirmNewPasswordPage> {
12.height,
TextFormField(
decoration: InputDecoration(
hintText: "Confirm Password",
// hintText: "Confirm Password",
hintText: LocaleKeys.confirmPassword.tr(),
hintStyle: TextStyle(color: Colors.grey),
border: OutlineInputBorder(
borderRadius: const BorderRadius.all(
@ -72,7 +76,7 @@ class _ConfirmNewPasswordPageState extends State<ConfirmNewPasswordPage> {
),
40.height,
ShowFillButton(
title: "Confirm",
title: LocaleKeys.confirm.tr(),
width: double.infinity,
onPressed: () {
if (validation()) confirmPasswordOTP(context);
@ -92,13 +96,15 @@ class _ConfirmNewPasswordPageState extends State<ConfirmNewPasswordPage> {
Utils.hideLoading(context);
ConfirmPassword data = ConfirmPassword.fromJson(jsonDecode(res.body));
if (data.messageStatus == 1) {
Utils.showToast("Password is Updated");
Utils.showToast(LocaleKeys.passwordIsUpdated.tr());
//("Password is Updated");
navigateWithName(context, AppRoutes.loginWithPassword);
} else {
Utils.showToast(data.message ?? "");
}
}else{
Utils.showToast("Password Should contains Character, Number, Capital and small letters");
Utils.showToast(LocaleKeys.passwordShouldContains.tr());
//("Password Should contains Character, Number, Capital and small letters");
}
}

@ -6,6 +6,7 @@ import 'package:car_customer_app/classes/utils.dart';
import 'package:car_customer_app/config/routes.dart';
import 'package:car_customer_app/extensions/int_extensions.dart';
import 'package:car_customer_app/extensions/string_extensions.dart';
import 'package:car_customer_app/generated/locale_keys.g.dart';
import 'package:car_customer_app/models/m_response.dart';
import 'package:car_customer_app/models/user/verify_email.dart';
import 'package:car_customer_app/models/user/verify_email_otp.dart';
@ -14,6 +15,7 @@ import 'package:car_customer_app/widgets/app_bar.dart';
import 'package:car_customer_app/widgets/dialog/dialogs.dart';
import 'package:car_customer_app/widgets/dialog/message_dialog.dart';
import 'package:car_customer_app/widgets/dialog/otp_dialog.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
@ -29,7 +31,7 @@ class _EditAccountPageState extends State<EditAccountPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: appBar(title: "Edit Account"),
appBar: appBar(title: LocaleKeys.editAccount.tr(),),
body: Container(
width: double.infinity,
height: double.infinity,
@ -39,7 +41,7 @@ class _EditAccountPageState extends State<EditAccountPage> {
20.height,
ListTile(
leading: SvgPicture.asset("assets/images/ic_lock.svg"),
title: "Change Password".toText12(),
title: LocaleKeys.changePassword.tr().toText12(),
onTap: () {
navigateWithName(context, AppRoutes.changePassword);
},
@ -49,14 +51,14 @@ class _EditAccountPageState extends State<EditAccountPage> {
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
SvgPicture.asset("assets/images/ic_mobile.svg"),
"Change Mobile".toText12(),
"Verify".toText12(),
LocaleKeys.changeMobile.tr().toText12(),
LocaleKeys.verify.tr().toText12(),
RaisedButton(
onPressed: () {
navigateWithName(context, AppRoutes.changeMobilePage);
},
child: Text(
"Change",
LocaleKeys.change.tr(),
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w600,
@ -75,7 +77,7 @@ class _EditAccountPageState extends State<EditAccountPage> {
Icons.email,
color: Colors.blue,
),
"Change Email".toText12(),
LocaleKeys.changeEmail.tr().toText12(),
InkWell(
child: ((AppState().getUser.data!.userInfo!.isEmailVerified ?? false) ? "Verified" : "Verify").toText12(),
onTap: (AppState().getUser.data!.userInfo!.isEmailVerified ?? false)
@ -89,7 +91,7 @@ class _EditAccountPageState extends State<EditAccountPage> {
navigateWithName(context, AppRoutes.changeEmailPage);
},
child: Text(
"Change",
LocaleKeys.change.tr(),
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w600,
@ -135,7 +137,8 @@ class _EditAccountPageState extends State<EditAccountPage> {
if (otpCompare.messageStatus == 1) {
AppState().getUser.data!.userInfo!.isEmailVerified = true;
setState(() {});
Utils.showToast("Email is verified successfully");
Utils.showToast(LocaleKeys.emailVerified.tr());
//("Email is verified successfully");
// Navigator.of(context).pushNamedAndRemoveUntil(AppRoutes.dashboard, (Route<dynamic> route) => false);
// showMDialog(
// context,

@ -8,6 +8,7 @@ import 'package:car_customer_app/config/constants.dart';
import 'package:car_customer_app/config/routes.dart';
import 'package:car_customer_app/extensions/int_extensions.dart';
import 'package:car_customer_app/extensions/string_extensions.dart';
import 'package:car_customer_app/generated/locale_keys.g.dart';
import 'package:car_customer_app/models/user/forget_password_otp_compare.dart';
import 'package:car_customer_app/utils/navigator.dart';
import 'package:car_customer_app/utils/utils.dart';
@ -15,6 +16,7 @@ import 'package:car_customer_app/widgets/app_bar.dart';
import 'package:car_customer_app/widgets/button/show_image_button.dart';
import 'package:car_customer_app/widgets/dialog/dialogs.dart';
import 'package:car_customer_app/widgets/dialog/otp_dialog.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
@ -34,14 +36,14 @@ class _ForgetPasswordMethodPageState extends State<ForgetPasswordMethodPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: appBar(title: "Forget Password"),
appBar: appBar(title: LocaleKeys.forgetPassword.tr()),
body: Container(
width: double.infinity,
height: double.infinity,
padding: EdgeInsets.all(40),
child: Column(
children: [
"Select Method".toText24(),
LocaleKeys.selectMethod.tr().toText24(),
12.height,
Row(
children: [

@ -4,6 +4,7 @@ import 'package:car_customer_app/api/shared_prefrence.dart';
import 'package:car_customer_app/classes/utils.dart';
import 'package:car_customer_app/config/constants.dart';
import 'package:car_customer_app/config/routes.dart';
import 'package:car_customer_app/generated/locale_keys.g.dart';
import 'package:car_customer_app/models/user/forget_password_otp_compare.dart';
import 'package:car_customer_app/models/user/forget_password_otp_request.dart';
import 'package:car_customer_app/pages/user/vertify_password_page.dart';
@ -19,6 +20,7 @@ import 'package:car_customer_app/extensions/string_extensions.dart';
import 'package:car_customer_app/extensions/int_extensions.dart';
import 'package:car_customer_app/extensions/widget_extensions.dart';
import 'package:car_customer_app/widgets/txt_field.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
import 'package:car_customer_app/models/user/user.dart';
@ -57,7 +59,7 @@ class _ForgetPasswordPageState extends State<ForgetPasswordPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: appBar(title: "Change Password"),
appBar: appBar(title: LocaleKeys.changePassword.tr()),
body: Container(
width: double.infinity,
height: double.infinity,
@ -73,7 +75,7 @@ class _ForgetPasswordPageState extends State<ForgetPasswordPage> {
},
),
50.height,
"Retrieve Password".toText24(),
LocaleKeys.retrievePassword.tr().toText24(),
12.height,
type == ClassType.NUMBER ? Column(children: [
getCountry(),
@ -83,9 +85,11 @@ class _ForgetPasswordPageState extends State<ForgetPasswordPage> {
onChanged: (v) {
userName = v;
},
keyboardType: TextInputType.number,
)
],) : TxtField(
hint: "Email Address",
hint: LocaleKeys.emailAddress.tr(),
//"Email Address",
value: userName,
onChanged: (v) {
userName = v;
@ -93,7 +97,7 @@ class _ForgetPasswordPageState extends State<ForgetPasswordPage> {
),
50.height,
ShowFillButton(
title: "Continue",
title: LocaleKeys.continu.tr(),
width: double.infinity,
onPressed: () {
if (userName.isNum() && type==ClassType.NUMBER) {

@ -6,6 +6,7 @@ import 'package:car_customer_app/classes/app_state.dart';
import 'package:car_customer_app/classes/utils.dart';
import 'package:car_customer_app/config/constants.dart';
import 'package:car_customer_app/config/routes.dart';
import 'package:car_customer_app/generated/locale_keys.g.dart';
import 'package:car_customer_app/models/user/login_password.dart';
import 'package:car_customer_app/models/user/register_user.dart';
import 'package:car_customer_app/models/user/user.dart';
@ -20,6 +21,7 @@ import 'package:car_customer_app/extensions/string_extensions.dart';
import 'package:car_customer_app/extensions/widget_extensions.dart';
import 'package:car_customer_app/widgets/dialog/otp_dialog.dart';
import 'package:car_customer_app/widgets/txt_field.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
@ -31,14 +33,14 @@ class LoginMethodSelectionPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: appBar(title: "Log In"),
appBar: appBar(title: LocaleKeys.login.tr()),
body: Container(
width: double.infinity,
height: double.infinity,
padding: EdgeInsets.all(40),
child: Column(
children: [
"Login Selection".toText24(),
LocaleKeys.loginSelection.tr().toText24(),
mFlex(2),
Row(
children: [
@ -57,7 +59,7 @@ class LoginMethodSelectionPage extends StatelessWidget {
onClick: () {
performBasicOtp(context);
},
title: 'Face Recognition',
title: 'Face Recognition ',
icon: icons + "ic_face_id.png",
),
),
@ -118,7 +120,8 @@ class LoginMethodSelectionPage extends StatelessWidget {
SharedPrefManager.setUserId(user.data!.userInfo!.userId ?? "");
navigateReplaceWithName(context, AppRoutes.dashboard);
}else{
Utils.showToast("Sorry, Only Customer's can log in this app");
Utils.showToast(LocaleKeys.onlyCustomerApp.tr());
//("Sorry, Only Customer's can log in this app");
}
} else {

@ -6,6 +6,7 @@ import 'package:car_customer_app/classes/app_state.dart';
import 'package:car_customer_app/classes/utils.dart';
import 'package:car_customer_app/config/constants.dart';
import 'package:car_customer_app/config/routes.dart';
import 'package:car_customer_app/generated/locale_keys.g.dart';
import 'package:car_customer_app/models/user/login_password.dart';
import 'package:car_customer_app/models/user/register_user.dart';
import 'package:car_customer_app/models/user/user.dart';
@ -20,6 +21,7 @@ import 'package:car_customer_app/extensions/string_extensions.dart';
import 'package:car_customer_app/extensions/widget_extensions.dart';
import 'package:car_customer_app/widgets/dialog/otp_dialog.dart';
import 'package:car_customer_app/widgets/txt_field.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
@ -86,14 +88,14 @@ class _LoginVerificationPageState extends State<LoginVerificationPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: appBar(title: "Log In"),
appBar: appBar(title: LocaleKeys.login.tr()),
body: Container(
width: double.infinity,
height: double.infinity,
padding: EdgeInsets.all(40),
child: Column(
children: [
"Verify Account".toText24(),
LocaleKeys.verifyAccount.tr().toText24(),
mFlex(2),
Row(
children: [

@ -2,6 +2,7 @@ import 'package:car_customer_app/api/client/user_api_client.dart';
import 'package:car_customer_app/classes/utils.dart';
import 'package:car_customer_app/config/constants.dart';
import 'package:car_customer_app/config/routes.dart';
import 'package:car_customer_app/generated/locale_keys.g.dart';
import 'package:car_customer_app/models/user/basic_otp.dart';
import 'package:car_customer_app/models/user/register_user.dart';
import 'package:car_customer_app/utils/navigator.dart';
@ -15,6 +16,7 @@ import 'package:car_customer_app/extensions/int_extensions.dart';
import 'package:car_customer_app/extensions/string_extensions.dart';
import 'package:car_customer_app/extensions/widget_extensions.dart';
import 'package:car_customer_app/widgets/txt_field.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
class LoginVerifyAccountPage extends StatelessWidget {
@ -24,14 +26,14 @@ class LoginVerifyAccountPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: appBar(title: "Log In"),
appBar: appBar(title: LocaleKeys.login.tr()),
body: Container(
width: double.infinity,
height: double.infinity,
padding: EdgeInsets.all(40),
child: Column(
children: [
"Verify Account".toText24(),
LocaleKeys.verifyAccount.tr().toText24(),
mFlex(1),
TxtField(
hint: "966501234567",
@ -125,7 +127,8 @@ class LoginVerifyAccountPage extends StatelessWidget {
showMDialog(
context,
child: MessageDialog(
title: "Phone Number Verified",
title: LocaleKeys.phoneNumberVerified.tr(),
//"Phone Number Verified",
onClick: () {
pop(context);
navigateWithName(context, AppRoutes.profile1,arguments: user);

@ -5,6 +5,7 @@ import 'package:car_customer_app/api/client/user_api_client.dart';
import 'package:car_customer_app/classes/utils.dart';
import 'package:car_customer_app/config/constants.dart';
import 'package:car_customer_app/config/routes.dart';
import 'package:car_customer_app/generated/locale_keys.g.dart';
import 'package:car_customer_app/models/user/basic_otp.dart';
import 'package:car_customer_app/models/user/login_password.dart';
import 'package:car_customer_app/models/user/register_user.dart';
@ -21,6 +22,7 @@ import 'package:car_customer_app/extensions/widget_extensions.dart';
import 'package:car_customer_app/widgets/show_fill_button.dart';
import 'package:car_customer_app/widgets/tab/login_email_tab.dart';
import 'package:car_customer_app/widgets/txt_field.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
@ -55,7 +57,7 @@ class _LoginWithPasswordState extends State<LoginWithPassword> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: appBar(title: "Log In"),
appBar: appBar(title: LocaleKeys.login.tr()),
body: Container(
width: double.infinity,
height: double.infinity,
@ -86,7 +88,7 @@ class _LoginWithPasswordState extends State<LoginWithPassword> {
),
6.height,
TxtField(
hint: "Enter Password?",
hint: LocaleKeys.EnterPass.tr(),
value: password,
isPasswordEnabled: true,
maxLines: 1,
@ -100,14 +102,14 @@ class _LoginWithPasswordState extends State<LoginWithPassword> {
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
"Forget Password?".toText12(color: Colors.blue).onPress(() {
LocaleKeys.forgetPass.tr().toText12(color: Colors.blue).onPress(() {
navigateWithName(context, AppRoutes.forgetPassword);
}),
],
),
50.height,
ShowFillButton(
title: "Log In",
title: LocaleKeys.login.tr(),
width: double.infinity,
onPressed: () {
performBasicOtp(context);

@ -2,6 +2,7 @@ import 'package:car_customer_app/api/api_client.dart';
import 'package:car_customer_app/api/client/user_api_client.dart';
import 'package:car_customer_app/classes/utils.dart';
import 'package:car_customer_app/config/routes.dart';
import 'package:car_customer_app/generated/locale_keys.g.dart';
import 'package:car_customer_app/models/user/basic_otp.dart';
import 'package:car_customer_app/models/user/country.dart';
import 'package:car_customer_app/models/user/register_user.dart';
@ -18,6 +19,7 @@ import 'package:car_customer_app/extensions/int_extensions.dart';
import 'package:car_customer_app/extensions/string_extensions.dart';
import 'package:car_customer_app/extensions/widget_extensions.dart';
import 'package:car_customer_app/widgets/txt_field.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
class RegisterPage extends StatelessWidget {
@ -27,14 +29,14 @@ class RegisterPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: appBar(title: "Sign Up"),
appBar: appBar(title: LocaleKeys.signUp.tr(),),
body: Container(
width: double.infinity,
height: double.infinity,
padding: EdgeInsets.all(40),
child: Column(
children: [
"Enter Phone Number".toText24(),
LocaleKeys.enterPhoneNumber.tr().toText24(),
// 12.height,
// FutureBuilder<Role>(
// future: UserApiClent().getRoles(),
@ -78,7 +80,7 @@ class RegisterPage extends StatelessWidget {
),
50.height,
ShowFillButton(
title: "Continue",
title: LocaleKeys.continu.tr(),
width: double.infinity,
onPressed: () {
if (validation()) performBasicOtp(context);
@ -117,13 +119,16 @@ class RegisterPage extends StatelessWidget {
bool validation() {
bool isValid = true;
if (role == -1) {
Utils.showToast("Please select Provider Role");
Utils.showToast(LocaleKeys.selectProviderRole.tr());
//("Please select Provider Role");
isValid = false;
} else if (countryCode.isEmpty) {
Utils.showToast("Please select Country Code");
Utils.showToast(LocaleKeys.selectCountryCode.tr());
//("Please select Country Code");
isValid = false;
} else if (phoneNum.isEmpty) {
Utils.showToast("Please add Phone No");
Utils.showToast(LocaleKeys.addPhoneNo.tr());
//("Please add Phone No");
isValid = false;
}
return isValid;

@ -1,4 +1,5 @@
import 'package:car_customer_app/config/routes.dart';
import 'package:car_customer_app/generated/locale_keys.g.dart';
import 'package:car_customer_app/utils/navigator.dart';
import 'package:car_customer_app/utils/utils.dart';
import 'package:car_customer_app/widgets/app_bar.dart';
@ -6,23 +7,24 @@ import 'package:car_customer_app/widgets/show_fill_button.dart';
import 'package:car_customer_app/extensions/string_extensions.dart';
import 'package:car_customer_app/extensions/int_extensions.dart';
import 'package:car_customer_app/extensions/widget_extensions.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
class RegisterSelectionPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: appBar(title: "Log In"),
appBar: appBar(title: LocaleKeys.login.tr()),
body: Container(
width: double.infinity,
height: double.infinity,
padding: EdgeInsets.all(40),
child: Column(
children: [
"Welcome Message".toText24(),
LocaleKeys.welcomeMessage.tr().toText24(),
mFlex(1),
ShowFillButton(
title: "Log In",
title: LocaleKeys.login.tr(),
// title: "Log In With Password",
width: double.infinity,
onPressed: () {
@ -39,7 +41,7 @@ class RegisterSelectionPage extends StatelessWidget {
// ),
20.height,
ShowFillButton(
title: "Sign Up",
title: LocaleKeys.signUp.tr(),
width: double.infinity,
onPressed: () {
navigateWithName(context, AppRoutes.register);
@ -47,7 +49,7 @@ class RegisterSelectionPage extends StatelessWidget {
),
20.height,
ShowFillButton(
title: "Forget Password",
title: LocaleKeys.forgetPassword.tr(),
width: double.infinity,
onPressed: () {
navigateWithName(context, AppRoutes.forgetPassword);

@ -2,9 +2,11 @@ import 'dart:async';
import 'package:car_customer_app/config/routes.dart';
import 'package:car_customer_app/extensions/string_extensions.dart';
import 'package:car_customer_app/generated/locale_keys.g.dart';
import 'package:car_customer_app/utils/navigator.dart';
import 'package:car_customer_app/utils/utils.dart';
import 'package:car_customer_app/extensions/widget_extensions.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
class SplashPage extends StatelessWidget {
@ -19,11 +21,11 @@ class SplashPage extends StatelessWidget {
mFlex(5),
"Logo".toText(fontSize: 45, isBold: true),
mFlex(3),
"First Time Log In".toText(fontSize: 18, isBold: true).onPress(() {
LocaleKeys.firstTimeLogIn.tr().toText(fontSize: 18, isBold: true).onPress(() {
navigateWithName(context, AppRoutes.registerSelection);
}),
mFlex(1),
"Already Signed Up and Logged In".toText(fontSize: 18, isBold: true).onPress(() {
LocaleKeys.alreadySigned.tr().toText(fontSize: 18, isBold: true).onPress(() {
navigateWithName(context, AppRoutes.loginVerification);
}),
mFlex(5),

@ -3,6 +3,7 @@
import 'package:car_customer_app/classes/utils.dart';
import 'package:car_customer_app/config/constants.dart';
import 'package:car_customer_app/config/routes.dart';
import 'package:car_customer_app/generated/locale_keys.g.dart';
import 'package:car_customer_app/models/user/forget_password_otp_compare.dart';
import 'package:car_customer_app/models/user/forget_password_otp_request.dart';
import 'package:car_customer_app/utils/navigator.dart';
@ -16,6 +17,7 @@ import 'package:car_customer_app/widgets/dialog/dialogs.dart';
import 'package:car_customer_app/widgets/dialog/message_dialog.dart';
import 'package:car_customer_app/widgets/dialog/otp_dialog.dart';
import 'package:car_customer_app/widgets/txt_field.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
@ -31,14 +33,14 @@ class VerifyPasswordPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: appBar(title: "Change Password"),
appBar: appBar(title: LocaleKeys.changePassword.tr()),
body: Container(
width: double.infinity,
height: double.infinity,
padding: EdgeInsets.all(40),
child: Column(
children: [
"Verify New Password".toText24(),
LocaleKeys.verifyNewPassword.tr().toText24(),
mFlex(1),
TxtField(
hint: "966500000000",
@ -62,7 +64,7 @@ class VerifyPasswordPage extends StatelessWidget {
(value) => showMDialog(
context,
child: MessageDialog(
title: "Phone Number Verified",
title: LocaleKeys.phoneNumberVerified.tr(),
onClick: () {
otpType=1;
navigateWithName(context, AppRoutes.confirmNewPasswordPage);
@ -91,7 +93,8 @@ class VerifyPasswordPage extends StatelessWidget {
(value) => showMDialog(
context,
child: MessageDialog(
title: "Phone Number Verified",
title: LocaleKeys.phoneNumberVerified.tr(),
//"Phone Number Verified ",
onClick: () {
otpType=2;
navigateWithName(context, AppRoutes.confirmNewPasswordPage);

@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
import 'colors.dart';
class AppTheme {
static getTheme() => ThemeData(
static getTheme(isArabic) => ThemeData(
// This is the theme of your application.
//
// Try running your application with "flutter run". You'll see the

@ -23,6 +23,7 @@ class TxtField extends StatelessWidget {
bool isNeedBorder;
bool? isPasswordEnabled;
Function(String)? onChanged;
TextInputType? keyboardType;
TxtField({
@ -42,6 +43,7 @@ class TxtField extends StatelessWidget {
this.isNeedBorder=true,
this.onChanged,
this.isPasswordEnabled,
this.keyboardType,
});
@override
@ -61,6 +63,7 @@ class TxtField extends StatelessWidget {
elevation: elevation,
margin: isSidePaddingZero?EdgeInsets.zero:null,
child: TextField(
keyboardType: TextInputType.number,
autofocus: false,
controller: controller,
enabled: isNeedClickAll == true ? false : true,

@ -72,7 +72,7 @@ packages:
source: hosted
version: "1.0.4"
easy_localization:
dependency: "direct dev"
dependency: "direct main"
description:
name: easy_localization
url: "https://pub.dartlang.org"

@ -35,6 +35,7 @@ dependencies:
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.2
image_picker: ^0.8.4+4
easy_localization: ^3.0.0
dev_dependencies:
flutter_test:
@ -49,7 +50,6 @@ dev_dependencies:
path_provider: ^2.0.4
injector: ^2.0.0
provider: ^6.0.0
easy_localization: ^3.0.0
http: ^0.13.3
permission_handler: ^9.2.0
flutter_svg: ^1.0.3

@ -0,0 +1,104 @@
{
"firstTimeLogIn": "تسجيل الدخول لأول مره",
"signUp": "تسجيل دخول",
"changeMobile": "تغيير رقم الجوال",
"notifications": "الاشعارات",
"general": "عام",
"defineLicences": "تحديد الرخص",
"dealershipSettings": "اعدادات البيع",
"changePassword": "تغيير كلمة المرور",
"retrievePassword" : "استرجاع كلمة المرور",
"changeEmail": "تغيير الايميل",
"verify": "تحقق",
"signOut": "تسجيل خروج",
"enterEmail": "ادخل الايميل",
"enterNewEmail": "ادخل ايميل جديد",
"enterCurrentPassword": "كلمة المرور الحاليه",
"enterNewPassword": "كلمة المرور الجديده",
"enterOldPassword": "كلمة المرور القديمه",
"confirm": "تأكيد",
"enterNewPhoneNumber": "رقم جوال جديد",
"completeProfile": "الملف الشخصي",
"continu": "استمرار",
"confirmPassword": "تأكيد كلمة المرور",
"createPassword": "انشاء كلمة مرور جديده",
"email": "ايميل",
"firstName": "الأسم الأول *",
"surname": "اسم العائله *",
"confirmPass": "تأكيد كلمة المرور *",
"createPass": "انشاء كلمة مرور جديده *",
"newPassword": " كلمة مرور جديده",
"forgetPassword": "نسيت كلمة المرور",
"editAccount": "تعديل الحساب",
"change": "تغيير",
"verifyAccount": "التحقق من الحساب",
"login" : "تسجيل دخول",
"welcomeMessage" : "مرحبا",
"forgetPass": "نسيت كلمة المرور ؟",
"enterPhoneNumber": "رقم جوال ",
"phoneNumberVerified": "تم التحقق من الجوال",
"verifyNewPassword": "التحقق من كلمة المرور",
"EnterPass": "ادخل كلمة المرور",
"alreadySigned": " تم تسجيل الدخول",
"emailChangedSuccessfully": "تم تغيير الايميل بنجاح",
"passwordIsUpdated" : "تم تحجيث كلمة المرور",
"passwordShouldContains" : "كلمة المرور يجب ان تحتوي على رمز رقم حرف كبير حرف صغير",
" successfullyRegistered": "تم التسجيل بنجاح",
"pleaseEnterSamePassword" : "ادخل كلمة مرور مطابقه",
"firstNameMandatory" : "ادخل الأسم الأول ",
"surnameNameMandatory" : "ادخل اسم العائله",
"passwordNameMandatory" : "ادخل كلمة المرور",
"enterValidEmail" : "ادخل ايميل صحيح",
"pleaseAcceptTerms" : "يجب الموافقه على الشروط",
"emailVerified" : "تم التحقق من الايميل بنجاح",
"selectMethod" : "اختر",
"emailAddress" : "ايميل",
"loginSelection" : "اختر",
"selectCountryCode" : "اختر رمز الدوله",
"selectProviderRole" : "اختر نوع الخدمه",
"addPhoneNo" : "اضف الهاتف",
"onlyCustomerApp": "نأسف هذا التطبيق فقط للعملاء",
"imageUploaded" : "تم تحميل الصوره",
"fileLarger" : "1KB حجم الملف اكبر من",
"account" : "الحساب",
"edit" : "تعديل",
"imageDeleted" : "تم حذف الصوره",
"dashboard" : "الصفحه الرئيسيه",
"termsOfService":"من خلال إنشاء حساب فإنك توافق على شروط الخدمة و\n سياسة الخصوصية",
"title": "Hello",
"msg": "Hello {} in the {} world ",
"msg_named": "{} are written in the {lang} language",
"clickMe": "Click me",
"profile": {
"reset_password": {
"label": "Reset Password",
"username": "Username",
"password": "password"
}
},
"clicked": {
"zero": "You clicked {} times!",
"one": "You clicked {} time!",
"two": "You clicked {} times!",
"few": "You clicked {} times!",
"many": "You clicked {} times!",
"other": "You clicked {} times!"
},
"amount": {
"zero": "Your amount : {} ",
"one": "Your amount : {} ",
"two": "Your amount : {} ",
"few": "Your amount : {} ",
"many": "Your amount : {} ",
"other": "Your amount : {} "
},
"gender": {
"male": "Hi man ;) ",
"female": "Hello girl :)",
"with_arg": {
"male": "Hi man ;) {}",
"female": "Hello girl :) {}"
}
},
"reset_locale": "Reset Language"
}

@ -1,4 +1,70 @@
{
"firstTimeLogIn" : "First Time Log In",
"signUp": "Sing Up",
"changeMobile": "Change Mobile",
"notifications": "Notifications",
"general": "General",
"defineLicences": "Define Licences",
"dealershipSettings": "Dealership Settings",
"changePassword": "Change Password",
"retrievePassword" : "Retrieve Password",
"changeEmail": "Change Email",
"verify": "Verify",
"signOut": "Sign Out",
"enterEmail": "Enter Email",
"enterNewEmail": "Enter New Email",
"enterNewPassword": "Enter New Password",
"enterCurrentPassword": "Enter Current Password",
"enterOldPassword": "Enter Old Password",
"confirm": "Confirm",
"completeProfile": "Complete Profile",
"enterNewPhoneNumber": "Enter New Phone Number",
"enterPhoneNumber": "Enter Phone Number",
"continu": "Continue",
"confirmPassword": "Confirm Password",
"createPassword": "Create Password",
"email": "Email",
"firstName": "First Name *",
"surname": "Surname *",
"confirmPass": "Confirm Password *",
"createPass": "Create Password *",
"newPassword": "New Password",
"forgetPassword": "Forget Password",
"editAccount": "Edit Account",
"change": "Change",
"verifyAccount": "Verify Account",
"login" : "Log In",
"welcomeMessage" : "Welcome Message",
"forgetPass": "Forget Password ?",
"phoneNumberVerified": "Phone Number Verified",
"verifyNewPassword": "Verify New Password",
"EnterPass": "Enter Password ?",
"alreadySigned": " Already Signed Up and Logged In",
"emailChangedSuccessfully": "Email is Changed Successfully",
"passwordIsUpdated" : "Password is Updated",
"passwordShouldContains" : "Password Should contains Character, Number, Capital and small letters,",
" successfullyRegistered": " Successfully Registered, Please login once,",
"pleaseEnterSamePassword" : "Please enter same password",
"firstNameMandatory" : "First name is mandatory",
"surnameNameMandatory" : "Surname is mandatory",
"passwordNameMandatory" : "Password is mandatory",
"enterValidEmail" : "Enter Valid Email",
"pleaseAcceptTerms" : "Please accept terms",
"emailVerified" : "Email is verified successfully",
"selectMethod" : "Select Method",
"emailAddress" : "Email Address",
"loginSelection" : "Login Selection",
"selectCountryCode" : "Please select Country Code",
"selectProviderRole" : "Please select Provider Role",
"addPhoneNo" : "Please add Phone No",
"onlyCustomerApp": "Sorry, Only Customer's can log in this app",
"imageUploaded" : "Image is uploaded",
"fileLarger" : "File is larger then 1KB",
"account" : "Account",
"edit" : "EDIT",
"imageDeleted" : "Image is Deleted",
"dashboard" : "Dashboard/Main Page",
"termsOfService":"By creating an account you agree to our Terms of Service and\n Privacy Policy",
"title": "Hello",
"msg": "Hello {} in the {} world ",
"msg_named": "{} are written in the {lang} language",

@ -1,38 +0,0 @@
{
"title": "Hello",
"msg": "Hello {} in the {} world ",
"msg_named": "{} are written in the {lang} language",
"clickMe": "Click me",
"profile": {
"reset_password": {
"label": "Reset Password",
"username": "Username",
"password": "password"
}
},
"clicked": {
"zero": "You clicked {} times!",
"one": "You clicked {} time!",
"two": "You clicked {} times!",
"few": "You clicked {} times!",
"many": "You clicked {} times!",
"other": "You clicked {} times!"
},
"amount": {
"zero": "Your amount : {} ",
"one": "Your amount : {} ",
"two": "Your amount : {} ",
"few": "Your amount : {} ",
"many": "Your amount : {} ",
"other": "Your amount : {} "
},
"gender": {
"male": "Hi man ;) ",
"female": "Hello girl :)",
"with_arg": {
"male": "Hi man ;) {}",
"female": "Hello girl :) {}"
}
},
"reset_locale": "Reset Language"
}
Loading…
Cancel
Save