Merge branch 'fatima' into mirza_dev

# Conflicts:
#	lib/pages/dashboard/dashboard_page.dart
#	lib/pages/settings/define_branch_page.dart
#	lib/pages/settings/define_license_page.dart
#	lib/pages/user/complete_profile_page.dart
#	lib/pages/user/edit_account_page.dart
#	lib/pages/user/forget_password_page.dart
#	lib/pages/user/login_with_password_page.dart
#	lib/pages/user/register_page.dart
mirza_dev
devmirza121 4 years ago
commit 4b8422617f

@ -1,3 +1,4 @@
import 'package:car_provider_app/models/post_params_model.dart';
import 'package:car_provider_app/models/user/user.dart';
class AppState {
@ -18,4 +19,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;
}
}

@ -11,7 +11,7 @@ class Utils {
static void showToast(String message) {
Fluttertoast.showToast(
msg: message, toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.BOTTOM, timeInSecForIosWeb: 1, backgroundColor: Colors.black54, textColor: Colors.white, fontSize: 16.0);
msg: message, toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.BOTTOM, timeInSecForIosWeb: 2, backgroundColor: Colors.black54, textColor: Colors.white, fontSize: 16.0);
}
static dynamic getNotNullValue(List<dynamic> list, int index) {

@ -77,7 +77,7 @@ extension EmailValidator on String {
}
bool isNum() {
return RegExp(r'[0-9]').hasMatch(this);
return RegExp(r'^[0-9]+$').hasMatch(this);
}
String toFormattedDate() {

@ -14,7 +14,101 @@ 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": "اضف الهاتف",
"onlyProviderApp": "نأسف هذا التطبيق فقط لمقدمي الخدمات",
"imageUploaded": "تم تحميل الصوره",
"fileLarger": "1KB حجم الملف اكبر من",
"account": "الحساب",
"edit": "تعديل",
"imageDeleted": "تم حذف الصوره",
"dashboard": "الصفحه الرئيسيه",
"pickAddress": "اختر العنوان",
"pickLocation": "اختر الموقع",
"save": "حفظ",
"defineServices": "تحديد الخدمات",
"selectBranch ": "اختر الفرع",
"selectServiceCategory": "اختر فئة الخدمة",
"defineBranches": "تحديد الفروع",
"defineProviders": "تحديد الموفرين",
"closeAccount": "اغلاق الحساب",
"createBranch": "انشاء فرع",
"address": "العنوان",
"branchDescription": "وصف الفرع",
"branchName": "اسم الفرع",
"chooseCity": "اختر المدينه",
"chooseCountry": "اختر الدوله",
"selectAttachment": "اختيار مرفق",
"somethingWrong": "هناك خطأ ما",
"documentsUploaded": "تم ارفاق الملف بنجاح",
"update": "تحديث",
"termsOfService": "من خلال إنشاء حساب فإنك توافق على شروط الخدمة و\n سياسة الخصوصية",
"branchInfo": "معلومات الفرع و الخدمات",
"profileCompleted": "الملف الشخصي مكتمل",
"selectLocationMap": "اختر الموقع",
"licensesAndCertifications": "الرخص و الشهادات",
"completeProfile1": "اكمل الملف الشخصي 1/3",
"completeProfile2": "اكمل الملف الشخصي 2/3",
"completeProfile3": "اكمل الملف الشخصي 3/3",
"userInformation": "User Information",
"provider": "Provider",
"title": "Hello",
"msg": "Hello {} in the {} world ",
"msg_named": "{} are written in the {lang} language",
@ -53,6 +147,100 @@ 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",
"pickAddress": "Pick Address",
"pickLocation": "Pick Location",
"save": "Save",
"defineServices": "Define Services",
"selectBranch ": "Select Branch ",
"selectServiceCategory": "Select Service Category",
"defineBranches": "Define Branches",
"defineProviders": "Define Providers",
"closeAccount": "Close Account",
"createBranch": "Create Branch",
"address": "Address",
"branchDescription": "Branch Description",
"branchName": "Branch Name",
"chooseCity": "Choose City",
"chooseCountry": "Choose Country",
"selectAttachment": "Select Attachment",
"somethingWrong": "Something went wrong",
"documentsUploaded": "Documents uploaded successfully",
"update": "Update",
"termsOfService": "By creating an account you agree to our Terms of Service and\n Privacy Policy",
"branchInfo": "Branch Info and Services",
"profileCompleted": "Profile Completed",
"selectLocationMap": "Select Location Map",
"licensesAndCertifications": "licenses & certifications",
"completeProfile1": "Complete Profile 1/3",
"completeProfile2": "Complete Profile 2/3",
"completeProfile3": "Complete Profile 3/3",
"userInformation": "User Information",
"provider": "Provider",
"title": "Hello",
"msg": "Hello {} in the {} world ",
"msg_named": "{} are written in the {lang} language",
@ -90,5 +278,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_provider_app/classes/app_state.dart';
import 'package:car_provider_app/config/app_provider.dart';
import 'package:car_provider_app/models/post_params_model.dart';
import 'package:car_provider_app/theme/app_theme.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
@ -13,16 +15,25 @@ 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(),
),
);
}
// 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 {
// This widget is the root of your application.
//This widget is the root of your application.
MyApp() {}
@override
@ -30,8 +41,11 @@ class MyApp extends StatelessWidget {
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,
@ -44,3 +58,26 @@ class MyApp extends StatelessWidget {
);
}
}
// class MyApp extends StatelessWidget {
// // This widget is the root of your application.
// MyApp() {}
//
// @override
// Widget build(BuildContext context) {
// return AppProvider(
// child: Sizer(
// builder: (context, orientation, deviceType) {
// return MaterialApp(
// theme: AppTheme.getTheme(),
// debugShowCheckedModeBanner: false,
// localizationsDelegates: context.localizationDelegates,
// supportedLocales: context.supportedLocales,
// locale: context.locale,
// initialRoute: AppRoutes.initialRoute,
// routes: AppRoutes.routes,
// );
// },
// ),
// );
// }
// }

