Issues Fixed

aamir_dev
Faiz Hashmi 2 years ago
parent b18b57ca93
commit c99878f04a

@ -491,8 +491,7 @@
"submitAd": "إرسال الإعلان", "submitAd": "إرسال الإعلان",
"selectAdType": "اختر نوع الإعلان", "selectAdType": "اختر نوع الإعلان",
"validUntilSubscriptionExpiration": "صالح حتى انتهاء الاشتراك", "validUntilSubscriptionExpiration": "صالح حتى انتهاء الاشتراك",
"adsRemainingVar": "الإعلانات المتبقية", "youLeftAdsGivenSubscription": "لقد تركت مع إعلانات محدودة الواردة في الاشتراك.",
"youLeftAdsGivenSubscription": "لقد بقي لديك 05 من 50 إعلانًا في الاشتراك.",
"updateSubscription": "تحديث الاشتراك", "updateSubscription": "تحديث الاشتراك",
"workInProgress": "العمل جارٍ", "workInProgress": "العمل جارٍ",
"visitCompleted": "تمت الزيارة", "visitCompleted": "تمت الزيارة",
@ -679,5 +678,7 @@
"inviteFriendsByWhatsApp": "دعوة الأصدقاء عبر واتساب", "inviteFriendsByWhatsApp": "دعوة الأصدقاء عبر واتساب",
"inviteFriendsByEmail": "دعوة الأصدقاء عبر البريد الإلكتروني", "inviteFriendsByEmail": "دعوة الأصدقاء عبر البريد الإلكتروني",
"noFAQsToShow": "لا توجد أسئلة شائعة في الوقت الحالي. يرجى الاتصال بنا إذا كان لديك أي استفسار.", "noFAQsToShow": "لا توجد أسئلة شائعة في الوقت الحالي. يرجى الاتصال بنا إذا كان لديك أي استفسار.",
"appInfo": "معلومات التطبيق" "appInfo": "معلومات التطبيق",
"users": "المستخدمين",
"adsRemaining": "الإعلانات المتبقية"
} }

@ -492,8 +492,7 @@
"submitAd": "Submit Ad", "submitAd": "Submit Ad",
"selectAdType": "Select Ad Type", "selectAdType": "Select Ad Type",
"validUntilSubscriptionExpiration": "Valid Until Subscription Expiration", "validUntilSubscriptionExpiration": "Valid Until Subscription Expiration",
"adsRemainingVar ": "Ads Remaining", "youLeftAdsGivenSubscription": "You have left with limited ads given in the subscription.",
"youLeftAdsGivenSubscription": "You have left with 05 out of 50 ads given in the subscription.",
"updateSubscription": "Update Subscription", "updateSubscription": "Update Subscription",
"workInProgress": "Work In Progress", "workInProgress": "Work In Progress",
"visitCompleted": "Visit Completed", "visitCompleted": "Visit Completed",
@ -677,5 +676,7 @@
"inviteFriendsByWhatsApp": "Invite Friends By WhatsApp", "inviteFriendsByWhatsApp": "Invite Friends By WhatsApp",
"inviteFriendsByEmail": "Invite Friends By Email", "inviteFriendsByEmail": "Invite Friends By Email",
"noFAQsToShow": "There are no Frequently asked Questions Right now. Please contact us if you have any query.", "noFAQsToShow": "There are no Frequently asked Questions Right now. Please contact us if you have any query.",
"appInfo": "App Info" "appInfo": "App Info",
"users": "Users",
"adsRemaining": "Ads Remaining"
} }

@ -41,7 +41,7 @@ class AppState {
currentAppType = appType; currentAppType = appType;
} }
User? _user = null; User? _user;
set setUser(v) => _user = v; set setUser(v) => _user = v;

