diff --git a/lib/classes/app_state.dart b/lib/classes/app_state.dart index 0b18a46..302f055 100644 --- a/lib/classes/app_state.dart +++ b/lib/classes/app_state.dart @@ -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 get postParamsJson => _postParams?.toJson() ?? {}; + void setPostParamsModel(PostParamsModel _postParams) { + this._postParams = _postParams; + } } diff --git a/lib/generated/codegen_loader.g.dart b/lib/generated/codegen_loader.g.dart index 1157a89..3e71d4c 100644 --- a/lib/generated/codegen_loader.g.dart +++ b/lib/generated/codegen_loader.g.dart @@ -14,7 +14,73 @@ class CodegenLoader extends AssetLoader{ return Future.value(mapLocales[locale.toString()]); } - static const Map en = { + static const Map 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 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 en_US = { }, "reset_locale": "Reset Language" }; -static const Map> mapLocales = {"en": en, "en_US": en_US}; +static const Map> mapLocales = {"ar_SA": ar_SA, "en_US": en_US}; } diff --git a/lib/main.dart b/lib/main.dart index fd4f325..5885a84 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -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 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, diff --git a/lib/models/post_params_model.dart b/lib/models/post_params_model.dart new file mode 100644 index 0000000..780210b --- /dev/null +++ b/lib/models/post_params_model.dart @@ -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 json) { + versionID = json['VersionID']; + channel = json['Channel']; + languageID = json['LanguageID']; + mobileType = json['MobileType']; + logInTokenID = json['LogInTokenID']; + tokenID = json['TokenID']; + } + + Map toJson() { + final Map data = new Map(); + 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; +} diff --git a/lib/pages/dashboard/dashboard_page.dart b/lib/pages/dashboard/dashboard_page.dart index fd052f2..239dc23 100644 --- a/lib/pages/dashboard/dashboard_page.dart +++ b/lib/pages/dashboard/dashboard_page.dart @@ -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 { 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 { 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 { ), ), ShowFillButton( - title: "EDIT", + title:LocaleKeys.edit.tr(), onPressed: () { navigateWithName(context, AppRoutes.editAccoundPage); }, @@ -155,19 +158,19 @@ class _DashboardPageState extends State { ), 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 { 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 { 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 { 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 { 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 ?? ""); diff --git a/lib/pages/user/change_email_page.dart b/lib/pages/user/change_email_page.dart index 27f4db0..c5a75f8 100644 --- a/lib/pages/user/change_email_page.dart +++ b/lib/pages/user/change_email_page.dart @@ -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 { @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 { 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 { 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 { ), 40.height, ShowFillButton( - title: "Confirm", + title: LocaleKeys.confirm.tr(), width: double.infinity, onPressed: () { changeEmail(context); @@ -97,7 +100,8 @@ class _ChangeEmailPageState extends State { 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 route) => false); }, diff --git a/lib/pages/user/change_mobile_page.dart b/lib/pages/user/change_mobile_page.dart index a2455f4..fcd6cc8 100644 --- a/lib/pages/user/change_mobile_page.dart +++ b/lib/pages/user/change_mobile_page.dart @@ -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 { @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 { 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 { 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 { ), 40.height, ShowFillButton( - title: "Confirm", + title: LocaleKeys.confirm.tr(), width: double.infinity, onPressed: () { changeMobile(context); @@ -98,7 +102,8 @@ class _ChangeMobilePageState extends State { showMDialog( context, child: MessageDialog( - title: "Phone Number Verified", + title:LocaleKeys.phoneNumberVerified.tr(), + //"Phone Number Verified", onClick: () { Navigator.of(context).pushNamedAndRemoveUntil(AppRoutes.loginWithPassword, (Route route) => false); }, diff --git a/lib/pages/user/change_password_page.dart b/lib/pages/user/change_password_page.dart index 18e8214..de4c973 100644 --- a/lib/pages/user/change_password_page.dart +++ b/lib/pages/user/change_password_page.dart @@ -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 { @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 { 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 { 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 { ), 40.height, ShowFillButton( - title: "Confirm", + title: LocaleKeys.confirm.tr(), width: double.infinity, onPressed: () { changePassword(context); @@ -92,7 +96,8 @@ class _ChangePasswordPageState extends State { 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 route) => false); @@ -100,7 +105,8 @@ class _ChangePasswordPageState extends State { 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"); } } diff --git a/lib/pages/user/complete_profile_page.dart b/lib/pages/user/complete_profile_page.dart index b5f7791..a968cbd 100644 --- a/lib/pages/user/complete_profile_page.dart +++ b/lib/pages/user/complete_profile_page.dart @@ -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 { @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 { 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 { ), 12.height, TxtField( - hint: "Surname *", + hint:LocaleKeys.surname.tr(), value: lastName, onChanged: (v) { lastName = v; @@ -68,17 +70,17 @@ class _CompleteProfilePageState extends State { ), 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 { ), 12.height, TxtField( - hint: "Confirm Password *", + hint: LocaleKeys.confirmPass.tr(), isPasswordEnabled: true, maxLines: 1, value: confirmPassword, @@ -104,12 +106,12 @@ class _CompleteProfilePageState extends State { 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 { 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 { 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; diff --git a/lib/pages/user/confirm_new_password.dart b/lib/pages/user/confirm_new_password.dart index 1231995..fc3fd1d 100644 --- a/lib/pages/user/confirm_new_password.dart +++ b/lib/pages/user/confirm_new_password.dart @@ -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); diff --git a/lib/pages/user/confirm_new_password_page.dart b/lib/pages/user/confirm_new_password_page.dart index 7d3cd0c..114c3a0 100644 --- a/lib/pages/user/confirm_new_password_page.dart +++ b/lib/pages/user/confirm_new_password_page.dart @@ -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 { @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 { 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 { 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 { ), 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 { 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"); } } diff --git a/lib/pages/user/edit_account_page.dart b/lib/pages/user/edit_account_page.dart index a44de2e..09b7688 100644 --- a/lib/pages/user/edit_account_page.dart +++ b/lib/pages/user/edit_account_page.dart @@ -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 { @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 { 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 { 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 { 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 { 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 { 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 route) => false); // showMDialog( // context, diff --git a/lib/pages/user/forget_password_method_page.dart b/lib/pages/user/forget_password_method_page.dart index 30e016c..44c1060 100644 --- a/lib/pages/user/forget_password_method_page.dart +++ b/lib/pages/user/forget_password_method_page.dart @@ -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 { @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: [ diff --git a/lib/pages/user/forget_password_page.dart b/lib/pages/user/forget_password_page.dart index 7ba7b77..b9aae8d 100644 --- a/lib/pages/user/forget_password_page.dart +++ b/lib/pages/user/forget_password_page.dart @@ -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 { @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 { }, ), 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 { 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 { ), 50.height, ShowFillButton( - title: "Continue", + title: LocaleKeys.continu.tr(), width: double.infinity, onPressed: () { if (userName.isNum() && type==ClassType.NUMBER) { diff --git a/lib/pages/user/login_method_selection_page.dart b/lib/pages/user/login_method_selection_page.dart index 5c74e6c..15c98f6 100644 --- a/lib/pages/user/login_method_selection_page.dart +++ b/lib/pages/user/login_method_selection_page.dart @@ -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 { diff --git a/lib/pages/user/login_verification_page.dart b/lib/pages/user/login_verification_page.dart index 0bee3ae..c60d3c1 100644 --- a/lib/pages/user/login_verification_page.dart +++ b/lib/pages/user/login_verification_page.dart @@ -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 { @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: [ diff --git a/lib/pages/user/login_verify_account_page.dart b/lib/pages/user/login_verify_account_page.dart index 26fbf49..b750cf7 100644 --- a/lib/pages/user/login_verify_account_page.dart +++ b/lib/pages/user/login_verify_account_page.dart @@ -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); diff --git a/lib/pages/user/login_with_password_page.dart b/lib/pages/user/login_with_password_page.dart index 448a2ea..b782639 100644 --- a/lib/pages/user/login_with_password_page.dart +++ b/lib/pages/user/login_with_password_page.dart @@ -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 { @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 { ), 6.height, TxtField( - hint: "Enter Password?", + hint: LocaleKeys.EnterPass.tr(), value: password, isPasswordEnabled: true, maxLines: 1, @@ -100,14 +102,14 @@ class _LoginWithPasswordState extends State { 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); diff --git a/lib/pages/user/register_page.dart b/lib/pages/user/register_page.dart index f8cc286..f8f7b60 100644 --- a/lib/pages/user/register_page.dart +++ b/lib/pages/user/register_page.dart @@ -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( // 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; diff --git a/lib/pages/user/register_selection_page.dart b/lib/pages/user/register_selection_page.dart index 523ceea..afbd7e7 100644 --- a/lib/pages/user/register_selection_page.dart +++ b/lib/pages/user/register_selection_page.dart @@ -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); diff --git a/lib/pages/user/splash_page.dart b/lib/pages/user/splash_page.dart index df80890..d80b8a6 100644 --- a/lib/pages/user/splash_page.dart +++ b/lib/pages/user/splash_page.dart @@ -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), diff --git a/lib/pages/user/vertify_password_page.dart b/lib/pages/user/vertify_password_page.dart index 1c34270..b5c33f4 100644 --- a/lib/pages/user/vertify_password_page.dart +++ b/lib/pages/user/vertify_password_page.dart @@ -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); diff --git a/lib/theme/app_theme.dart b/lib/theme/app_theme.dart index 5202825..cd246a3 100644 --- a/lib/theme/app_theme.dart +++ b/lib/theme/app_theme.dart @@ -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 diff --git a/lib/widgets/txt_field.dart b/lib/widgets/txt_field.dart index d9b1abf..bfb4dcf 100644 --- a/lib/widgets/txt_field.dart +++ b/lib/widgets/txt_field.dart @@ -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, diff --git a/pubspec.lock b/pubspec.lock index ae5a741..4d82bf8 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -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" diff --git a/pubspec.yaml b/pubspec.yaml index 90aaca8..e7691d2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -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 diff --git a/resources/langs/ar-SA.json b/resources/langs/ar-SA.json new file mode 100644 index 0000000..e7f646b --- /dev/null +++ b/resources/langs/ar-SA.json @@ -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" +} \ No newline at end of file diff --git a/resources/langs/en-US.json b/resources/langs/en-US.json index c9f87fc..c2ec9ec 100644 --- a/resources/langs/en-US.json +++ b/resources/langs/en-US.json @@ -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", diff --git a/resources/langs/en.json b/resources/langs/en.json deleted file mode 100644 index c9f87fc..0000000 --- a/resources/langs/en.json +++ /dev/null @@ -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" -} \ No newline at end of file