Merge branch 'mirza_development' into 'master'

Mirza development

See merge request mirza.shafique/car_common_app!4
merge-requests/5/merge
Mirza Shafique 2 years ago
commit 877907832d

@ -7,7 +7,7 @@
"defineLicences": "تحديد الرخص",
"dealershipSettings": "اعدادات البيع",
"changePassword": "تغيير كلمة المرور",
"retrievePassword" : "استرجاع كلمة المرور",
"retrievePassword": "استرجاع كلمة المرور",
"changeEmail": "تغيير الايميل",
"verify": "تحقق",
"verified": "تم التحقق",
@ -34,8 +34,8 @@
"editAccount": "تعديل الحساب",
"change": "تغيير",
"verifyAccount": "التحقق من الحساب",
"login" : "تسجيل دخول",
"welcomeMessage" : "مرحبا",
"login": "تسجيل دخول",
"welcomeMessage": "مرحبا",
"forgetPass": "نسيت كلمة المرور ؟",
"enterPhoneNumber": "رقم جوال ",
"phoneNumberVerified": "تم التحقق من الجوال",
@ -43,37 +43,37 @@
"EnterPass": "ادخل كلمة المرور",
"alreadySigned": " تم تسجيل الدخول",
"emailChangedSuccessfully": "تم تغيير الايميل بنجاح",
"passwordIsUpdated" : "تم تحجيث كلمة المرور",
"passwordShouldContains" : "كلمة المرور يجب ان تحتوي على رمز رقم حرف كبير حرف صغير",
"passwordIsUpdated": "تم تحجيث كلمة المرور",
"passwordShouldContains": "كلمة المرور يجب ان تحتوي على رمز رقم حرف كبير حرف صغير",
" successfullyRegistered": "تم التسجيل بنجاح",
"pleaseEnterSamePassword" : "ادخل كلمة مرور مطابقه",
"firstNameMandatory" : "ادخل الأسم الأول ",
"surnameNameMandatory" : "ادخل اسم العائله",
"passwordNameMandatory" : "ادخل كلمة المرور",
"enterValidEmail" : "ادخل ايميل صحيح",
"pleaseAcceptTerms" : "يجب الموافقه على الشروط",
"emailVerified" : "تم التحقق من الايميل بنجاح",
"selectMethod" : "اختر",
"emailAddress" : "ايميل",
"loginSelection" : "اختر",
"selectCountryCode" : "اختر رمز الدوله",
"selectProviderRole" : "اختر نوع الخدمه",
"addPhoneNo" : "اضف الهاتف",
"pleaseEnterSamePassword": "ادخل كلمة مرور مطابقه",
"firstNameMandatory": "ادخل الأسم الأول ",
"surnameNameMandatory": "ادخل اسم العائله",
"passwordNameMandatory": "ادخل كلمة المرور",
"enterValidEmail": "ادخل ايميل صحيح",
"pleaseAcceptTerms": "يجب الموافقه على الشروط",
"emailVerified": "تم التحقق من الايميل بنجاح",
"selectMethod": "اختر",
"emailAddress": "ايميل",
"loginSelection": "اختر",
"selectCountryCode": "اختر رمز الدوله",
"selectProviderRole": "اختر نوع الخدمه",
"addPhoneNo": "اضف الهاتف",
"onlyCustomerApp": "نأسف هذا التطبيق فقط للعملاء",
"imageUploaded" : "تم تحميل الصوره",
"fileLarger" : "1KB حجم الملف اكبر من",
"account" : "الحساب",
"edit" : "تعديل",
"imageDeleted" : "تم حذف الصوره",
"dashboard" : "الصفحه الرئيسيه",
"termsOfService":"من خلال إنشاء حساب فإنك توافق على",
"imageUploaded": "تم تحميل الصوره",
"fileLarger": "1KB حجم الملف اكبر من",
"account": "الحساب",
"edit": "تعديل",
"imageDeleted": "تم حذف الصوره",
"dashboard": "الصفحه الرئيسيه",
"termsOfService": "من خلال إنشاء حساب فإنك توافق على",
"userInformation": "معلومات المتسخدم",
"faceRecognition": "تحقق مع بصمة الوجه",
"fingerPrint" : "تحقق مع بصمة الاصبع",
"fingerPrint": "تحقق مع بصمة الاصبع",
"whatsapp": "تحقق مع Whatsapp",
"SMS": "رسائل قصيره",
"selectRole" : "حدد الدور",
"userRoleOrTitle" : "عنوان المستخدم",
"selectRole": "حدد الدور",
"userRoleOrTitle": "عنوان المستخدم",
"codeSentToEmail": "تم ارسال الرمز للايميل",
"number": "موبايل",
"english": "English",
@ -134,18 +134,35 @@
"resend_code": "أعد إرسال الرمز",
"check_code": "التحقق من الشفرة",
"time_will_expire": "إعادة إرسال الرمز بتنسيق",
"sec" : "ثانية",
"sec": "ثانية",
"providers": "الموفرون",
"appointments": "تعيينات",
"home": "بيت",
"ads": "إعلانات",
"settings": "إعدادات",
"view_all": "مشاهدة الكل",
"my_active_Ads" : "إعلاناتي النشطة",
"my_active_Ads": "إعلاناتي النشطة",
"recommended_ads": "الإعلانات الموصى بها",
"upcoming_appointment": "الموعد القادم",
"my_service_providers": "مزودي الخدمة الجدد",
"appointment_details": "تفاصيل الموعد",
"no_city_available": "لا توجد مدينة متاحة لهذا البلد",
"branch_created": "تم إنشاء الفرع بنجاح",
"branch_updated": "تم تحديث الفرع بنجاح",
"branch_deleted": "تم حذف الفرع بنجاح",
"dashboard_main": "لوحة القيادة / الصفحة الرئيسية",
"logo_brand": "الشعار / العلامة التجارية",
"remove": "إزالة",
"no_branch": "لم يتم إضافة فرع حتى الآن",
"login_once": "الرجاء تسجيل الدخول مرة واحدة",
"defineLicenese": "تحميل التراخيص والشهادات",
"description": "وصف",
"attachFile": "أرفق ملف",
"branchLocation": "معلومات الفرع والموقع",
"tapToEdit": "انقر للتعديل",
"myServiceBranches": "فروع خدمتي",
"enter_licence_detail": "الرجاء إدخال تفاصيل السجلات التجارية وإرفاق صور الترخيص",
"country": "بلد",
"city": "مدينة",
"editServices": "تحرير الخدمات"
}