@ -69,6 +69,43 @@ class AppRoutes {
static const String changeEmailPage = "/changeEmailPage"; static const String changeEmailPage = "/changeEmailPage";
static const String editAccountPage = "/editAccoundPage"; static const String editAccountPage = "/editAccoundPage";
// Provider App Routes
//settings
static const defineLicense = "/defineLicese";
static const String dealershipSetting = "/dealershipSetting";
static const String branchList = "/branchList";
static const String branchDetail = "/branchDetail";
static const String defineBranch = "/defineBranch";
//Appointments
static const String appointment = "/appointment";
static const String appointmentDetailList = "/appointmentDetailList";
static const String updateAppointmentPage = "/updateAppointmentPage";
static const String addServiceInAppointment = "/addServiceInAppointment";
static const String mergeAppointments = "/mergeAppointments";
//Services
static const String dealerUser = "/dealerUser";
static const String servicesList = "/servicesList";
static const String itemsList = "/itemsList";
static const String createItem = "/createItem";
static const String createServices = "/createServices";
static const String createServices2 = "/createServices2";
static const String createServices3 = "/createServices3";
//Schedules
static const String schedulesList = "/schedulesList";
static const String addSchedule = "/addSchedule";
// Subscriptions
static const String mySubscriptionsPage = "/mySubscriptionsPage";
static const String subscriptionsPage = "/subscriptionsPage";
//Bracnh Duplication
static const String matchServices = "/matchServices";
static const String userSettings = "/userSettings";
static const String dashboard = "/dashboard"; static const String dashboard = "/dashboard";
static const String bookProviderAppView = "/bookProviderAppView"; static const String bookProviderAppView = "/bookProviderAppView";
@ -100,17 +137,13 @@ class AppRoutes {
static const String providerProfileView = "/providerProfilePage"; static const String providerProfileView = "/providerProfilePage";
static const String favoriteListView = "/favoriteListView"; static const String favoriteListView = "/favoriteListView";
// Subscriptions
static const String mySubscriptionsPage = "/mySubscriptionsPage";
static const String subscriptionsPage = "/subscriptionsPage";
//Requests //Requests
static const String requestsDetailPage = "/requestsDetailPage";
static const String sendOfferPage = "/sendOfferPage";
static const String myRequestsPage = "/myRequestsPage"; static const String myRequestsPage = "/myRequestsPage";
static const String requestsFilterView = "/requestsFilterView"; static const String requestsFilterView = "/requestsFilterView";
static const String createRequestPage = "/createRequestPage"; static const String createRequestPage = "/createRequestPage";
static const String offersListPage = "/offersListPage"; static const String offersListPage = "/offersListPage";
static const String requestsDetailPage = "/requestsDetailPage";
static const String sendOfferPage = "/sendOfferPage";
static const String reviewRequestOffer = "/reviewRequestOffer"; static const String reviewRequestOffer = "/reviewRequestOffer";
//Setting Options //Setting Options
@ -126,14 +159,8 @@ class AppRoutes {
//Profile Screen //Profile Screen
static const String profileView = "/profileView"; static const String profileView = "/profileView";
static const providerLicensePage = "/providerLicensePage"; static const providerLicensePage = "/providerLicensePage";
//Provider User Page
static const dealerUser = "/dealerUser";
// HomePage Provider
static const String generalChatsListForProvider = "/generalChatsListForProvider"; static const String generalChatsListForProvider = "/generalChatsListForProvider";
//Chat //Chat

@ -507,8 +507,7 @@ class CodegenLoader extends AssetLoader{
"submitAd": "إرسال الإعلان", "submitAd": "إرسال الإعلان",
"selectAdType": "اختر نوع الإعلان", "selectAdType": "اختر نوع الإعلان",
"validUntilSubscriptionExpiration": "صالح حتى انتهاء الاشتراك", "validUntilSubscriptionExpiration": "صالح حتى انتهاء الاشتراك",
"adsRemainingVar": "الإعلانات المتبقية", "youLeftAdsGivenSubscription": "لقد تركت مع إعلانات محدودة الواردة في الاشتراك.",
"youLeftAdsGivenSubscription": "لقد بقي لديك 05 من 50 إعلانًا في الاشتراك.",
"updateSubscription": "تحديث الاشتراك", "updateSubscription": "تحديث الاشتراك",
"workInProgress": "العمل جارٍ", "workInProgress": "العمل جارٍ",
"visitCompleted": "تمت الزيارة", "visitCompleted": "تمت الزيارة",
@ -695,7 +694,9 @@ class CodegenLoader extends AssetLoader{
"inviteFriendsByWhatsApp": "دعوة الأصدقاء عبر واتساب", "inviteFriendsByWhatsApp": "دعوة الأصدقاء عبر واتساب",
"inviteFriendsByEmail": "دعوة الأصدقاء عبر البريد الإلكتروني", "inviteFriendsByEmail": "دعوة الأصدقاء عبر البريد الإلكتروني",
"noFAQsToShow": "لا توجد أسئلة شائعة في الوقت الحالي. يرجى الاتصال بنا إذا كان لديك أي استفسار.", "noFAQsToShow": "لا توجد أسئلة شائعة في الوقت الحالي. يرجى الاتصال بنا إذا كان لديك أي استفسار.",
"appInfo": "معلومات التطبيق" "appInfo": "معلومات التطبيق",
"users": "المستخدمين",
"adsRemaining": "الإعلانات المتبقية"
}; };
static const Map<String,dynamic> en_US = { static const Map<String,dynamic> en_US = {
"firstTimeLogIn": "First Time Log In", "firstTimeLogIn": "First Time Log In",
@ -1191,8 +1192,7 @@ static const Map<String,dynamic> en_US = {
"submitAd": "Submit Ad", "submitAd": "Submit Ad",
"selectAdType": "Select Ad Type", "selectAdType": "Select Ad Type",
"validUntilSubscriptionExpiration": "Valid Until Subscription Expiration", "validUntilSubscriptionExpiration": "Valid Until Subscription Expiration",
"adsRemainingVar ": "Ads Remaining", "youLeftAdsGivenSubscription": "You have left with limited ads given in the subscription.",
"youLeftAdsGivenSubscription": "You have left with 05 out of 50 ads given in the subscription.",
"updateSubscription": "Update Subscription", "updateSubscription": "Update Subscription",
"workInProgress": "Work In Progress", "workInProgress": "Work In Progress",
"visitCompleted": "Visit Completed", "visitCompleted": "Visit Completed",
@ -1376,7 +1376,9 @@ static const Map<String,dynamic> en_US = {
"inviteFriendsByWhatsApp": "Invite Friends By WhatsApp", "inviteFriendsByWhatsApp": "Invite Friends By WhatsApp",
"inviteFriendsByEmail": "Invite Friends By Email", "inviteFriendsByEmail": "Invite Friends By Email",
"noFAQsToShow": "There are no Frequently asked Questions Right now. Please contact us if you have any query.", "noFAQsToShow": "There are no Frequently asked Questions Right now. Please contact us if you have any query.",
"appInfo": "App Info" "appInfo": "App Info",
"users": "Users",
"adsRemaining": "Ads Remaining"
}; };
static const Map<String, Map<String,dynamic>> mapLocales = {"ar_SA": ar_SA, "en_US": en_US}; static const Map<String, Map<String,dynamic>> mapLocales = {"ar_SA": ar_SA, "en_US": en_US};
} }

@ -470,7 +470,6 @@ abstract class LocaleKeys {
static const submitAd = 'submitAd'; static const submitAd = 'submitAd';
static const selectAdType = 'selectAdType'; static const selectAdType = 'selectAdType';
static const validUntilSubscriptionExpiration = 'validUntilSubscriptionExpiration'; static const validUntilSubscriptionExpiration = 'validUntilSubscriptionExpiration';
static const adsRemainingVar = 'adsRemainingVar';
static const youLeftAdsGivenSubscription = 'youLeftAdsGivenSubscription'; static const youLeftAdsGivenSubscription = 'youLeftAdsGivenSubscription';
static const updateSubscription = 'updateSubscription'; static const updateSubscription = 'updateSubscription';
static const workInProgress = 'workInProgress'; static const workInProgress = 'workInProgress';
@ -659,5 +658,7 @@ abstract class LocaleKeys {
static const inviteFriendsByEmail = 'inviteFriendsByEmail'; static const inviteFriendsByEmail = 'inviteFriendsByEmail';
static const noFAQsToShow = 'noFAQsToShow'; static const noFAQsToShow = 'noFAQsToShow';
static const appInfo = 'appInfo'; static const appInfo = 'appInfo';
static const users = 'users';
static const adsRemaining = 'adsRemaining';
} }

@ -1,3 +1,4 @@
import 'dart:developer';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:mc_common_app/api/api_client.dart'; import 'package:mc_common_app/api/api_client.dart';
@ -25,17 +26,17 @@ class ShippingRepoImp extends ShippingRepo {
@override @override
Future<List<ShippingRequestModel>> getShippingRequestListByStatus({ShippingRequestStatusEnum? shippingStatusEnum, int? requestId}) async { Future<List<ShippingRequestModel>> getShippingRequestListByStatus({ShippingRequestStatusEnum? shippingStatusEnum, int? requestId}) async {
String token = appState.getUser.data!.accessToken ?? ""; String token = appState.getUser.data!.accessToken ?? "";
Map<String, String> queryParameters = { Map queryParameters = {
"requestID": "${requestId ?? 0}", "requestID": "${requestId ?? 0}",
"shippingStatus": "${shippingStatusEnum != null ? shippingStatusEnum.getIdFromShippingStatusEnum() : 0}", "shippingStatus": "${shippingStatusEnum != null ? shippingStatusEnum.getIdFromShippingStatusEnum() : 0}",
}; };
GenericRespModel genericRespModel = await injector.get<ApiClient>().postJsonForObject( GenericRespModel genericRespModel = await apiClient.postJsonForObject(
(json) => GenericRespModel.fromJson(json), (json) => GenericRespModel.fromJson(json),
ApiConsts.shippingRequestStatusGet, ApiConsts.shippingRequestStatusGet,
queryParameters, queryParameters,
token: token, token: token,
); );
if (genericRespModel.messageStatus != 1 || genericRespModel.data == null) { if (genericRespModel.messageStatus != 1 || genericRespModel.data == null) {
Utils.showToast(genericRespModel.message ?? LocaleKeys.somethingWrong.tr()); Utils.showToast(genericRespModel.message ?? LocaleKeys.somethingWrong.tr());
@ -56,12 +57,12 @@ class ShippingRepoImp extends ShippingRepo {
"comment": comment ?? "", "comment": comment ?? "",
}; };
GenericRespModel genericRespModel = await injector.get<ApiClient>().postJsonForObject( GenericRespModel genericRespModel = await apiClient.postJsonForObject(
(json) => GenericRespModel.fromJson(json), (json) => GenericRespModel.fromJson(json),
ApiConsts.shippingRequestStatusUpdate, ApiConsts.shippingRequestStatusUpdate,
queryParameters, queryParameters,
token: token, token: token,
); );
if (genericRespModel.messageStatus != 1 || genericRespModel.data == null) { if (genericRespModel.messageStatus != 1 || genericRespModel.data == null) {
Utils.showToast(genericRespModel.message ?? LocaleKeys.somethingWrong.tr()); Utils.showToast(genericRespModel.message ?? LocaleKeys.somethingWrong.tr());

@ -5,16 +5,15 @@ import 'package:mc_common_app/config/dependency_injection.dart';
import 'package:mc_common_app/models/general_models/generic_resp_model.dart'; import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/models/provider_branches_models/branch_detail_model.dart'; import 'package:mc_common_app/models/provider_branches_models/branch_detail_model.dart';
import 'package:mc_common_app/models/subscriptions_models/branch_user_selection_model.dart'; import 'package:mc_common_app/models/subscriptions_models/branch_user_selection_model.dart';
import 'package:mc_common_app/models/subscriptions_models/provider_subscription_model.dart';
import 'package:mc_common_app/models/subscriptions_models/subscription_model.dart'; import 'package:mc_common_app/models/subscriptions_models/subscription_model.dart';
import 'package:mc_common_app/models/user_models/branch_user.dart'; import 'package:mc_common_app/models/user_models/branch_user.dart';
abstract class SubscriptionRepo { abstract class SubscriptionRepo {
Future<SubscriptionModel> getAllSubscriptions(String? serviceProviderID); // Future<SubscriptionModel> getAllSubscriptions(String? serviceProviderID);
Future<SubscriptionModel> getMySubscriptions(String? serviceProviderID); // Future<List<ProviderSubscriptionModel>> getProviderSubscription({String? serviceProviderID});
Future<List<ProviderSubscriptionModel>> getProviderSubscription({String? serviceProviderID}); Future<SubscriptionModel> getMySubscriptions(String? serviceProviderID);
Future<SubscriptionModel> getSubscriptionBySP(String? serviceProviderID, bool isRenew); Future<SubscriptionModel> getSubscriptionBySP(String? serviceProviderID, bool isRenew);
@ -29,23 +28,10 @@ class SubscriptionRepoImp extends SubscriptionRepo {
ApiClient apiClient = injector.get<ApiClient>(); ApiClient apiClient = injector.get<ApiClient>();
AppState appState = injector.get<AppState>(); AppState appState = injector.get<AppState>();
@override
Future<SubscriptionModel> getAllSubscriptions(String? serviceProviderID) async {
String t = AppState().getUser.data!.accessToken ?? "";
Map<String, String> queryParameters = {};
if (serviceProviderID != null) {
queryParameters = {
"ID": serviceProviderID,
};
}
return await injector.get<ApiClient>().getJsonForObject((json) => SubscriptionModel.fromJson(json), ApiConsts.getAllSubscriptions, token: t, queryParameters: queryParameters);
}
@override @override
Future<SubscriptionModel> getSubscriptionBySP(String? serviceProviderID, bool isRenew) async { Future<SubscriptionModel> getSubscriptionBySP(String? serviceProviderID, bool isRenew) async {
String t = AppState().getUser.data!.accessToken ?? ""; String t = AppState().getUser.data!.accessToken ?? "";
Map<String, String> queryParameters = {}; Map<String, dynamic> queryParameters = {};
if (serviceProviderID != null) { if (serviceProviderID != null) {
queryParameters = { queryParameters = {
"ProviderID": serviceProviderID, "ProviderID": serviceProviderID,
@ -138,25 +124,38 @@ class SubscriptionRepoImp extends SubscriptionRepo {
return await injector.get<ApiClient>().getJsonForObject((json) => SubscriptionModel.fromJson(json), ApiConsts.getAllSubscriptions, token: t, queryParameters: queryParameters); return await injector.get<ApiClient>().getJsonForObject((json) => SubscriptionModel.fromJson(json), ApiConsts.getAllSubscriptions, token: t, queryParameters: queryParameters);
} }
@override // @override
Future<List<ProviderSubscriptionModel>> getProviderSubscription({String? serviceProviderID}) async { // Future<SubscriptionModel> getAllSubscriptions(String? serviceProviderID) async {
Map<String, String> queryParameters = {}; // String t = AppState().getUser.data!.accessToken ?? "";
if (serviceProviderID != null) { // Map<String, String> queryParameters = {};
queryParameters = { // if (serviceProviderID != null) {
"ServiceProviderID": serviceProviderID, // queryParameters = {
"IsActiveSubscriptionForProvider": "true", // "ID": serviceProviderID,
}; // };
} // }
//
// return await injector.get<ApiClient>().getJsonForObject((json) => SubscriptionModel.fromJson(json), ApiConsts.getAllSubscriptions, token: t, queryParameters: queryParameters);
// }
GenericRespModel adsGenericModel = await apiClient.getJsonForObject( // @override
token: appState.getUser.data!.accessToken, // Future<List<ProviderSubscriptionModel>> getProviderSubscription({String? serviceProviderID}) async {
(json) => GenericRespModel.fromJson(json), // Map<String, String> queryParameters = {};
ApiConsts.getMySubscriptions, // if (serviceProviderID != null) {
queryParameters: queryParameters, // queryParameters = {
); // "ServiceProviderID": serviceProviderID,
List<ProviderSubscriptionModel> providerSubList = List.generate(adsGenericModel.data.length, (index) => ProviderSubscriptionModel.fromJson(adsGenericModel.data[index])); // "IsActiveSubscriptionForProvider": "true",
return providerSubList; // };
} // }
//
// GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
// token: appState.getUser.data!.accessToken,
// (json) => GenericRespModel.fromJson(json),
// ApiConsts.getMySubscriptions,
// queryParameters: queryParameters,
// );
// List<ProviderSubscriptionModel> providerSubList = List.generate(adsGenericModel.data.length, (index) => ProviderSubscriptionModel.fromJson(adsGenericModel.data[index]));
// return providerSubList;
// }
// @override // @override
// Future<SubscriptionModel> getProviderSubscription( // Future<SubscriptionModel> getProviderSubscription(

@ -28,6 +28,7 @@ import 'package:mc_common_app/repositories/branch_repo.dart';
import 'package:mc_common_app/repositories/common_repo.dart'; import 'package:mc_common_app/repositories/common_repo.dart';
import 'package:mc_common_app/services/common_services.dart'; import 'package:mc_common_app/services/common_services.dart';
import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/date_helper.dart';
import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/utils/navigator.dart'; import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/utils/utils.dart'; import 'package:mc_common_app/utils/utils.dart';
@ -354,7 +355,9 @@ class AppointmentsVM extends BaseVM {
myAppointments = await appointmentRepo.getMyAppointmentsForCustomersByFilters(); myAppointments = await appointmentRepo.getMyAppointmentsForCustomersByFilters();
// myFilteredAppointments = myAppointments; // myFilteredAppointments = myAppointments;
myUpComingAppointments = myAppointments.where((element) => element.appointmentStatusEnum == AppointmentStatusEnum.booked || element.appointmentStatusEnum == AppointmentStatusEnum.confirmed).toList(); myUpComingAppointments = myAppointments
.where((element) => (element.appointmentStatusEnum == AppointmentStatusEnum.booked || element.appointmentStatusEnum == AppointmentStatusEnum.confirmed) && (DateHelper.parseStringToDate(element.appointmentDate!).isAfter(DateTime.now())))
.toList();
setState(ViewState.idle); setState(ViewState.idle);
applyFilterOnAppointmentsVM(appointmentStatusEnum: AppointmentStatusEnum.allAppointments); applyFilterOnAppointmentsVM(appointmentStatusEnum: AppointmentStatusEnum.allAppointments);
notifyListeners(); notifyListeners();
@ -380,7 +383,7 @@ class AppointmentsVM extends BaseVM {
setState(ViewState.busy); setState(ViewState.busy);
myAppointments = await appointmentRepo.getMyAppointmentsForProvider(map); myAppointments = await appointmentRepo.getMyAppointmentsForProvider(map);
myFilteredAppointments = myAppointments; myFilteredAppointments = myAppointments;
myUpComingAppointments = myAppointments.where((element) => element.appointmentStatusEnum == AppointmentStatusEnum.confirmed).toList(); myUpComingAppointments = myAppointments.where((element) => element.appointmentStatusEnum == AppointmentStatusEnum.confirmed && (DateHelper.parseStringToDate(element.appointmentDate!).isAfter(DateTime.now()))).toList();
applyFilterOnAppointmentsVM(appointmentStatusEnum: AppointmentStatusEnum.allAppointments, isNeedCustomerFilter: true); applyFilterOnAppointmentsVM(appointmentStatusEnum: AppointmentStatusEnum.allAppointments, isNeedCustomerFilter: true);
setState(ViewState.idle); setState(ViewState.idle);
} }
@ -830,8 +833,14 @@ class AppointmentsVM extends BaseVM {
if (isNeedToRebuild) setState(ViewState.busy); if (isNeedToRebuild) setState(ViewState.busy);
if (isFromRefresh) { if (isFromRefresh) {
var selectedBranch = branchesFilterOptions.firstWhere((element) => element.isSelected); var selectedFilter = branchesFilterOptions.firstWhere((element) => element.isSelected);
nearbyBranches = await branchRepo.getBranchesByFilters(categoryIdsList: [selectedBranch.id]); log("selectedFilter: ${selectedFilter.id}");
if (selectedFilter.id == 0) {
nearbyBranches = await branchRepo.getAllNearBranchAndServices();
} else {
nearbyBranches = await branchRepo.getBranchesByFilters(categoryIdsList: [selectedFilter.id]);
}
setState(ViewState.idle); setState(ViewState.idle);
return; return;
} }
@ -1169,11 +1178,11 @@ class AppointmentsVM extends BaseVM {
} }
Future<void> getBranchesBasedOnCategoryFilters({required int categoryId}) async { Future<void> getBranchesBasedOnCategoryFilters({required int categoryId}) async {
setState(ViewState.busy);
if (categoryId == 0) { if (categoryId == 0) {
await getAllNearBranches(); await getAllNearBranches();
return; return;
} }
setState(ViewState.busy);
nearbyBranches.clear(); nearbyBranches.clear();
nearbyBranches = await branchRepo.getBranchesByFilters(categoryIdsList: [categoryId]); nearbyBranches = await branchRepo.getBranchesByFilters(categoryIdsList: [categoryId]);
setState(ViewState.idle); setState(ViewState.idle);
@ -1538,5 +1547,4 @@ class AppointmentsVM extends BaseVM {
// .whenComplete(() => navigateWithName(context, AppRoutes.chatView, arguments: chatViewArguments)); // .whenComplete(() => navigateWithName(context, AppRoutes.chatView, arguments: chatViewArguments));
// } // }
} }
} }

@ -0,0 +1,150 @@
import 'dart:io';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart';
import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/config/dependency_injection.dart';
import 'package:mc_common_app/config/routes.dart';
import 'package:mc_common_app/generated/locale_keys.g.dart';
import 'package:mc_common_app/main.dart';
import 'package:mc_common_app/models/user_models/image_response.dart';
import 'package:mc_common_app/repositories/user_repo.dart';
import 'package:mc_common_app/services/common_services.dart';
import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/view_models/shipping_management_view_model.dart';
import 'package:mc_common_app/widgets/common_widgets/add_phone_num_wiget.dart';
import 'package:provider/provider.dart';
import 'package:mc_common_app/utils/location/Location.dart';
import 'package:mc_common_app/utils/utils.dart';
import 'package:mc_common_app/view_models/ad_view_model.dart';
import 'package:mc_common_app/view_models/appointments_view_model.dart';
import 'package:mc_common_app/view_models/base_view_model.dart';
import 'package:mc_common_app/widgets/bottom_sheet.dart';
import 'package:mc_common_app/view_models/chat_view_model.dart';
import 'package:mc_common_app/view_models/requests_view_model.dart';
import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:mc_common_app/view_models/subscriptions_view_model.dart';
class DashboardVMProvider extends BaseVM {
final CommonAppServices commonServices;
final UserRepo userRepo;
DashboardVMProvider({required this.commonServices, required this.userRepo});
String pickedImage = "";
int selectedNavbarBarIndex = 2;
void onNavbarTapped(int index) async {
logger.i(AppState().getDeviceToken);
selectedNavbarBarIndex = index;
notifyListeners();
}
void pickImageFromPhone(BuildContext context, int sourceFlag) async {
final File? pickedImageFile = await commonServices.pickImageFromPhone(sourceFlag);
if (pickedImageFile == null) {
return;
}
int sizeInBytes = pickedImageFile.lengthSync();
if (sizeInBytes > 1000000) {
Utils.showToast(LocaleKeys.fileLarger.tr());
return;
} else {
String image64 = Utils.convertFileToBase64(pickedImageFile);
Utils.showLoading(context);
ImageResponse response = await userRepo.updateUserImage(image64);
Utils.hideLoading(context);
Navigator.pop(context);
if (response.messageStatus == 1) {
Utils.showToast(LocaleKeys.imageUploaded.tr());
AppState().getUser.data!.userInfo!.userImageUrl = response.data;
} else {
Utils.showToast(response.message ?? "");
}
}
}
Future<ImageResponse> updateUserImage(String image) async {
return await userRepo.updateUserImage(image);
}
fetchUsernameAndLocation() async {
// String userName = await SharedPrefManager.getPhoneOrEmail();
Location.getCurrentLocation(
(LatLng? latlng) {
AppState().currentLocation = latlng ?? const LatLng(0, 0);
},
);
notifyListeners();
}
Future<void> onRefresh(BuildContext context) async {
final requestsVM = context.read<RequestsVM>();
final chatVM = context.read<ChatVM>();
final appointmentVM = context.read<AppointmentsVM>();
final shippingManagementVM = context.read<ShippingManagementVM>();
final serviceVM = context.read<ServiceVM>();
final adVm = context.read<AdVM>();
final subscriptionsVM = context.read<SubscriptionsVM>();
requestsVM.populateDataForRequestsFilter();
appointmentVM.populateAppointmentsFilterList();
shippingManagementVM.populateShippingRequestFilterList();
await serviceVM.getBranchAndServices();
await appointmentVM.getMyAppointmentsForProvider({"ServiceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0"});
adVm.populateAdsFilterList();
await chatVM.buildHubConnection(context);
await adVm.getMyAds();
await adVm.getExploreAds();
await adVm.getVehicleTypes();
await adVm.getVehicleAdsDuration();
await requestsVM.getRequests();
// await subscriptionsVM.getMySubscriptionsBySP(AppState().getUser.data?.userInfo?.providerId.toString() ?? "");
await subscriptionsVM.getSubscriptionBySP(AppState().getUser.data?.userInfo?.providerId.toString() ?? "", true);
// await subscriptionsVM.getMySubscriptionsBySP(AppState().getUser.data?.userInfo?.providerId.toString() ?? "");
}
void checkUserSubscription(SubscriptionActionTypeEnum actionType, BuildContext context, {required Function() callback}) async {
switch (actionType) {
case SubscriptionActionTypeEnum.ads:
performCheckOnAds(context);
break;
case SubscriptionActionTypeEnum.users:
performCheckOnUsers(context, callback);
break;
case SubscriptionActionTypeEnum.branches:
performCheckOnBranches(context);
break;
}
}
void performCheckOnBranches(BuildContext context) async {
if (AppState().getproviderSubscription.isNotEmpty && AppState().getproviderSubscription.first.branchesRemaining! > 0) {
logger.d(AppState().getproviderSubscription.first.toJson());
await navigateWithName(context, AppRoutes.defineBranch);
} else {
Utils.showToast("Upgrade your subscription to add more Branches.");
}
}
void performCheckOnAds(BuildContext context) async {
//adsRemaining
if (AppState().getproviderSubscription.isNotEmpty && AppState().getproviderSubscription.first.adsRemaining! > 0) {
logger.d(AppState().getproviderSubscription.first.toJson());
await navigateWithName(context, AppRoutes.defineBranch);
} else {
Utils.showToast("Upgrade your subscription to add more Ads.");
}
}
void performCheckOnUsers(BuildContext context, Function() callBack) async {
if (AppState().getproviderSubscription.isNotEmpty && AppState().getproviderSubscription.first.subUsersRemaining! > 0) {
logger.d(AppState().getproviderSubscription.first.toJson());
showMyBottomSheet(context, isDismissible: false, child: const AddPhoneNumWidget(), callBackFunc: callBack);
} else {
Utils.showToast("Upgrade your subscription to add more Sub Users.");
}
}
}

@ -12,6 +12,7 @@ import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/utils/utils.dart'; import 'package:mc_common_app/utils/utils.dart';
import 'package:mc_common_app/view_models/base_view_model.dart'; import 'package:mc_common_app/view_models/base_view_model.dart';
import 'package:mc_common_app/view_models/dashboard_view_model_customer.dart'; import 'package:mc_common_app/view_models/dashboard_view_model_customer.dart';
import 'package:mc_common_app/view_models/dashboard_view_model_provider.dart';
import 'package:mc_common_app/view_models/subscriptions_view_model.dart'; import 'package:mc_common_app/view_models/subscriptions_view_model.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
@ -181,12 +182,20 @@ class PaymentVM extends ChangeNotifier {
} }
void onRequestPaymentSuccess(BuildContext context) { void onRequestPaymentSuccess(BuildContext context) {
context.read<DashboardVmCustomer>().onNavbarTapped(4); if (AppState().currentAppType == AppType.provider) {
context.read<DashboardVMProvider>().onNavbarTapped(4);
} else {
context.read<DashboardVmCustomer>().onNavbarTapped(4);
}
navigateReplaceWithNameUntilRoute(context, AppRoutes.dashboard); navigateReplaceWithNameUntilRoute(context, AppRoutes.dashboard);
} }
void onAdsPaymentSuccess(BuildContext context) { void onAdsPaymentSuccess(BuildContext context) {
context.read<DashboardVmCustomer>().onNavbarTapped(3); if (AppState().currentAppType == AppType.provider) {
context.read<DashboardVMProvider>().onNavbarTapped(3);
} else {
context.read<DashboardVmCustomer>().onNavbarTapped(3);
}
navigateReplaceWithNameUntilRoute(context, AppRoutes.dashboard); navigateReplaceWithNameUntilRoute(context, AppRoutes.dashboard);
} }
@ -197,7 +206,11 @@ class PaymentVM extends ChangeNotifier {
} }
void onAppointmentSuccess(BuildContext context) { void onAppointmentSuccess(BuildContext context) {
context.read<DashboardVmCustomer>().onNavbarTapped(1); if (AppState().currentAppType == AppType.provider) {
context.read<DashboardVMProvider>().onNavbarTapped(1);
} else {
context.read<DashboardVmCustomer>().onNavbarTapped(1);
}
navigateReplaceWithNameUntilRoute(context, AppRoutes.dashboard); navigateReplaceWithNameUntilRoute(context, AppRoutes.dashboard);
} }

@ -128,39 +128,47 @@ class ServiceVM extends BaseVM {
notifyListeners(); notifyListeners();
} }
int selectedBranchId = 0;
updateSelectedBranchId(var value) {
selectedBranchId = value;
}
filterUserBranchCategories() { filterUserBranchCategories() {
categories = []; setState(ViewState.busy);
List<BranchDetailModel>? localbranches; categories.clear();
if (branches!.data != null) { // List<BranchDetailModel> localBranches = [];
if (selectedBranchStatus == 3) { // if (branches!.data != null) {
localbranches = branches!.data!.serviceProviderBranch!.where((element) => element.statusId == 3).toList(); // if (selectedBranchStatus == 3) {
} else { // localBranches = branches!.data!.serviceProviderBranch!.where((element) => element.statusId == 3).toList();
localbranches = branches!.data!.serviceProviderBranch!.where((element) => element.statusId != 3).toList(); // } else {
} // localBranches = branches!.data!.serviceProviderBranch!.where((element) => element.statusId != 3).toList();
// }
// }
final BranchDetailModel currentBranch = homePageBranches.firstWhere((element) => element.id == selectedBranchId);
for (var element in currentBranch.branchServices!) {
categories.add(
CategoryData(
id: element.categoryId,
categoryName: element.categoryName,
categoryNameN: element.categoryName,
),
);
} }
categories = categories.toSet().toList();
for (var branch in localbranches!) { for (var payment in categories) {
for (var element in branch.branchServices!) { for (var element in currentBranch.branchServices!) {
categories.add( if (payment.id == element.categoryId) {
CategoryData( payment.services ??= [];
id: element.categoryId, payment.services!.add(element);
categoryName: element.categoryName,
categoryNameN: element.categoryName,
),
);
}
categories = categories.toSet().toList();
for (var payment in categories) {
for (var element in branch.branchServices!) {
if (payment.id == element.categoryId) {
payment.services ??= [];
payment.services!.add(element);
}
} }
} }
} }
categories = categories; setState(ViewState.idle);
notifyListeners();
} }
// Future<String?> selectFile(BuildContext context, int index) async { // Future<String?> selectFile(BuildContext context, int index) async {

@ -1,3 +1,5 @@
import 'dart:developer';
import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/models/general_models/generic_resp_model.dart'; import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/models/subscriptions_models/branch_user_selection_model.dart'; import 'package:mc_common_app/models/subscriptions_models/branch_user_selection_model.dart';
@ -23,27 +25,27 @@ class SubscriptionsVM extends BaseVM {
//My Subscriptions //My Subscriptions
//All Subscriptions //All Subscriptions
getAllAvailableSubscriptions(String? serviceProviderID) async { // getAllAvailableSubscriptions(String? serviceProviderID) async {
selectedIndex = 0; // selectedIndex = 0;
setState(ViewState.busy); // setState(ViewState.busy);
allSubscriptions = await subscriptionRepo.getAllSubscriptions(serviceProviderID); // allSubscriptions = await subscriptionRepo.getAllSubscriptions(serviceProviderID);
if (allSubscriptions.messageStatus == 1) { // if (allSubscriptions.messageStatus == 1) {
monthlyTabs.clear(); // monthlyTabs.clear();
var idSet = <int>{}; // var idSet = <int>{};
for (var d in allSubscriptions.data ?? []) { // for (var d in allSubscriptions.data ?? []) {
if (idSet.add(d.durationDays ?? 0)) { // if (idSet.add(d.durationDays ?? 0)) {
monthlyTabs.add(DropValue(d.durationDays, _convertDaysToMonths(d.durationDays ?? 0), "", isEnabled: false)); // monthlyTabs.add(DropValue(d.durationDays, _convertDaysToMonths(d.durationDays ?? 0), "", isEnabled: false));
} // }
} // }
monthlyTabs.sort((a, b) => a.value.compareTo(b.value)); // monthlyTabs.sort((a, b) => a.value.compareTo(b.value));
monthlyTabs.first.isEnabled = true; // monthlyTabs.first.isEnabled = true;
selectedMonthlyTab = monthlyTabs.first; // selectedMonthlyTab = monthlyTabs.first;
filterSubscriptions(); // filterSubscriptions();
setState(ViewState.idle); // setState(ViewState.idle);
} else { // } else {
setState(ViewState.error); // setState(ViewState.error);
} // }
} // }
getSubscriptionBySP(String serviceProviderID, bool isRenew) async { getSubscriptionBySP(String serviceProviderID, bool isRenew) async {
selectedIndex = 0; selectedIndex = 0;
@ -184,17 +186,17 @@ class SubscriptionsVM extends BaseVM {
// My Provider Subscription // My Provider Subscription
getMySubscriptionsBySP() async { getMySubscriptionsBySP() async {
mySubscriptionsBySp.clear();
setState(ViewState.busy); setState(ViewState.busy);
if (mySubscriptionsBySp.isEmpty) { // allSubscriptions.data
// allSubscriptions.data for (var element in allSubscriptions.data!) {
for (var element in allSubscriptions.data!) { if (element.subscriptionTypeEnum == SubscriptionTypeEnum.current) {
if (element.subscriptionTypeEnum == SubscriptionTypeEnum.current) { mySubscriptionsBySp.add(element);
mySubscriptionsBySp.add(element);
}
} }
// mySubscriptionsBySp = await subscriptionRepo.getProviderSubscription(serviceProviderID: serviceProviderID);
AppState().setproviderSubscription = mySubscriptionsBySp;
} }
// mySubscriptionsBySp = await subscriptionRepo.getProviderSubscription(serviceProviderID: serviceProviderID);
AppState().setproviderSubscription = mySubscriptionsBySp;
setState(ViewState.idle); setState(ViewState.idle);
} }
} }

@ -13,6 +13,7 @@ import 'package:mc_common_app/generated/locale_keys.g.dart';
import 'package:mc_common_app/main.dart'; import 'package:mc_common_app/main.dart';
import 'package:mc_common_app/models/general_models/generic_resp_model.dart'; import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/models/general_models/generic_resp_model.dart'; import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/models/subscriptions_models/subscription_model.dart';
import 'package:mc_common_app/models/user_models/basic_otp.dart'; import 'package:mc_common_app/models/user_models/basic_otp.dart';
import 'package:mc_common_app/models/user_models/change_email.dart'; import 'package:mc_common_app/models/user_models/change_email.dart';
import 'package:mc_common_app/models/user_models/change_mobile.dart'; import 'package:mc_common_app/models/user_models/change_mobile.dart';
@ -34,11 +35,14 @@ import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/utils/shared_prefrence.dart'; import 'package:mc_common_app/utils/shared_prefrence.dart';
import 'package:mc_common_app/utils/utils.dart'; import 'package:mc_common_app/utils/utils.dart';
import 'package:mc_common_app/view_models/base_view_model.dart'; import 'package:mc_common_app/view_models/base_view_model.dart';
import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:mc_common_app/view_models/subscriptions_view_model.dart';
import 'package:mc_common_app/views/location_views/map_selection_widget.dart'; import 'package:mc_common_app/views/location_views/map_selection_widget.dart';
import 'package:mc_common_app/widgets/dialog/dialogs.dart'; import 'package:mc_common_app/widgets/dialog/dialogs.dart';
import 'package:mc_common_app/widgets/dialog/message_dialog.dart'; import 'package:mc_common_app/widgets/dialog/message_dialog.dart';
import 'package:mc_common_app/widgets/dialog/otp_dialog.dart'; import 'package:mc_common_app/widgets/dialog/otp_dialog.dart';
import 'package:mc_common_app/widgets/tab/login_email_tab.dart'; import 'package:mc_common_app/widgets/tab/login_email_tab.dart';
import 'package:provider/provider.dart';
class UserVM extends BaseVM { class UserVM extends BaseVM {
final UserRepo userRepo; final UserRepo userRepo;
@ -673,7 +677,10 @@ class UserVM extends BaseVM {
AppState().getUser.data!.userInfo!.userLocalImage = null; AppState().getUser.data!.userInfo!.userLocalImage = null;
AppState().getUser.data!.userInfo!.userImageUrl = null; AppState().getUser.data!.userInfo!.userImageUrl = null;
} }
AppState().setUser = null;
AppState().setproviderSubscription = null; AppState().setproviderSubscription = null;
context.read<SubscriptionsVM>().mySubscriptionsBySp.clear();
context.read<SubscriptionsVM>().allSubscriptions = SubscriptionModel();
navigateReplaceWithNameUntilRoute(context, AppRoutes.registerSelection); navigateReplaceWithNameUntilRoute(context, AppRoutes.registerSelection);
} }
} }

@ -1,8 +1,10 @@
import 'dart:developer'; import 'dart:developer';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/config/routes.dart';
import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/extensions/string_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/generated/locale_keys.g.dart';
@ -10,6 +12,7 @@ import 'package:mc_common_app/models/advertisment_models/vehicle_details_models.
import 'package:mc_common_app/models/general_models/widgets_models.dart'; import 'package:mc_common_app/models/general_models/widgets_models.dart';
import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/view_models/ad_view_model.dart'; import 'package:mc_common_app/view_models/ad_view_model.dart';
import 'package:mc_common_app/views/advertisement/bottom_sheets/ad_duration_selection_sheet.dart'; import 'package:mc_common_app/views/advertisement/bottom_sheets/ad_duration_selection_sheet.dart';
import 'package:mc_common_app/widgets/bottom_sheet.dart'; import 'package:mc_common_app/widgets/bottom_sheet.dart';
@ -76,7 +79,6 @@ class SelectAdTypeView extends StatelessWidget {
if (adVM.isAdEditEnabled) { if (adVM.isAdEditEnabled) {
adVM.autoFillSelectedVehicleAdsDetails(); adVM.autoFillSelectedVehicleAdsDetails();
} }
log("isUpdateAdSelected: ${adVM.isAdEditEnabled}}");
showMyBottomSheet(context, child: AdDurationSelectionSheet(isUpdateAdSelected: adVM.isAdEditEnabled, isFromExtendAd: isFromExtendAd, adsID: adsId)); showMyBottomSheet(context, child: AdDurationSelectionSheet(isUpdateAdSelected: adVM.isAdEditEnabled, isFromExtendAd: isFromExtendAd, adsID: adsId));
}, },
child: SizedBox( child: SizedBox(
@ -147,27 +149,33 @@ class SelectAdTypeView extends StatelessWidget {
children: [ children: [
Row( Row(
children: [ children: [
"$remainingAds of $totalAds ".toText(fontSize: 29, isBold: true, letterSpacing: 0, height: 1), "$remainingAds ".toText(fontSize: 29, isBold: true, letterSpacing: 0, height: 1),
LocaleKeys.adsRemainingVar.tr().toText(fontSize: 17, color: MyColors.lightTextColor, isBold: true), LocaleKeys.adsRemaining.tr().toText(fontSize: 17, color: MyColors.lightTextColor, isBold: true),
], ],
), ),
Text.rich( Text.rich(
TextSpan( TextSpan(
children: [ children: [
TextSpan( TextSpan(
text: LocaleKeys.youLeftAdsGivenSubscription.tr(), text: LocaleKeys.youLeftAdsGivenSubscription.tr(),
style: const TextStyle( style: const TextStyle(
fontSize: 14, fontSize: 14,
color: MyColors.lightTextColor, color: MyColors.lightTextColor,
)), ),
),
TextSpan( TextSpan(
text: LocaleKeys.updateSubscription.tr(), text: " ${LocaleKeys.updateSubscription.tr()}",
style: const TextStyle( recognizer: TapGestureRecognizer()
decoration: TextDecoration.underline, ..onTap = () {
fontSize: 14, navigateWithName(context, AppRoutes.mySubscriptionsPage);
fontWeight: FontWeight.w600, },
color: MyColors.darkPrimaryColor, style: const TextStyle(
)) decoration: TextDecoration.underline,
fontSize: 14,
fontWeight: FontWeight.w600,
color: MyColors.darkPrimaryColor,
),
)
], ],
), ),
), ),

@ -101,7 +101,7 @@ class _ProfileScreenState extends State<ProfileScreen> {
), ),
CustomProfileOptionsTile( CustomProfileOptionsTile(
titleText: LocaleKeys.phone.tr(), titleText: LocaleKeys.phone.tr(),
subtitleText: "${AppState().getUser.data!.userInfo!.email}", subtitleText: "${AppState().getUser.data!.userInfo!.mobileNo}",
needBorderBelow: true, needBorderBelow: true,
onTap: () { onTap: () {
Navigator.pushNamed(context, AppRoutes.changeMobilePage); Navigator.pushNamed(context, AppRoutes.changeMobilePage);

@ -62,6 +62,7 @@ class _RegisterPageState extends State<RegisterProviderPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
log("role: ${role}");
return Scaffold( return Scaffold(
appBar: const CustomAppBar(isRemoveBackButton: false, title: ""), appBar: const CustomAppBar(isRemoveBackButton: false, title: ""),
body: Container( body: Container(
@ -79,7 +80,6 @@ class _RegisterPageState extends State<RegisterProviderPage> {
letterSpacing: -1.44, letterSpacing: -1.44,
), ),
20.height, 20.height,
LocaleKeys.enterPhoneNumber.tr().toText( LocaleKeys.enterPhoneNumber.tr().toText(
color: MyColors.lightTextColor, color: MyColors.lightTextColor,
textAlign: TextAlign.center, textAlign: TextAlign.center,
@ -100,7 +100,7 @@ class _RegisterPageState extends State<RegisterProviderPage> {
role = snapshot.data?.data?.first.id ?? -1; role = snapshot.data?.data?.first.id ?? -1;
} }
return RoleTypeTab( return RoleTypeTab(
0, role == 6 ? 1 : 0,
dropList, dropList,
onSelect: (DropValue value) { onSelect: (DropValue value) {
role = value.id; role = value.id;
@ -118,12 +118,8 @@ class _RegisterPageState extends State<RegisterProviderPage> {
if (snapshot.hasData) { if (snapshot.hasData) {
List<DropValue> dropList = []; List<DropValue> dropList = [];
snapshot.data?.data?.forEach((element) { snapshot.data?.data?.forEach((element) {
dropList.add(DropValue( dropList.add(DropValue(element.id ?? 0,
element.id ?? 0, EasyLocalization.of(context)?.currentLocale?.countryCode == "SA" ? "${element.countryNameN ?? ""} ${element.countryCode ?? ""}" : "${element.countryName ?? ""} ${element.countryCode ?? ""}", element.countryCode ?? ""));
EasyLocalization.of(context)?.currentLocale?.countryCode == "SA"
? (element.countryNameN ?? "") + " " + (element.countryCode ?? "")
: (element.countryName ?? "") + " " + (element.countryCode ?? ""),
element.countryCode ?? ""));
}); });
return Column( return Column(
children: [ children: [
@ -143,12 +139,12 @@ class _RegisterPageState extends State<RegisterProviderPage> {
}, },
dropdownValue: selectedDrop, dropdownValue: selectedDrop,
list: dropList, list: dropList,
hint: LocaleKeys.chooseCountry .tr(), hint: LocaleKeys.chooseCountry.tr(),
), ),
], ],
); );
} else { } else {
return CircularProgressIndicator(); return const CircularProgressIndicator();
} }
}, },
), ),
@ -169,7 +165,7 @@ class _RegisterPageState extends State<RegisterProviderPage> {
child: Row( child: Row(
children: [ children: [
Text( Text(
(countryCode.isEmpty ? "+00" : "+" + countryCode), (countryCode.isEmpty ? "+00" : "+$countryCode"),
style: const TextStyle( style: const TextStyle(
fontSize: 20, fontSize: 20,
color: MyColors.black, color: MyColors.black,

@ -0,0 +1,139 @@
import 'dart:async';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.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/models/user_models/country.dart';
import 'package:mc_common_app/theme/colors.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/button/show_fill_button.dart';
import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart';
import 'package:mc_common_app/widgets/txt_field.dart';
import 'package:provider/provider.dart';
class AddPhoneNumWidget extends StatefulWidget {
const AddPhoneNumWidget({Key? key}) : super(key: key);
@override
State<AddPhoneNumWidget> createState() => _AddPhoneNumWidgetState();
}
class _AddPhoneNumWidgetState extends State<AddPhoneNumWidget> {
String phoneNum = "", countryCode = "";
late UserVM userVM;
Country? _country;
@override
void initState() {
super.initState();
scheduleMicrotask(() {
userVM = Provider.of(context, listen: false);
getCountryList();
});
}
getCountryList() async {
_country = await userVM.getAllCountries();
setState(() {});
}
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom),
child: Container(
width: double.infinity,
padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
"Enter Phone Number".toText(fontSize: 16, isBold: true),
8.height,
getCountry(context),
8.height,
TxtField(
keyboardType: TextInputType.phone,
hint: "546758594",
value: phoneNum,
isSidePaddingZero: true,
onChanged: (v) {
phoneNum = v;
},
),
16.height,
Row(
children: [
Expanded(
child: ShowFillButton(
title: "Cancel",
backgroundColor: MyColors.greyButtonColor,
txtColor: Colors.black,
onPressed: () {
pop(context);
},
),
),
12.width,
Expanded(
child: ShowFillButton(
title: LocaleKeys.sendOTP.tr(),
onPressed: () {
//User Role: Dealer|Manager for a branch
FocusScope.of(context).unfocus();
if (validation()) {
userVM.performBasicOtpRegisterPage(context, countryCode: countryCode, phoneNum: phoneNum, role: 7, isNeedToPassToken: true, reloadPage: () {
pop(context);
});
}
},
),
),
],
)
],
),
),
);
}
Widget getCountry(BuildContext context) {
if (_country != null) {
List<DropValue> dropList = [];
_country!.data?.forEach((element) {
dropList.add(DropValue(element.id ?? 0, "${element.countryName ?? ""} ${element.countryCode ?? ""}", element.countryCode ?? ""));
});
return DropdownField(
(DropValue value) {
countryCode = value.subValue;
},
list: dropList,
hint: countryCode.isNotEmpty ? countryCode.toString() : LocaleKeys.selectCountryCode.tr(),
);
} else {
return const Center(
child: CircularProgressIndicator(),
);
}
}
bool validation() {
bool isValid = true;
if (countryCode.isEmpty) {
Utils.showToast(LocaleKeys.selectCountryCode.tr());
//("Please select Country Code");
isValid = false;
} else if (phoneNum.isEmpty) {
Utils.showToast(LocaleKeys.addPhoneNo.tr());
//("Please add Phone No");
isValid = false;
}
return isValid;
}
}
Loading…
Cancel
Save