From b4a3819c367899a6bc87bd4215220cff3eec0d46 Mon Sep 17 00:00:00 2001 From: "Aamir.Muhammad" <> Date: Mon, 29 Jul 2024 15:11:05 +0300 Subject: [PATCH] subscription & profile --- assets/langs/ar-SA.json | 6 +- assets/langs/en-US.json | 6 +- lib/classes/consts.dart | 1 + lib/generated/codegen_loader.g.dart | 12 +-- lib/generated/locale_keys.g.dart | 4 +- .../provider_subscription_model.dart | 86 +++++++++++-------- .../subscription_model.dart | 28 +++--- lib/repositories/user_repo.dart | 15 +++- lib/view_models/subscriptions_view_model.dart | 11 ++- lib/view_models/user_view_model.dart | 24 +++--- .../ad_review_containers.dart | 2 +- .../advertisement/select_ad_type_view.dart | 2 +- .../provider_license_page.dart | 33 +++---- .../setting_options_language.dart | 4 +- lib/views/user/login_with_password_page.dart | 6 +- lib/widgets/common_widgets/app_bar.dart | 36 ++++---- lib/widgets/tab/menu_tabs.dart | 27 ++---- lib/widgets/tab/role_type_tab.dart | 9 +- 18 files changed, 163 insertions(+), 149 deletions(-) diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json index 65ecac1..d0857a2 100644 --- a/assets/langs/ar-SA.json +++ b/assets/langs/ar-SA.json @@ -76,7 +76,7 @@ "userRoleOrTitle": "عنوان المستخدم", "codeSentToEmail": "تم ارسال الرمز للايميل", "number": "موبايل", - "english": "English", + "english": "عربي", "title": "مرحبًا", "msg": "Hello {} in the {} world ", "msg_named": "{} are written in the {lang} language", @@ -491,7 +491,7 @@ "submitAd": "إرسال الإعلان", "selectAdType": "اختر نوع الإعلان", "validUntilSubscriptionExpiration": "صالح حتى انتهاء الاشتراك", - "adsRemaining": "الإعلانات المتبقية", + "adsRemainingVar": "الإعلانات المتبقية", "youLeftAdsGivenSubscription": "لقد بقي لديك 05 من 50 إعلانًا في الاشتراك.", "updateSubscription": "تحديث الاشتراك", "workInProgress": "العمل جارٍ", @@ -561,7 +561,7 @@ "inviteFriends": "دعوة الأصدقاء", "more": "المزيد", "language": "اللغة", - "mySubscriptions": "اشتراكاتي", + "mySubscription": "اشتراكاتي", "subscriptions": "الاشتراكات", "defineLicenses": "تحديد التراخيص", "logOut": "تسجيل الخروج", diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json index a3f396e..9010e64 100644 --- a/assets/langs/en-US.json +++ b/assets/langs/en-US.json @@ -76,7 +76,7 @@ "userRoleOrTitle": "User role or title", "codeSentToEmail": "Code is sent to email", "number": "Number", - "english": "عربي", + "english": "English", "title": "Hello", "msg": "Hello {} in the {} world ", "msg_named": "{} are written in the {lang} language", @@ -492,7 +492,7 @@ "submitAd":"Submit Ad", "selectAdType":"Select Ad Type", "validUntilSubscriptionExpiration":"Valid Until Subscription Expiration", - "adsRemaining ":"Ads Remaining", + "adsRemainingVar ":"Ads Remaining", "youLeftAdsGivenSubscription":"You have left with 05 out of 50 ads given in the subscription.", "updateSubscription":"Update Subscription", "workInProgress":"Work In Progress", @@ -562,7 +562,7 @@ "inviteFriends": "Invite Friends", "more": "More", "language" :"Language", - "mySubscriptions": "My Subscriptions", + "mySubscriptions": "My Subscription", "subscriptions": "Subscriptions", "defineLicenses": "Define Licenses", "logOut": "Log Out", diff --git a/lib/classes/consts.dart b/lib/classes/consts.dart index 6a2a963..58c89a8 100644 --- a/lib/classes/consts.dart +++ b/lib/classes/consts.dart @@ -30,6 +30,7 @@ class ApiConsts { static String ChangeEmail = "${baseUrlServices}api/Account/ChangeEmail"; static String EmailVerify = "${baseUrlServices}api/Account/EmailVerify"; static String EmailVerifyOTPVerify = "${baseUrlServices}api/Account/EmailVerifyOTPVerify"; + static String LogoutUser = "${baseUrlServices}api/Account/Logout"; static String UpdateUserImage = "${baseUrlServices}api/User_UpdateProfileImage"; static String GetUserImage = "${baseUrlServices}api/ProfileImage"; diff --git a/lib/generated/codegen_loader.g.dart b/lib/generated/codegen_loader.g.dart index d893157..22be496 100644 --- a/lib/generated/codegen_loader.g.dart +++ b/lib/generated/codegen_loader.g.dart @@ -92,7 +92,7 @@ class CodegenLoader extends AssetLoader{ "userRoleOrTitle": "عنوان المستخدم", "codeSentToEmail": "تم ارسال الرمز للايميل", "number": "موبايل", - "english": "English", + "english": "عربي", "title": "مرحبًا", "msg": "Hello {} in the {} world ", "msg_named": "{} are written in the {lang} language", @@ -507,7 +507,7 @@ class CodegenLoader extends AssetLoader{ "submitAd": "إرسال الإعلان", "selectAdType": "اختر نوع الإعلان", "validUntilSubscriptionExpiration": "صالح حتى انتهاء الاشتراك", - "adsRemaining": "الإعلانات المتبقية", + "adsRemainingVar": "الإعلانات المتبقية", "youLeftAdsGivenSubscription": "لقد بقي لديك 05 من 50 إعلانًا في الاشتراك.", "updateSubscription": "تحديث الاشتراك", "workInProgress": "العمل جارٍ", @@ -577,7 +577,7 @@ class CodegenLoader extends AssetLoader{ "inviteFriends": "دعوة الأصدقاء", "more": "المزيد", "language": "اللغة", - "mySubscriptions": "اشتراكاتي", + "mySubscription": "اشتراكاتي", "subscriptions": "الاشتراكات", "defineLicenses": "تحديد التراخيص", "logOut": "تسجيل الخروج", @@ -663,7 +663,7 @@ static const Map en_US = { "userRoleOrTitle": "User role or title", "codeSentToEmail": "Code is sent to email", "number": "Number", - "english": "عربي", + "english": "English", "title": "Hello", "msg": "Hello {} in the {} world ", "msg_named": "{} are written in the {lang} language", @@ -1079,7 +1079,7 @@ static const Map en_US = { "submitAd": "Submit Ad", "selectAdType": "Select Ad Type", "validUntilSubscriptionExpiration": "Valid Until Subscription Expiration", - "adsRemaining ": "Ads Remaining", + "adsRemainingVar ": "Ads Remaining", "youLeftAdsGivenSubscription": "You have left with 05 out of 50 ads given in the subscription.", "updateSubscription": "Update Subscription", "workInProgress": "Work In Progress", @@ -1149,7 +1149,7 @@ static const Map en_US = { "inviteFriends": "Invite Friends", "more": "More", "language": "Language", - "mySubscriptions": "My Subscriptions", + "mySubscriptions": "My Subscription", "subscriptions": "Subscriptions", "defineLicenses": "Define Licenses", "logOut": "Log Out", diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index e854db3..f02cbb4 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -470,7 +470,7 @@ abstract class LocaleKeys { static const submitAd = 'submitAd'; static const selectAdType = 'selectAdType'; static const validUntilSubscriptionExpiration = 'validUntilSubscriptionExpiration'; - static const adsRemaining = 'adsRemaining'; + static const adsRemainingVar = 'adsRemainingVar'; static const youLeftAdsGivenSubscription = 'youLeftAdsGivenSubscription'; static const updateSubscription = 'updateSubscription'; static const workInProgress = 'workInProgress'; @@ -540,7 +540,7 @@ abstract class LocaleKeys { static const inviteFriends = 'inviteFriends'; static const more = 'more'; static const language = 'language'; - static const mySubscriptions = 'mySubscriptions'; + static const mySubscription = 'mySubscription'; static const subscriptions = 'subscriptions'; static const defineLicenses = 'defineLicenses'; static const logOut = 'logOut'; diff --git a/lib/models/subscriptions_models/provider_subscription_model.dart b/lib/models/subscriptions_models/provider_subscription_model.dart index 46a5c40..9cb2ae7 100644 --- a/lib/models/subscriptions_models/provider_subscription_model.dart +++ b/lib/models/subscriptions_models/provider_subscription_model.dart @@ -18,6 +18,9 @@ class ProviderSubscriptionModel { bool? isUpgradeLater; bool? isTrialSubscription; dynamic currentSubscription; + int? totalBranches; + int? totalSubUsers; + int? totalAds; ProviderSubscriptionModel({ this.id, @@ -36,7 +39,10 @@ class ProviderSubscriptionModel { this.isUpgradeLater, this.isTrialSubscription, this.currentSubscription, - this.subscriptionID + this.subscriptionID, + this.totalAds, + this.totalBranches, + this.totalSubUsers, }); factory ProviderSubscriptionModel.fromRawJson(String str) => ProviderSubscriptionModel.fromJson(json.decode(str)); @@ -44,42 +50,48 @@ class ProviderSubscriptionModel { String toRawJson() => json.encode(toJson()); factory ProviderSubscriptionModel.fromJson(Map json) => ProviderSubscriptionModel( - id: json["id"], - subscriptionAppliedId: json["subscriptionAppliedID"], - serviceProviderId: json["serviceProviderID"], - subscriptionID: json["subscriptionID"], - subscriptionName: json["subscriptionName"], - subscriptionDescription: json["subscriptionDescription"], - dateStart: json["dateStart"] == null ? null : DateTime.parse(json["dateStart"]), - dateEnd: json["dateEnd"] == null ? null : DateTime.parse(json["dateEnd"]), - branchesRemaining: json["branchesRemaining"], - subUsersRemaining: json["subUsersRemaining"], - adsRemaining: json["adsRemaining"], - isExpired: json["isExpired"], - isActive: json["isActive"], - isUpgradeNow: json["isUpgradeNow"], - isUpgradeLater: json["isUpgradeLater"], - isTrialSubscription: json["isTrialSubscription"], - currentSubscription: json["currentSubscription"], - ); + id: json["id"], + subscriptionAppliedId: json["subscriptionAppliedID"], + serviceProviderId: json["serviceProviderID"], + subscriptionID: json["subscriptionID"], + subscriptionName: json["subscriptionName"], + subscriptionDescription: json["subscriptionDescription"], + dateStart: json["dateStart"] == null ? null : DateTime.parse(json["dateStart"]), + dateEnd: json["dateEnd"] == null ? null : DateTime.parse(json["dateEnd"]), + branchesRemaining: json["branchesRemaining"], + subUsersRemaining: json["subUsersRemaining"], + adsRemaining: json["adsRemaining"], + isExpired: json["isExpired"], + isActive: json["isActive"], + isUpgradeNow: json["isUpgradeNow"], + isUpgradeLater: json["isUpgradeLater"], + isTrialSubscription: json["isTrialSubscription"], + currentSubscription: json["currentSubscription"], + totalBranches: json["totalBranches"], + totalAds: json["totalAds"], + totalSubUsers: json["totalSubUsers"], + ); Map toJson() => { - "id": id, - "subscriptionAppliedID": subscriptionAppliedId, - "serviceProviderID": serviceProviderId, - "subscriptionID": subscriptionID, - "subscriptionName": subscriptionName, - "subscriptionDescription": subscriptionDescription, - "dateStart": dateStart?.toIso8601String(), - "dateEnd": dateEnd?.toIso8601String(), - "branchesRemaining": branchesRemaining, - "subUsersRemaining": subUsersRemaining, - "adsRemaining": adsRemaining, - "isExpired": isExpired, - "isActive": isActive, - "isUpgradeNow": isUpgradeNow, - "isUpgradeLater": isUpgradeLater, - "isTrialSubscription":isTrialSubscription, - "currentSubscription": currentSubscription, - }; + "id": id, + "subscriptionAppliedID": subscriptionAppliedId, + "serviceProviderID": serviceProviderId, + "subscriptionID": subscriptionID, + "subscriptionName": subscriptionName, + "subscriptionDescription": subscriptionDescription, + "dateStart": dateStart?.toIso8601String(), + "dateEnd": dateEnd?.toIso8601String(), + "branchesRemaining": branchesRemaining, + "subUsersRemaining": subUsersRemaining, + "adsRemaining": adsRemaining, + "isExpired": isExpired, + "isActive": isActive, + "isUpgradeNow": isUpgradeNow, + "isUpgradeLater": isUpgradeLater, + "isTrialSubscription": isTrialSubscription, + "currentSubscription": currentSubscription, + "totalAds": totalAds, + "totalSubUsers": totalSubUsers, + "totalBranches": totalBranches, + }; } diff --git a/lib/models/subscriptions_models/subscription_model.dart b/lib/models/subscriptions_models/subscription_model.dart index 66d79f8..a7e979d 100644 --- a/lib/models/subscriptions_models/subscription_model.dart +++ b/lib/models/subscriptions_models/subscription_model.dart @@ -8,8 +8,7 @@ import 'package:mc_common_app/extensions/string_extensions.dart'; import '../../utils/enums.dart'; -Subscription subscriptionFromJson(String str) => - Subscription.fromJson(json.decode(str)); +Subscription subscriptionFromJson(String str) => Subscription.fromJson(json.decode(str)); String subscriptionToJson(Subscription data) => json.encode(data.toJson()); @@ -26,23 +25,17 @@ class SubscriptionModel { List? data; String? message; - factory SubscriptionModel.fromJson(Map json) => - SubscriptionModel( + factory SubscriptionModel.fromJson(Map json) => SubscriptionModel( messageStatus: json["messageStatus"], totalItemsCount: json["totalItemsCount"], - data: json["data"] == null - ? [] - : List.from( - json["data"]!.map((x) => Subscription.fromJson(x))), + data: json["data"] == null ? [] : List.from(json["data"]!.map((x) => Subscription.fromJson(x))), message: json["message"], ); Map toJson() => { "messageStatus": messageStatus, "totalItemsCount": totalItemsCount, - "data": data == null - ? [] - : List.from(data!.map((x) => x.toJson())), + "data": data == null ? [] : List.from(data!.map((x) => x.toJson())), "message": message, }; } @@ -69,6 +62,7 @@ class Subscription { this.isExpired, this.isActive, this.subscriptionTypeEnum, + this.isMyCurrentPackage, }); int? id; @@ -91,6 +85,7 @@ class Subscription { bool? isExpired; bool? isActive; SubscriptionTypeEnum? subscriptionTypeEnum; + bool? isMyCurrentPackage; factory Subscription.fromJson(Map json) => Subscription( id: json["id"], @@ -107,16 +102,13 @@ class Subscription { countryName: json["countryName"], isSubscribed: json["isSubscribed"], subscriptionAppliedId: json["subscriptionAppliedID"], - serviceProviderId: - json["serviceProviderID"], - dateStart: - json["dateStart"] == null ? null : DateTime.parse(json["dateStart"]), + serviceProviderId: json["serviceProviderID"], + dateStart: json["dateStart"] == null ? null : DateTime.parse(json["dateStart"]), dateEnd: json["dateEnd"] == null ? null : DateTime.parse(json["dateEnd"]), isExpired: json["isExpired"], isActive: json["isActive"], - subscriptionTypeEnum: json["subscriptionType"] == null - ? null - : ((json['subscriptionType']) as int).toSubscriptionTypeEnum()); + isMyCurrentPackage: false, + subscriptionTypeEnum: json["subscriptionType"] == null ? null : ((json['subscriptionType']) as int).toSubscriptionTypeEnum()); Map toJson() => { "id": id, diff --git a/lib/repositories/user_repo.dart b/lib/repositories/user_repo.dart index e423e4f..f5656ed 100644 --- a/lib/repositories/user_repo.dart +++ b/lib/repositories/user_repo.dart @@ -71,6 +71,8 @@ abstract class UserRepo { Future getUserImage(String image); + Future logoutUser(); + Future updateUserToken(); } @@ -275,7 +277,12 @@ class UserRepoImp implements UserRepo { String t = AppState().getUser.data!.accessToken ?? ""; debugPrint("token $t"); - return await injector.get().postJsonForObject((json) => ImageResponse.fromJson(json), ApiConsts.UpdateUserImage, postParams, token: t,); + return await injector.get().postJsonForObject( + (json) => ImageResponse.fromJson(json), + ApiConsts.UpdateUserImage, + postParams, + token: t, + ); } @override @@ -303,4 +310,10 @@ class UserRepoImp implements UserRepo { AppState().setUser = user; return refresh.data!.accessToken ?? ""; } + + Future logoutUser() async { + String t = AppState().getUser.data!.accessToken ?? ""; + var postParams = {"token": AppState().getUser.data!.accessToken ?? ""}; + return await injector.get().postJsonForResponse(ApiConsts.LogoutUser, postParams, token: t); + } } diff --git a/lib/view_models/subscriptions_view_model.dart b/lib/view_models/subscriptions_view_model.dart index 5f1ac44..f0ff88f 100644 --- a/lib/view_models/subscriptions_view_model.dart +++ b/lib/view_models/subscriptions_view_model.dart @@ -35,10 +35,11 @@ class SubscriptionsVM extends BaseVM { var idSet = {}; for (var d in allSubscriptions.data ?? []) { if (idSet.add(d.durationDays ?? 0)) { - monthlyTabs.add(DropValue(d.durationDays, _convertDaysToMonths(d.durationDays ?? 0), "")); + monthlyTabs.add(DropValue(d.durationDays, _convertDaysToMonths(d.durationDays ?? 0), "", isEnabled: false)); } } monthlyTabs.sort((a, b) => a.value.compareTo(b.value)); + monthlyTabs.first.isEnabled = true; selectedMothlyTab = monthlyTabs.first; filterSubscriptions(); setState(ViewState.idle); @@ -56,11 +57,13 @@ class SubscriptionsVM extends BaseVM { var idSet = {}; for (var d in allSubscriptions.data ?? []) { if (idSet.add(d.durationDays ?? 0)) { - monthlyTabs.add(DropValue(d.durationDays, _convertDaysToMonths(d.durationDays ?? 0), "")); + monthlyTabs.add(DropValue(d.durationDays, _convertDaysToMonths(d.durationDays ?? 0), "", isEnabled: false)); } } monthlyTabs.sort((a, b) => a.value.compareTo(b.value)); + monthlyTabs.first.isEnabled = true; selectedMothlyTab = monthlyTabs.first; + filterSubscriptions(); setState(ViewState.idle); } else { @@ -156,6 +159,9 @@ class SubscriptionsVM extends BaseVM { if (selectedMothlyTab.id == element.durationDays) { tempSubscriptions.add(element); } + if (element.id == AppState().getproviderSubscription.first.subscriptionID) { + element.isMyCurrentPackage = true; + } } } @@ -165,6 +171,7 @@ class SubscriptionsVM extends BaseVM { setState(ViewState.busy); // allSubscriptions = await subscriptionRepo.getAllSubscriptions(serviceProviderID); allSubscriptions = await subscriptionRepo.getMySubscriptions(serviceProviderID); + if (allSubscriptions.messageStatus == 1) { // allSubscriptions.data!.sort((a, b) => a.value.compareTo(b.value)); setState(ViewState.idle); diff --git a/lib/view_models/user_view_model.dart b/lib/view_models/user_view_model.dart index dcc2351..6e95508 100644 --- a/lib/view_models/user_view_model.dart +++ b/lib/view_models/user_view_model.dart @@ -1,16 +1,10 @@ import 'dart:convert'; import 'dart:io'; - -import 'package:device_info_plus/device_info_plus.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/cupertino.dart'; - -import 'package:http/http.dart'; -import 'package:huawei_fido/huawei_fido.dart'; -import 'package:image_picker/image_picker.dart'; +import 'package:http/src/response.dart'; import 'package:local_auth/local_auth.dart'; -import 'package:logger/logger.dart'; import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/config/routes.dart'; @@ -27,7 +21,6 @@ import 'package:mc_common_app/models/user_models/confirm_password.dart'; import 'package:mc_common_app/models/user_models/country.dart'; import 'package:mc_common_app/models/user_models/forget_password_otp_compare.dart'; import 'package:mc_common_app/models/user_models/forget_password_otp_request.dart'; -import 'package:mc_common_app/models/user_models/image_response.dart'; import 'package:mc_common_app/models/user_models/login_password.dart'; import 'package:mc_common_app/models/user_models/register_user.dart'; import 'package:mc_common_app/models/user_models/user.dart'; @@ -650,7 +643,18 @@ class UserVM extends BaseVM { notifyListeners(); } - void logout(BuildContext context) { - navigateReplaceWithNameUntilRoute(context, AppRoutes.loginWithPassword); + void logout(BuildContext context) async { + Response value = await userRepo.logoutUser(); + if (value.body.isNotEmpty) { + print(value.body); + print("Logout"); + } + SharedPrefManager.setPhoneOrEmail(""); + SharedPrefManager.setUserPassword(""); + if (AppState().getUser.data!.userInfo!.userLocalImage != null) { + AppState().getUser.data!.userInfo!.userLocalImage = null; + AppState().getUser.data!.userInfo!.userImageUrl = null; + } + navigateReplaceWithNameUntilRoute(context, AppRoutes.registerSelection); } } diff --git a/lib/views/advertisement/ad_creation_steps/ad_review_containers.dart b/lib/views/advertisement/ad_creation_steps/ad_review_containers.dart index 1c9107d..0926a29 100644 --- a/lib/views/advertisement/ad_creation_steps/ad_review_containers.dart +++ b/lib/views/advertisement/ad_creation_steps/ad_review_containers.dart @@ -245,7 +245,7 @@ class AdDurationReview extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - SingleDetailWidget(type: LocaleKeys.amount.tr(), text: adVM.specialServiceCards[index].serviceSelectedId!.itemPrice), + SingleDetailWidget(type: LocaleKeys.amountVAR.tr(), text: adVM.specialServiceCards[index].serviceSelectedId!.itemPrice), ], ), ), diff --git a/lib/views/advertisement/select_ad_type_view.dart b/lib/views/advertisement/select_ad_type_view.dart index fd9dc9b..22d9b0c 100644 --- a/lib/views/advertisement/select_ad_type_view.dart +++ b/lib/views/advertisement/select_ad_type_view.dart @@ -157,7 +157,7 @@ class SelectAdTypeView extends StatelessWidget { Row( children: [ "5 of 10 ".toText(fontSize: 29, isBold: true, letterSpacing: 0, height: 1), - LocaleKeys.adsRemaining.tr().toText(fontSize: 17, color: MyColors.lightTextColor, isBold: true), + LocaleKeys.adsRemainingVar.tr().toText(fontSize: 17, color: MyColors.lightTextColor, isBold: true), ], ), Text.rich( diff --git a/lib/views/setting_options/provider_license_page.dart b/lib/views/setting_options/provider_license_page.dart index 7ae9c9c..2c10b16 100644 --- a/lib/views/setting_options/provider_license_page.dart +++ b/lib/views/setting_options/provider_license_page.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:mc_common_app/classes/app_state.dart'; +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'; @@ -34,8 +35,7 @@ class _ProviderLicensePageState extends State { // TODO: implement initState super.initState(); branchVM = Provider.of(context, listen: false); - branchVM.getServiceProviderDocument( - AppState().getUser.data!.userInfo!.providerId ?? 0); + branchVM.getServiceProviderDocument(AppState().getUser.data!.userInfo!.providerId ?? 0); } @override @@ -74,13 +74,14 @@ class _ProviderLicensePageState extends State { if (validation(model)) { updateDocument(model); } else { - Utils.showToast(LocaleKeys - .allDocumentMandatoryDealershipProvider - .tr()); + Utils.showToast(LocaleKeys.allDocumentMandatoryDealershipProvider.tr()); } } else { updateDocument(model); } + Future.delayed(const Duration(seconds: 1), () { + Navigator.of(context).pop(); + }); }, ), ), @@ -127,27 +128,19 @@ class _ProviderLicensePageState extends State { ), ), Padding( - padding: const EdgeInsets.only( - left: 20, right: 20, top: 4, bottom: 8), - child: LocaleKeys.enter_licence_detail.tr().toText( - fontSize: 14, - color: MyColors.lightTextColor, - textAlign: TextAlign.center), + padding: const EdgeInsets.only(left: 20, right: 20, top: 4, bottom: 8), + child: LocaleKeys.enter_licence_detail.tr().toText(fontSize: 14, color: MyColors.lightTextColor, textAlign: TextAlign.center), ), TxtField( hint: LocaleKeys.description.tr(), maxLines: 3, isBackgroundEnabled: true, ), - if ((model.document?.data![index].documentUrl ?? "") - .toString() - .isNotEmpty) + if ((model.document?.data![index].documentUrl ?? "").toString().isNotEmpty) Column( children: [ 8.height, - (model.document?.data![index].documentUrl ?? "") - .toString() - .toText( + (model.document?.data![index].documentUrl ?? "").toString().toText( fontSize: 14, color: MyColors.lightTextColor, ), @@ -163,10 +156,8 @@ class _ProviderLicensePageState extends State { height: 45, decoration: BoxDecoration( color: Colors.transparent, - border: - Border.all(color: MyColors.greyACColor, width: 2), - borderRadius: - const BorderRadius.all(Radius.circular(0)), + border: Border.all(color: MyColors.greyACColor, width: 2), + borderRadius: const BorderRadius.all(Radius.circular(0)), ), child: Row( mainAxisAlignment: MainAxisAlignment.center, diff --git a/lib/views/setting_options/setting_options_language.dart b/lib/views/setting_options/setting_options_language.dart index 282ab5d..22bf940 100644 --- a/lib/views/setting_options/setting_options_language.dart +++ b/lib/views/setting_options/setting_options_language.dart @@ -103,8 +103,8 @@ class SettingOptionsLanguage extends StatelessWidget { color: MyColors.primaryColor, ), ), - titleText: LocaleKeys.mySubscriptions.tr(), - subTitle: "Silver", + titleText: LocaleKeys.mySubscription.tr(), + subTitle: AppState().getproviderSubscription.first.subscriptionName ?? "Silver", isForLanguage: false, needBorderBelow: true, onTap: () { diff --git a/lib/views/user/login_with_password_page.dart b/lib/views/user/login_with_password_page.dart index 51835a4..c6f1bb3 100644 --- a/lib/views/user/login_with_password_page.dart +++ b/lib/views/user/login_with_password_page.dart @@ -49,8 +49,10 @@ class _LoginWithPasswordState extends State { userVM = Provider.of(context, listen: false); context.read().getAvailBio(); if (AppState().currentAppType == AppType.provider) { - phoneNum = "966530896018"; - password = "Amir@1234"; + // phoneNum = "966530896018"; + // password = "Amir@1234"; + phoneNum = "966569755630"; + password = "Amir12345@"; } getCountryList(); diff --git a/lib/widgets/common_widgets/app_bar.dart b/lib/widgets/common_widgets/app_bar.dart index 340bfa1..0dec6b6 100644 --- a/lib/widgets/common_widgets/app_bar.dart +++ b/lib/widgets/common_widgets/app_bar.dart @@ -42,6 +42,7 @@ class CustomAppBar extends StatelessWidget implements PreferredSizeWidget { @override Widget build(BuildContext context) { + // print("User Image URL == ${AppState().getUser.data!.userInfo!.userImageUrl} ============"); return Column( children: [ AppBar( @@ -64,27 +65,24 @@ class CustomAppBar extends StatelessWidget implements PreferredSizeWidget { ).toCircle(borderRadius: 100) : profileImageUrl.isEmpty && AppState().getUser.data!.userInfo!.userImageUrl != null ? CachedNetworkImage( - imageUrl: AppState().getUser.data!.userInfo!.userImageUrl, - imageBuilder: (context, imageProvider) => - Container( - decoration: BoxDecoration( - image: DecorationImage( - image: imageProvider, - fit: BoxFit.cover, + imageUrl: AppState().getUser.data!.userInfo!.userImageUrl, + imageBuilder: (context, imageProvider) => + Container( + decoration: BoxDecoration( + image: DecorationImage( + image: imageProvider, + fit: BoxFit.cover, + ), ), ), - ), - placeholder: (context, url) => const Center(child: CircularProgressIndicator()), - errorWidget: (context, url, error) => const Icon(Icons.error), - fadeInCurve: Curves.easeIn, - width: 34, - height: 34, - fit: BoxFit.fill, - - fadeInDuration: Duration(milliseconds: 1000), - useOldImageOnUrlChange: false, - - + placeholder: (context, url) => const Center(child: CircularProgressIndicator()), + errorWidget: (context, url, error) => const Icon(Icons.supervised_user_circle_outlined), + fadeInCurve: Curves.easeIn, + width: 34, + height: 34, + fit: BoxFit.fill, + fadeInDuration: Duration(milliseconds: 1000), + useOldImageOnUrlChange: false ).toCircle(borderRadius: 100) : Image.asset( MyAssets.carBanner, diff --git a/lib/widgets/tab/menu_tabs.dart b/lib/widgets/tab/menu_tabs.dart index 88e12d1..743719f 100644 --- a/lib/widgets/tab/menu_tabs.dart +++ b/lib/widgets/tab/menu_tabs.dart @@ -3,19 +3,13 @@ import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart'; -class MenuTabs extends StatefulWidget { - int selectedIndex; +class MenuTabs extends StatelessWidget { List dropList; - Function(DropValue value) onSelect; + Function(DropValue value, int index ) onSelected; Color? selectedColor; - MenuTabs(this.selectedIndex, this.dropList, {required this.onSelect, this.selectedColor}); + MenuTabs(this.dropList, {required this.onSelected, this.selectedColor}); - @override - State createState() => _RoleTypeTabState(); -} - -class _RoleTypeTabState extends State { @override Widget build(BuildContext context) { return SizedBox( @@ -25,24 +19,21 @@ class _RoleTypeTabState extends State { itemBuilder: (context, index) { return InkWell( onTap: () { - setState(() { - widget.selectedIndex = index; - widget.onSelect(widget.dropList[index]); - }); + onSelected(dropList[index], index); }, child: Container( height: 45, decoration: BoxDecoration( - color: widget.selectedIndex == index ? widget.selectedColor ?? MyColors.darkIconColor : Colors.white, - border: Border.all(color: widget.selectedIndex == index ? widget.selectedColor ?? MyColors.darkIconColor : MyColors.darkPrimaryColor, width: 1.5), + color: dropList[index].isEnabled! ? selectedColor ?? MyColors.darkIconColor : Colors.white, + border: Border.all(color: dropList[index].isEnabled! ? selectedColor ?? MyColors.darkIconColor : MyColors.darkPrimaryColor, width: 1.5), borderRadius: const BorderRadius.all(Radius.circular(0)), ), padding: const EdgeInsets.symmetric(horizontal: 20), child: Center( child: Text( - widget.dropList[index].value, + dropList[index].value, style: TextStyle( - color: widget.selectedIndex == index ? MyColors.white : Colors.black, + color: dropList[index].isEnabled! ? MyColors.white : Colors.black, fontSize: 12, fontWeight: FontWeight.w600, ), @@ -55,7 +46,7 @@ class _RoleTypeTabState extends State { return 12.width; }, padding: const EdgeInsets.symmetric(horizontal: 21), - itemCount: widget.dropList.length, + itemCount: dropList.length, scrollDirection: Axis.horizontal, ), ); diff --git a/lib/widgets/tab/role_type_tab.dart b/lib/widgets/tab/role_type_tab.dart index a3983cf..f26f789 100644 --- a/lib/widgets/tab/role_type_tab.dart +++ b/lib/widgets/tab/role_type_tab.dart @@ -20,7 +20,7 @@ class _RoleTypeTabState extends State { Widget build(BuildContext context) { return SizedBox( width: double.infinity, - height: 45, + height: 50, child: ListView.separated( itemBuilder: (context, index) { return InkWell( @@ -32,7 +32,7 @@ class _RoleTypeTabState extends State { }, child: Container( width: widget.width ?? (MediaQuery.of(context).size.width / 2) - 30, - height: 45, + height: 50, decoration: BoxDecoration( color: widget.selectedIndex == index ? MyColors.darkPrimaryColor : Colors.grey[200], // border: Border.all(color: type == ClassType.NUMBER ? MyColors.darkPrimaryColor : Colors.transparent, width: 2), @@ -43,13 +43,16 @@ class _RoleTypeTabState extends State { child: Center( child: Text( (widget.dropList[index].value) == "ServiceProvider_Dealership" || (widget.dropList[index].value) == "ServiceProvider_Individual" - ? widget.dropList[index].value.split("_").first + "\n" + widget.dropList[index].value.split("_").last + ? "${widget.dropList[index].value.split("_").first}\n${widget.dropList[index].value.split("_").last}" : widget.dropList[index].value, textAlign: TextAlign.center, + style: TextStyle( color: widget.selectedIndex == index ? MyColors.white : Colors.black, fontSize: 15, + height: 1 ), + ), ), ),