@ -145,5 +145,24 @@
"recommended_ads": "Recommended Ads",
"upcoming_appointment": "Upcoming Appointment",
"my_service_providers": "My Recent Service Providers",
"appointment_details": "Appointment Details"
"appointment_details": "Appointment Details",
"no_city_available": "No City Available for this country",
"branch_created": "Branch is successfully created",
"branch_updated": "Branch is successfully Updated",
"branch_deleted": "Branch is successfully Deleted",
"dashboard_main": "Dashboard/Main Page",
"logo_brand": "Logo/Brand",
"remove": "Remove",
"no_branch": "No Branch Added Yet",
"login_once": "Please login once",
"defineLicenese": "Upload Licenses and Certificates",
"description": "Description",
"attachFile": "Attach File",
"branchLocation": "Branch info and Location",
"tapToEdit": "Tap to edit",
"myServiceBranches": "My Service Branches",
"enter_licence_detail": "Please enter the detail for commercial records and attach the license images",
"country": "country",
"city": "city",
"editServices": "Edit Services"
}

@ -65,6 +65,10 @@ class GlobalConsts {
class MyAssets {
//Banner
static String carBanner = "assets/images/bn_car.jpeg";
//NavBar Icons
static String homeIcon = "assets/icons/home_icon.svg";
static String announcementIcon = "assets/icons/anouncement_icon.svg";

@ -21,6 +21,7 @@ import 'package:mc_common_app/views/user/login_with_password_page.dart';
// import 'package:mc_common_app/views/user/profile/profile_2_page.dart';
// import 'package:mc_common_app/views/user/profile/profile_3_page.dart';
import 'package:mc_common_app/views/user/register_page.dart';
import 'package:mc_common_app/views/user/register_provider_page.dart';
import 'package:mc_common_app/views/user/register_selection_page.dart';
import 'package:mc_common_app/views/splash/splash_page.dart';
import 'package:mc_common_app/views/user/vertify_password_page.dart';
@ -31,7 +32,8 @@ class AppRoutes {
static const String splash = "/splash";
static const String registerSelection = "/registerSelection";
static const String loginVerifyAccount = "/loginVerifyAccount";
static const String register = "/register";
static const String registerCustomer = "/registerCustomer";
static const String registerProvider= "/registerProvider";
static const String forgetPassword = "/forgetPassword";
static const String loginVerification = "/loginVerification";
static const String loginWithPassword = "/loginWithPassword";
@ -59,7 +61,8 @@ class AppRoutes {
splash: (context) => const SplashPage(),
registerSelection: (context) => RegisterSelectionPage(),
loginVerifyAccount: (context) => LoginVerifyAccountPage(),
register: (context) => RegisterPage(),
registerCustomer: (context) => RegisterCustomerPage(),
registerProvider: (context) => RegisterProviderPage(),
forgetPassword: (context) => ForgetPasswordPage(),
loginVerification: (context) => const LoginVerificationPage(),
loginWithPassword: (context) => LoginWithPassword(),

@ -1,6 +1,5 @@
import 'dart:convert';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart';
@ -24,6 +23,7 @@ import 'package:mc_common_app/models/user/register_user.dart';
import 'package:mc_common_app/models/user/user.dart';
import 'package:mc_common_app/models/user/verify_email.dart';
import 'package:mc_common_app/repositories/user_repo.dart';
import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/utils/shared_prefrence.dart';
import 'package:mc_common_app/utils/utils.dart';
@ -143,14 +143,14 @@ class UserVM extends BaseVM {
}
Future<void> performCompleteProfile(
BuildContext context, {
required String password,
required String confirmPassword,
required String firstName,
required String lastName,
required String email,
required String? userId,
}) async {
BuildContext context, {
required String password,
required String confirmPassword,
required String firstName,
required String lastName,
required String email,
required String? userId,
}) async {
if (Utils.passwordValidateStructure(password)) {
if (password == confirmPassword) {
Utils.showLoading(context);
@ -320,7 +320,7 @@ class UserVM extends BaseVM {
}
}
Future<void> performBasicOtpLoginSelectionPage(BuildContext context, {required String userToken}) async {
Future<void> performBasicOtpLoginSelectionPage(BuildContext context, {required String userToken, required AppType appType}) async {
Utils.showLoading(context);
LoginPasswordRespModel user = await userRepo.loginV2OTP(userToken, "1");
Utils.hideLoading(context);
@ -334,16 +334,30 @@ class UserVM extends BaseVM {
RegisterUserRespModel verifiedUser = RegisterUserRespModel.fromJson(jsonDecode(response2.body));
if (verifiedUser.messageStatus == 1) {
User user = User.fromJson(jsonDecode(response2.body));
if (user.data!.userInfo!.roleId == 4) {
AppState().setUser = user;
SharedPrefManager.setUserToken(user.data!.accessToken ?? "");
SharedPrefManager.setUserId(user.data!.userInfo!.userId ?? "");
SharedPrefManager.setRefreshToken(user.data!.refreshToken ?? "");
SharedPrefManager.setData(jsonEncode(user.data!.userInfo!.toJson()));
navigateReplaceWithName(context, AppRoutes.dashboard);
} else {
Utils.showToast
("Sorry, Only Customer's can log in this app");
if (appType == AppType.provider) {
if (user.data!.userInfo!.roleId == 5 || user.data!.userInfo!.roleId == 6) {
AppState().setUser = user;
SharedPrefManager.setUserToken(user.data!.accessToken ?? "");
SharedPrefManager.setUserId(user.data!.userInfo!.userId ?? "");
SharedPrefManager.setRefreshToken(user.data!.refreshToken ?? "");
SharedPrefManager.setData(jsonEncode(user.data!.userInfo!.toJson()));
navigateReplaceWithName(context, AppRoutes.dashboard);
} else {
Utils.showToast("LocaleKeys.onlyProviderApp.tr()");
//("Sorry, Only Customer's can log in this app");
}
} else if (user.data!.userInfo!.roleId == 4) {
if (user.data!.userInfo!.roleId == 4) {
AppState().setUser = user;
SharedPrefManager.setUserToken(user.data!.accessToken ?? "");
SharedPrefManager.setUserId(user.data!.userInfo!.userId ?? "");
SharedPrefManager.setRefreshToken(user.data!.refreshToken ?? "");
SharedPrefManager.setData(jsonEncode(user.data!.userInfo!.toJson()));
navigateReplaceWithName(context, AppRoutes.dashboard);
} else {
Utils.showToast("Sorry, Only Customer's can log in this app");
}
}
} else {
Utils.showToast(verifiedUser.message ?? "");

@ -18,6 +18,7 @@ class LoginMethodSelectionPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
UserVM userVM = context.read<UserVM>();
return Scaffold(
appBar: CustomAppBar( isRemoveBackButton: true, title: LocaleKeys.log_in.tr()),
body: Container(
@ -36,7 +37,7 @@ class LoginMethodSelectionPage extends StatelessWidget {
Expanded(
child: ShowImageButton(
onClick: () {
userVM.performBasicOtpLoginSelectionPage(context, userToken: userToken);
userVM.performBasicOtpLoginSelectionPage(context, userToken: userToken,appType: userVM.currentAppType);
},
title: LocaleKeys.fingerPrint.tr(),
icon: icons + "ic_fingerprint.svg",
@ -46,7 +47,7 @@ class LoginMethodSelectionPage extends StatelessWidget {
Expanded(
child: ShowImageButton(
onClick: () {
userVM.performBasicOtpLoginSelectionPage(context, userToken: userToken);
userVM.performBasicOtpLoginSelectionPage(context, userToken: userToken,appType: userVM.currentAppType);
},
title: LocaleKeys.faceRecognition.tr(),
icon: icons + "ic_face.svg",
@ -60,7 +61,7 @@ class LoginMethodSelectionPage extends StatelessWidget {
Expanded(
child: ShowImageButton(
onClick: () {
userVM.performBasicOtpLoginSelectionPage(context, userToken: userToken);
userVM.performBasicOtpLoginSelectionPage(context, userToken: userToken,appType: userVM.currentAppType);
},
title: LocaleKeys.SMS.tr(),
icon: icons + "ic_sms.svg",
@ -71,7 +72,7 @@ class LoginMethodSelectionPage extends StatelessWidget {
child: ShowImageButton(
onClick: () {
// navigateWithName(context, AppRoutes.dashboard);
userVM.performBasicOtpLoginSelectionPage(context, userToken: userToken);
userVM.performBasicOtpLoginSelectionPage(context, userToken: userToken,appType: userVM.currentAppType);
},
title: LocaleKeys.whatsapp.tr(),
icon: icons + "ic_whatsapp.svg",

@ -12,14 +12,14 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../theme/colors.dart';
class RegisterPage extends StatefulWidget {
const RegisterPage({Key? key}) : super(key: key);
class RegisterCustomerPage extends StatefulWidget {
const RegisterCustomerPage({Key? key}) : super(key: key);
@override
State<RegisterPage> createState() => _RegisterPageState();
State<RegisterCustomerPage> createState() => _RegisterPageState();
}
class _RegisterPageState extends State<RegisterPage> {
class _RegisterPageState extends State<RegisterCustomerPage> {
String phoneNum = "", countryCode = "";
int role = 4, countryId = -1;

@ -18,14 +18,14 @@ import 'package:mc_common_app/widgets/tab/role_type_tab.dart';
import 'package:provider/provider.dart';
import '../../theme/colors.dart';
class RegisterPage extends StatefulWidget {
const RegisterPage({Key? key}) : super(key: key);
class RegisterProviderPage extends StatefulWidget {
const RegisterProviderPage({Key? key}) : super(key: key);
@override
State<RegisterPage> createState() => _RegisterPageState();
State<RegisterProviderPage> createState() => _RegisterPageState();
}
class _RegisterPageState extends State<RegisterPage> {
class _RegisterPageState extends State<RegisterProviderPage> {
String phoneNum = "", countryCode = "";
int role = -1, countryId = -1;

@ -2,12 +2,15 @@ import 'package:mc_common_app/config/routes.dart';
import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/generated/locale_keys.g.dart';
import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/utils/utils.dart';
import 'package:mc_common_app/view_models/user_view_model.dart';
import 'package:mc_common_app/widgets/show_fill_button.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:provider/provider.dart';
import '../../theme/colors.dart';
@ -16,6 +19,7 @@ class RegisterSelectionPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
UserVM userVM = Provider.of(context, listen: false);
return Scaffold(
body: Container(
width: double.infinity,
@ -57,7 +61,11 @@ class RegisterSelectionPage extends StatelessWidget {
isFlatButton: true,
txtColor: Colors.black,
onPressed: () {
navigateWithName(context, AppRoutes.register);
if (userVM.currentAppType == AppType.customer) {
navigateWithName(context, AppRoutes.registerCustomer);
} else {
navigateWithName(context, AppRoutes.registerProvider);
}
},
),
10.height,

@ -71,6 +71,7 @@ class CustomAppBar extends StatelessWidget with PreferredSizeWidget {
final bool isRemoveBackButton;
final String profileImageUrl;
final bool isDrawerEnabled;
final VoidCallback? onTap;
const CustomAppBar({
Key? key,
@ -84,6 +85,7 @@ class CustomAppBar extends StatelessWidget with PreferredSizeWidget {
this.elevation,
this.isTitleCenter,
this.titleColor,
this.onTap,
}) : super(key: key);
@override
@ -94,18 +96,21 @@ class CustomAppBar extends StatelessWidget with PreferredSizeWidget {
elevation: elevation ?? 0,
centerTitle: isTitleCenter ?? true,
leading: isDrawerEnabled
? Row(
children: [
Image.asset(
profileImageUrl,
width: 34,
height: 34,
fit: BoxFit.fill,
).toCircle(borderRadius: 100),
10.width,
SvgPicture.asset(MyAssets.dashboardDrawerIcon),
],
).paddingOnly(left: 21)
? InkWell(
onTap: onTap,
child: Row(
children: [
Image.asset(
profileImageUrl,
width: 34,
height: 34,
fit: BoxFit.fill,
).toCircle(borderRadius: 100),
10.width,
SvgPicture.asset(MyAssets.dashboardDrawerIcon),
],
).paddingOnly(left: 21),
)
: isRemoveBackButton
? null
: IconButton(
@ -121,5 +126,5 @@ class CustomAppBar extends StatelessWidget with PreferredSizeWidget {
}
@override
Size get preferredSize => const Size.fromHeight(80);
Size get preferredSize => const Size.fromHeight(55);
}

Loading…
Cancel
Save