@ -0,0 +1,36 @@
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,7 +1,9 @@
import 'dart:async';
import 'package:car_provider_app/generated/locale_keys.g.dart';
import 'package:car_provider_app/utils/navigator.dart';
import 'package:car_provider_app/widgets/show_fill_button.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
import 'package:geocoding/geocoding.dart';
import 'package:geolocator/geolocator.dart';
@ -54,7 +56,7 @@ class _PickLocationPageState extends State<PickLocationPage> {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Pick Location"),
title: Text(LocaleKeys.pickLocation.tr()),
),
body: Container(
child: Stack(
@ -91,7 +93,7 @@ class _PickLocationPageState extends State<PickLocationPage> {
child: Padding(
padding: const EdgeInsets.all(12.0),
child: ShowFillButton(
title: "Pick Address",
title: LocaleKeys.pickAddress.tr(),
onPressed: () {
widget.onPickAddress(latitude, longitude, _counter.value);
pop(context);

@ -1,5 +1,6 @@
import 'package:car_provider_app/api/client/branch_api_client.dart';
import 'package:car_provider_app/classes/utils.dart';
import 'package:car_provider_app/generated/locale_keys.g.dart';
import 'package:car_provider_app/models/m_response.dart';
import 'package:car_provider_app/models/profile/branch.dart';
import 'package:car_provider_app/models/profile/categroy.dart';
@ -7,6 +8,7 @@ import 'package:car_provider_app/models/profile/services.dart';
import 'package:car_provider_app/models/user/country.dart';
import 'package:car_provider_app/widgets/dropdown/dropdow_field.dart';
import 'package:car_provider_app/widgets/show_fill_button.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
import 'package:car_provider_app/extensions/int_extensions.dart';
import 'package:car_provider_app/extensions/string_extensions.dart';
@ -61,7 +63,7 @@ class _CreateServicesPageState extends State<CreateServicesPage> {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Define Services"),
title: Text(LocaleKeys.defineServices.tr()),
),
body: Container(
width: double.infinity,
@ -83,7 +85,7 @@ class _CreateServicesPageState extends State<CreateServicesPage> {
branchId = value.id;
fetchBrancheCategory();
});
}, list: countryDropList, hint: "Select Branch")
}, list: countryDropList, hint: LocaleKeys.selectBranch.tr())
: CircularProgressIndicator(),
12.height,
(category != null)
@ -95,7 +97,7 @@ class _CreateServicesPageState extends State<CreateServicesPage> {
categoryId = value.id;
fetchServices();
});
}, list: categoryDropList, hint: "Select Service Category")
}, list: categoryDropList, hint: LocaleKeys.selectServiceCategory.tr())
: branchId == -1
? Container()
: CircularProgressIndicator(),
@ -137,7 +139,7 @@ class _CreateServicesPageState extends State<CreateServicesPage> {
Padding(
padding: const EdgeInsets.all(12.0),
child: ShowFillButton(
title: "Save",
title: LocaleKeys.save.tr(),
width: double.infinity,
onPressed: () {
createService();

@ -1,6 +1,8 @@
import 'package:car_provider_app/config/routes.dart';
import 'package:car_provider_app/extensions/string_extensions.dart';
import 'package:car_provider_app/generated/locale_keys.g.dart';
import 'package:car_provider_app/utils/navigator.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
@ -9,7 +11,7 @@ class DealershipPage extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Dealership Setting"),
title: Text(LocaleKeys.dealershipSettings.tr()),
),
body: Container(
width: double.infinity,
@ -18,29 +20,29 @@ class DealershipPage extends StatelessWidget {
children: [
ListTile(
leading: SvgPicture.asset("assets/icons/ic_settings.svg"),
title: "General".toText12(),
title: LocaleKeys.general.tr().toText12(),
),
ListTile(
leading: SvgPicture.asset("assets/icons/ic_branchs.svg"),
title: "Define Branches".toText12(),
title: LocaleKeys.defineBranches.tr().toText12(),
onTap: () {
navigateWithName(context, AppRoutes.defineBranch);
},
),
ListTile(
leading: SvgPicture.asset("assets/icons/ic_services.svg"),
title: "Define Services".toText12(),
title: LocaleKeys.defineServices.tr().toText12(),
onTap: () {
navigateWithName(context, AppRoutes.createServices);
},
),
ListTile(
leading: SvgPicture.asset("assets/icons/ic_provider.svg"),
title: "Define Providers".toText12(),
title: LocaleKeys.defineProviders.tr().toText12(),
),
ListTile(
leading: SvgPicture.asset("assets/icons/ic_close_account.svg"),
title: "Close Account".toText12(),
title: LocaleKeys.closeAccount.tr().toText12(),
),
],
),

@ -4,6 +4,7 @@ import 'package:car_provider_app/classes/utils.dart';
import 'package:car_provider_app/config/routes.dart';
import 'package:car_provider_app/extensions/int_extensions.dart';
import 'package:car_provider_app/extensions/string_extensions.dart';
import 'package:car_provider_app/generated/locale_keys.g.dart';
import 'package:car_provider_app/models/user/change_email.dart';
import 'package:car_provider_app/models/user/confirm_email.dart';
import 'package:car_provider_app/utils/navigator.dart';
@ -12,6 +13,7 @@ import 'package:car_provider_app/widgets/dialog/dialogs.dart';
import 'package:car_provider_app/widgets/dialog/message_dialog.dart';
import 'package:car_provider_app/widgets/dialog/otp_dialog.dart';
import 'package:car_provider_app/widgets/show_fill_button.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
import 'dart:convert';
@ -97,7 +99,7 @@ class _ChangeEmailPageState extends State<ChangeEmailPage> {
showMDialog(
context,
child: MessageDialog(
title: "Email is Changed Successfully",
title: LocaleKeys.emailChangedSuccessfully.tr(),
onClick: () {
Navigator.of(context).pushNamedAndRemoveUntil(AppRoutes.loginWithPassword, (Route<dynamic> route) => false);
},

@ -4,6 +4,7 @@ import 'package:car_provider_app/classes/utils.dart';
import 'package:car_provider_app/config/routes.dart';
import 'package:car_provider_app/extensions/int_extensions.dart';
import 'package:car_provider_app/extensions/string_extensions.dart';
import 'package:car_provider_app/generated/locale_keys.g.dart';
import 'package:car_provider_app/models/user/change_mobile.dart';
import 'package:car_provider_app/models/user/confirm_mobile.dart';
import 'package:car_provider_app/utils/navigator.dart';
@ -12,6 +13,7 @@ import 'package:car_provider_app/widgets/dialog/dialogs.dart';
import 'package:car_provider_app/widgets/dialog/message_dialog.dart';
import 'package:car_provider_app/widgets/dialog/otp_dialog.dart';
import 'package:car_provider_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,11 @@ 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: LocaleKeys.enterNewPhoneNumber.tr(),
hintStyle: TextStyle(color: Colors.grey),
border: OutlineInputBorder(
borderRadius: const BorderRadius.all(
@ -57,7 +59,7 @@ class _ChangeMobilePageState extends State<ChangeMobilePage> {
12.height,
TextFormField(
decoration: InputDecoration(
hintText: "Enter Current Password",
hintText: LocaleKeys.enterCurrentPassword.tr(),
hintStyle: TextStyle(color: Colors.grey),
border: OutlineInputBorder(
borderRadius: const BorderRadius.all(
@ -70,7 +72,7 @@ class _ChangeMobilePageState extends State<ChangeMobilePage> {
),
40.height,
ShowFillButton(
title: "Confirm",
title: LocaleKeys.confirm.tr(),
width: double.infinity,
onPressed: () {
changeMobile(context);
@ -98,7 +100,7 @@ class _ChangeMobilePageState extends State<ChangeMobilePage> {
showMDialog(
context,
child: MessageDialog(
title: "Phone Number Verified",
title:LocaleKeys.phoneNumberVerified.tr(),
onClick: () {
Navigator.of(context).pushNamedAndRemoveUntil(AppRoutes.loginWithPassword, (Route<dynamic> route) => false);
},

@ -2,6 +2,7 @@ import 'package:car_provider_app/api/client/user_api_client.dart';
import 'package:car_provider_app/classes/utils.dart';
import 'package:car_provider_app/config/routes.dart';
import 'package:car_provider_app/generated/locale_keys.g.dart';
import 'package:car_provider_app/models/user/change_password.dart';
import 'package:car_provider_app/models/user/confirm_password.dart';
import 'package:car_provider_app/utils/navigator.dart';
@ -13,6 +14,7 @@ import 'package:car_provider_app/widgets/show_fill_button.dart';
import 'package:car_provider_app/extensions/string_extensions.dart';
import 'package:car_provider_app/extensions/int_extensions.dart';
import 'package:car_provider_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,11 @@ 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: LocaleKeys.enterOldPassword.tr(),
hintStyle: TextStyle(color: Colors.grey),
border: OutlineInputBorder(
borderRadius: const BorderRadius.all(
@ -60,7 +62,7 @@ class _ChangePasswordPageState extends State<ChangePasswordPage> {
12.height,
TextFormField(
decoration: InputDecoration(
hintText: "Enter New Password",
hintText: LocaleKeys.enterNewPassword.tr(),
hintStyle: TextStyle(color: Colors.grey),
border: OutlineInputBorder(
borderRadius: const BorderRadius.all(
@ -73,7 +75,7 @@ class _ChangePasswordPageState extends State<ChangePasswordPage> {
),
40.height,
ShowFillButton(
title: "Confirm",
title: LocaleKeys.confirm.tr(),
width: double.infinity,
onPressed: () {
changePassword(context);
@ -92,7 +94,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 +103,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_provider_app/api/client/user_api_client.dart';
import 'package:car_provider_app/classes/utils.dart';
import 'package:car_provider_app/config/routes.dart';
import 'package:car_provider_app/generated/locale_keys.g.dart';
import 'package:car_provider_app/models/m_response.dart';
import 'package:car_provider_app/models/user/basic_otp.dart';
import 'package:car_provider_app/models/user/register_user.dart';
@ -15,6 +16,7 @@ import 'package:car_provider_app/extensions/widget_extensions.dart';
import 'package:car_provider_app/extensions/int_extensions.dart';
import 'package:car_provider_app/extensions/string_extensions.dart';
import 'package:car_provider_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("Thank you for registration, your request submitted by admin for verification, for more information you can contact the 11223344");
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");
}
}
@ -199,13 +204,15 @@ class _CompleteProfilePageState extends State<CompleteProfilePage> {
} else if (lastName!.isEmpty) {
Utils.showToast("Surname is mandatory");
isValid = false;
} else if (email!.isNotEmpty) {
}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");
} else if (password!.isEmpty) {
Utils.showToast(LocaleKeys.passwordNameMandatory.tr());
//("Password is mandatory");
isValid = false;
} else if (!isChecked) {
Utils.showToast("Please accept terms");
@ -213,4 +220,5 @@ class _CompleteProfilePageState extends State<CompleteProfilePage> {
}
return isValid;
}
}

@ -2,6 +2,7 @@ import 'package:car_provider_app/api/client/user_api_client.dart';
import 'package:car_provider_app/classes/utils.dart';
import 'package:car_provider_app/config/routes.dart';
import 'package:car_provider_app/generated/locale_keys.g.dart';
import 'package:car_provider_app/models/user/confirm_password.dart';
import 'package:car_provider_app/utils/navigator.dart';
import 'package:car_provider_app/utils/utils.dart';
@ -12,6 +13,7 @@ import 'package:car_provider_app/widgets/show_fill_button.dart';
import 'package:car_provider_app/extensions/string_extensions.dart';
import 'package:car_provider_app/extensions/int_extensions.dart';
import 'package:car_provider_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,11 @@ class _ConfirmNewPasswordPageState extends State<ConfirmNewPasswordPage> {
padding: EdgeInsets.all(40),
child: Column(
children: [
"New Password".toText24(),
LocaleKeys.newPassword.tr().toText24(),
12.height,
TextFormField(
decoration: InputDecoration(
hintText: "Enter New Password",
hintText: LocaleKeys.enterNewPassword.tr(),
hintStyle: TextStyle(color: Colors.grey),
border: OutlineInputBorder(
borderRadius: const BorderRadius.all(
@ -59,7 +61,7 @@ class _ConfirmNewPasswordPageState extends State<ConfirmNewPasswordPage> {
12.height,
TextFormField(
decoration: InputDecoration(
hintText: "Confirm Password",
hintText: LocaleKeys.confirmPassword.tr(),
hintStyle: TextStyle(color: Colors.grey),
border: OutlineInputBorder(
borderRadius: const BorderRadius.all(
@ -72,7 +74,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 +94,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");
}
}

@ -8,6 +8,7 @@ import 'package:car_provider_app/config/constants.dart';
import 'package:car_provider_app/config/routes.dart';
import 'package:car_provider_app/extensions/int_extensions.dart';
import 'package:car_provider_app/extensions/string_extensions.dart';
import 'package:car_provider_app/generated/locale_keys.g.dart';
import 'package:car_provider_app/models/user/forget_password_otp_compare.dart';
import 'package:car_provider_app/utils/navigator.dart';
import 'package:car_provider_app/utils/utils.dart';
@ -15,6 +16,7 @@ import 'package:car_provider_app/widgets/app_bar.dart';
import 'package:car_provider_app/widgets/button/show_image_button.dart';
import 'package:car_provider_app/widgets/dialog/dialogs.dart';
import 'package:car_provider_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: [

@ -6,6 +6,7 @@ import 'package:car_provider_app/classes/app_state.dart';
import 'package:car_provider_app/classes/utils.dart';
import 'package:car_provider_app/config/constants.dart';
import 'package:car_provider_app/config/routes.dart';
import 'package:car_provider_app/generated/locale_keys.g.dart';
import 'package:car_provider_app/models/user/login_password.dart';
import 'package:car_provider_app/models/user/register_user.dart';
import 'package:car_provider_app/models/user/user.dart';
@ -20,6 +21,7 @@ import 'package:car_provider_app/extensions/string_extensions.dart';
import 'package:car_provider_app/extensions/widget_extensions.dart';
import 'package:car_provider_app/widgets/dialog/otp_dialog.dart';
import 'package:car_provider_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: [

@ -6,6 +6,7 @@ import 'package:car_provider_app/classes/app_state.dart';
import 'package:car_provider_app/classes/utils.dart';
import 'package:car_provider_app/config/constants.dart';
import 'package:car_provider_app/config/routes.dart';
import 'package:car_provider_app/generated/locale_keys.g.dart';
import 'package:car_provider_app/models/user/login_password.dart';
import 'package:car_provider_app/models/user/register_user.dart';
import 'package:car_provider_app/models/user/user.dart';
@ -20,6 +21,7 @@ import 'package:car_provider_app/extensions/string_extensions.dart';
import 'package:car_provider_app/extensions/widget_extensions.dart';
import 'package:car_provider_app/widgets/dialog/otp_dialog.dart';
import 'package:car_provider_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_provider_app/api/client/user_api_client.dart';
import 'package:car_provider_app/classes/utils.dart';
import 'package:car_provider_app/config/constants.dart';
import 'package:car_provider_app/config/routes.dart';
import 'package:car_provider_app/generated/locale_keys.g.dart';
import 'package:car_provider_app/models/user/basic_otp.dart';
import 'package:car_provider_app/models/user/register_user.dart';
import 'package:car_provider_app/utils/navigator.dart';
@ -15,6 +16,7 @@ import 'package:car_provider_app/extensions/int_extensions.dart';
import 'package:car_provider_app/extensions/string_extensions.dart';
import 'package:car_provider_app/extensions/widget_extensions.dart';
import 'package:car_provider_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,7 @@ class LoginVerifyAccountPage extends StatelessWidget {
showMDialog(
context,
child: MessageDialog(
title: "Phone Number Verified",
title: LocaleKeys.phoneNumberVerified.tr(),
onClick: () {
pop(context);
navigateWithName(context, AppRoutes.profile1,arguments: user);

@ -1,17 +1,19 @@
import 'package:car_provider_app/config/routes.dart';
import 'package:car_provider_app/generated/locale_keys.g.dart';
import 'package:car_provider_app/utils/navigator.dart';
import 'package:car_provider_app/widgets/app_bar.dart';
import 'package:car_provider_app/widgets/extensions/int_extensions.dart';
import 'package:car_provider_app/widgets/extensions/string_extensions.dart';
import 'package:car_provider_app/widgets/show_fill_button.dart';
import 'package:car_provider_app/widgets/txt_field.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
class Profile1Page 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,
@ -20,41 +22,41 @@ class Profile1Page extends StatelessWidget {
padding: EdgeInsets.all(40),
child: Column(
children: [
"Complete Profile 1/3".toText16(),
"User Information".toText14(),
LocaleKeys.completeProfile1.tr().toText16(),
LocaleKeys.userInformation.tr().toText14(),
12.height,
TxtField(
hint: "Provider",
hint: LocaleKeys.provider.tr(),
),
12.height,
TxtField(
hint: "First Name",
hint: LocaleKeys.firstName.tr(),
),
12.height,
TxtField(
hint: "Surname",
hint:LocaleKeys.surname.tr(),
),
12.height,
TxtField(
hint: "Email",
hint: LocaleKeys.email.tr(),
),
12.height,
TxtField(
hint: "Create Password",
hint: LocaleKeys.createPassword.tr(),
),
12.height,
TxtField(
hint: "Confirm Password",
hint:LocaleKeys.confirmPassword.tr(),
),
12.height,
TxtField(
hint: "Phone Number",
hint: LocaleKeys.enterPhoneNumber.tr(),
),
50.height,
"By creating an account you agree to our Terms of Service and Privacy Policy".toText14(),
LocaleKeys.termsOfService.tr().toText14(),
16.height,
ShowFillButton(
title: "Continue",
title: LocaleKeys.continu.tr(),
width: double.infinity,
onPressed: () {
navigateWithName(context, AppRoutes.profile2);

@ -1,4 +1,5 @@
import 'package:car_provider_app/config/routes.dart';
import 'package:car_provider_app/generated/locale_keys.g.dart';
import 'package:car_provider_app/utils/navigator.dart';
import 'package:car_provider_app/utils/utils.dart';
import 'package:car_provider_app/widgets/app_bar.dart';
@ -6,13 +7,14 @@ import 'package:car_provider_app/widgets/extensions/int_extensions.dart';
import 'package:car_provider_app/widgets/extensions/string_extensions.dart';
import 'package:car_provider_app/widgets/show_fill_button.dart';
import 'package:car_provider_app/widgets/txt_field.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
class Profile2Page 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,
@ -21,8 +23,8 @@ class Profile2Page extends StatelessWidget {
padding: EdgeInsets.all(40),
child: Column(
children: [
"Complete Profile 2/3".toText16(),
"licenses & certificatoins".toText14(),
LocaleKeys.completeProfile2.tr().toText16(),
LocaleKeys.licensesAndCertifications.tr().toText14(),
12.height,
TxtField(
hint: "Commercial Record N.O",
@ -44,7 +46,7 @@ class Profile2Page extends StatelessWidget {
),
30.height,
ShowFillButton(
title: "Save",
title: LocaleKeys.save.tr(),
width: double.infinity,
onPressed: () {
navigateWithName(context, AppRoutes.profile3);

@ -1,3 +1,4 @@
import 'package:car_provider_app/generated/locale_keys.g.dart';
import 'package:car_provider_app/widgets/app_bar.dart';
import 'package:car_provider_app/widgets/dialog/dialogs.dart';
import 'package:car_provider_app/widgets/dialog/message_dialog.dart';
@ -6,13 +7,14 @@ import 'package:car_provider_app/widgets/extensions/int_extensions.dart';
import 'package:car_provider_app/widgets/extensions/string_extensions.dart';
import 'package:car_provider_app/widgets/show_fill_button.dart';
import 'package:car_provider_app/widgets/txt_field.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
class Profile3Page 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,
@ -22,8 +24,8 @@ class Profile3Page extends StatelessWidget {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
"Complete Profile 3/3".toText16(),
"Branch Info and Services".toText14(),
LocaleKeys.completeProfile3.tr().toText16(),
LocaleKeys.branchInfo.tr().toText14(),
12.height,
// DropdownField(
// hint: "Country",
@ -34,21 +36,21 @@ class Profile3Page extends StatelessWidget {
// ),
12.height,
TxtField(
hint: "Address",
hint: LocaleKeys.address.tr(),
maxLines: 5,
),
12.height,
"Select Location Map".toText14(),
LocaleKeys.selectLocationMap.tr().toText14(),
12.height,
Image.asset("assets/images/bn_map.png"),
50.height,
ShowFillButton(
title: "Save",
title: LocaleKeys.save.tr(),
width: double.infinity,
onPressed: () {
showMDialog(context,
child: MessageDialog(
title: "Profile Completed",
title: LocaleKeys.profileCompleted.tr(),
));
},
),

@ -1,4 +1,5 @@
import 'package:car_provider_app/config/routes.dart';
import 'package:car_provider_app/generated/locale_keys.g.dart';
import 'package:car_provider_app/utils/navigator.dart';
import 'package:car_provider_app/utils/utils.dart';
import 'package:car_provider_app/widgets/app_bar.dart';
@ -6,23 +7,24 @@ import 'package:car_provider_app/widgets/show_fill_button.dart';
import 'package:car_provider_app/extensions/string_extensions.dart';
import 'package:car_provider_app/extensions/int_extensions.dart';
import 'package:car_provider_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_provider_app/config/routes.dart';
import 'package:car_provider_app/extensions/string_extensions.dart';
import 'package:car_provider_app/generated/locale_keys.g.dart';
import 'package:car_provider_app/utils/navigator.dart';
import 'package:car_provider_app/utils/utils.dart';
import 'package:car_provider_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_provider_app/classes/utils.dart';
import 'package:car_provider_app/config/constants.dart';
import 'package:car_provider_app/config/routes.dart';
import 'package:car_provider_app/generated/locale_keys.g.dart';
import 'package:car_provider_app/models/user/forget_password_otp_compare.dart';
import 'package:car_provider_app/models/user/forget_password_otp_request.dart';
import 'package:car_provider_app/utils/navigator.dart';
@ -16,6 +17,7 @@ import 'package:car_provider_app/widgets/dialog/dialogs.dart';
import 'package:car_provider_app/widgets/dialog/message_dialog.dart';
import 'package:car_provider_app/widgets/dialog/otp_dialog.dart';
import 'package:car_provider_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,7 @@ class VerifyPasswordPage extends StatelessWidget {
(value) => showMDialog(
context,
child: MessageDialog(
title: "Phone Number Verified",
title: LocaleKeys.phoneNumberVerified.tr(),
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
@ -62,6 +64,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,

@ -301,13 +301,6 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.11"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.3"
meta:
dependency: transitive
description:
@ -578,7 +571,7 @@ packages:
name: test_api
url: "https://pub.dartlang.org"
source: hosted
version: "0.4.8"
version: "0.4.3"
typed_data:
dependency: transitive
description:

@ -0,0 +1,132 @@
{
"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" : "اضف الهاتف",
"onlyProviderApp": "نأسف هذا التطبيق فقط لمقدمي الخدمات",
"imageUploaded" : "تم تحميل الصوره",
"fileLarger" : "1KB حجم الملف اكبر من",
"account" : "الحساب",
"edit" : "تعديل",
"imageDeleted" : "تم حذف الصوره",
"dashboard" : "الصفحه الرئيسيه",
"pickAddress" : "اختر العنوان",
"pickLocation" : "اختر الموقع",
"save" : "حفظ",
"defineServices" : "تحديد الخدمات",
"selectBranch " : "اختر الفرع",
"selectServiceCategory" : "اختر فئة الخدمة",
"defineBranches" : "تحديد الفروع",
"defineProviders":"تحديد الموفرين",
"closeAccount": "اغلاق الحساب",
"createBranch" : "انشاء فرع",
"address": "العنوان",
"branchDescription": "وصف الفرع",
"branchName": "اسم الفرع",
"chooseCity": "اختر المدينه",
"chooseCountry": "اختر الدوله",
"selectAttachment":"اختيار مرفق",
"somethingWrong" : "هناك خطأ ما",
"documentsUploaded" : "تم ارفاق الملف بنجاح",
"update": "تحديث",
"termsOfService":"من خلال إنشاء حساب فإنك توافق على شروط الخدمة و\n سياسة الخصوصية",
"branchInfo": "معلومات الفرع و الخدمات",
"profileCompleted": "الملف الشخصي مكتمل",
"selectLocationMap": "اختر الموقع",
"licensesAndCertifications" : "الرخص و الشهادات",
"completeProfile1" : "اكمل الملف الشخصي 1/3",
"completeProfile2" : "اكمل الملف الشخصي 2/3",
"completeProfile3" : "اكمل الملف الشخصي 3/3",
"userInformation": "معلومات المتسخدم",
"provider": "Provider",
"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,98 @@
{
"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",
"pickAddress" : "Pick Address",
"pickLocation" : "Pick Location",
"save" : "Save",
"defineServices" : "Define Services",
"selectBranch " : "Select Branch ",
"selectServiceCategory" : "Select Service Category",
"defineBranches" : "Define Branches",
"defineProviders":"Define Providers",
"closeAccount": "Close Account",
"createBranch" : "Create Branch",
"address": "Address",
"branchDescription": "Branch Description",
"branchName": "Branch Name",
"chooseCity": "Choose City",
"chooseCountry": "Choose Country",
"selectAttachment":"Select Attachment",
"somethingWrong" : "Something went wrong",
"documentsUploaded" : "Documents uploaded successfully",
"update": "Update",
"termsOfService":"By creating an account you agree to our Terms of Service and\n Privacy Policy",
"branchInfo": "Branch Info and Services",
"profileCompleted": "Profile is Completed",
"selectLocationMap": "Select Location Map",
"licensesAndCertifications" : "licenses & certifications",
"completeProfile1" : "Complete Profile 1/3",
"completeProfile2" : "Complete Profile 2/3",
"completeProfile3" : "Complete Profile 3/3",
"userInformation": "User Information",
"provider": "Provider",
"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