subscription & profile

master_new_changes
Aamir.Muhammad 2 years ago
parent cb04d4a2fb
commit b4a3819c36

@ -76,7 +76,7 @@
"userRoleOrTitle": "عنوان المستخدم", "userRoleOrTitle": "عنوان المستخدم",
"codeSentToEmail": "تم ارسال الرمز للايميل", "codeSentToEmail": "تم ارسال الرمز للايميل",
"number": "موبايل", "number": "موبايل",
"english": "English", "english": "عربي",
"title": "مرحبًا", "title": "مرحبًا",
"msg": "Hello {} in the {} world ", "msg": "Hello {} in the {} world ",
"msg_named": "{} are written in the {lang} language", "msg_named": "{} are written in the {lang} language",
@ -491,7 +491,7 @@
"submitAd": "إرسال الإعلان", "submitAd": "إرسال الإعلان",
"selectAdType": "اختر نوع الإعلان", "selectAdType": "اختر نوع الإعلان",
"validUntilSubscriptionExpiration": "صالح حتى انتهاء الاشتراك", "validUntilSubscriptionExpiration": "صالح حتى انتهاء الاشتراك",
"adsRemaining": "الإعلانات المتبقية", "adsRemainingVar": "الإعلانات المتبقية",
"youLeftAdsGivenSubscription": "لقد بقي لديك 05 من 50 إعلانًا في الاشتراك.", "youLeftAdsGivenSubscription": "لقد بقي لديك 05 من 50 إعلانًا في الاشتراك.",
"updateSubscription": "تحديث الاشتراك", "updateSubscription": "تحديث الاشتراك",
"workInProgress": "العمل جارٍ", "workInProgress": "العمل جارٍ",
@ -561,7 +561,7 @@
"inviteFriends": "دعوة الأصدقاء", "inviteFriends": "دعوة الأصدقاء",
"more": "المزيد", "more": "المزيد",
"language": "اللغة", "language": "اللغة",
"mySubscriptions": "اشتراكاتي", "mySubscription": "اشتراكاتي",
"subscriptions": "الاشتراكات", "subscriptions": "الاشتراكات",
"defineLicenses": "تحديد التراخيص", "defineLicenses": "تحديد التراخيص",
"logOut": "تسجيل الخروج", "logOut": "تسجيل الخروج",

@ -76,7 +76,7 @@
"userRoleOrTitle": "User role or title", "userRoleOrTitle": "User role or title",
"codeSentToEmail": "Code is sent to email", "codeSentToEmail": "Code is sent to email",
"number": "Number", "number": "Number",
"english": "عربي", "english": "English",
"title": "Hello", "title": "Hello",
"msg": "Hello {} in the {} world ", "msg": "Hello {} in the {} world ",
"msg_named": "{} are written in the {lang} language", "msg_named": "{} are written in the {lang} language",
@ -492,7 +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",
"adsRemaining ":"Ads Remaining", "adsRemainingVar ":"Ads Remaining",
"youLeftAdsGivenSubscription":"You have left with 05 out of 50 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",
@ -562,7 +562,7 @@
"inviteFriends": "Invite Friends", "inviteFriends": "Invite Friends",
"more": "More", "more": "More",
"language" :"Language", "language" :"Language",
"mySubscriptions": "My Subscriptions", "mySubscriptions": "My Subscription",
"subscriptions": "Subscriptions", "subscriptions": "Subscriptions",
"defineLicenses": "Define Licenses", "defineLicenses": "Define Licenses",
"logOut": "Log Out", "logOut": "Log Out",

@ -30,6 +30,7 @@ class ApiConsts {
static String ChangeEmail = "${baseUrlServices}api/Account/ChangeEmail"; static String ChangeEmail = "${baseUrlServices}api/Account/ChangeEmail";
static String EmailVerify = "${baseUrlServices}api/Account/EmailVerify"; static String EmailVerify = "${baseUrlServices}api/Account/EmailVerify";
static String EmailVerifyOTPVerify = "${baseUrlServices}api/Account/EmailVerifyOTPVerify"; static String EmailVerifyOTPVerify = "${baseUrlServices}api/Account/EmailVerifyOTPVerify";
static String LogoutUser = "${baseUrlServices}api/Account/Logout";
static String UpdateUserImage = "${baseUrlServices}api/User_UpdateProfileImage"; static String UpdateUserImage = "${baseUrlServices}api/User_UpdateProfileImage";
static String GetUserImage = "${baseUrlServices}api/ProfileImage"; static String GetUserImage = "${baseUrlServices}api/ProfileImage";

@ -92,7 +92,7 @@ class CodegenLoader extends AssetLoader{
"userRoleOrTitle": "عنوان المستخدم", "userRoleOrTitle": "عنوان المستخدم",
"codeSentToEmail": "تم ارسال الرمز للايميل", "codeSentToEmail": "تم ارسال الرمز للايميل",
"number": "موبايل", "number": "موبايل",
"english": "English", "english": "عربي",
"title": "مرحبًا", "title": "مرحبًا",
"msg": "Hello {} in the {} world ", "msg": "Hello {} in the {} world ",
"msg_named": "{} are written in the {lang} language", "msg_named": "{} are written in the {lang} language",
@ -507,7 +507,7 @@ class CodegenLoader extends AssetLoader{
"submitAd": "إرسال الإعلان", "submitAd": "إرسال الإعلان",
"selectAdType": "اختر نوع الإعلان", "selectAdType": "اختر نوع الإعلان",
"validUntilSubscriptionExpiration": "صالح حتى انتهاء الاشتراك", "validUntilSubscriptionExpiration": "صالح حتى انتهاء الاشتراك",
"adsRemaining": "الإعلانات المتبقية", "adsRemainingVar": "الإعلانات المتبقية",
"youLeftAdsGivenSubscription": "لقد بقي لديك 05 من 50 إعلانًا في الاشتراك.", "youLeftAdsGivenSubscription": "لقد بقي لديك 05 من 50 إعلانًا في الاشتراك.",
"updateSubscription": "تحديث الاشتراك", "updateSubscription": "تحديث الاشتراك",
"workInProgress": "العمل جارٍ", "workInProgress": "العمل جارٍ",
@ -577,7 +577,7 @@ class CodegenLoader extends AssetLoader{
"inviteFriends": "دعوة الأصدقاء", "inviteFriends": "دعوة الأصدقاء",
"more": "المزيد", "more": "المزيد",
"language": "اللغة", "language": "اللغة",
"mySubscriptions": "اشتراكاتي", "mySubscription": "اشتراكاتي",
"subscriptions": "الاشتراكات", "subscriptions": "الاشتراكات",
"defineLicenses": "تحديد التراخيص", "defineLicenses": "تحديد التراخيص",
"logOut": "تسجيل الخروج", "logOut": "تسجيل الخروج",
@ -663,7 +663,7 @@ static const Map<String,dynamic> en_US = {
"userRoleOrTitle": "User role or title", "userRoleOrTitle": "User role or title",
"codeSentToEmail": "Code is sent to email", "codeSentToEmail": "Code is sent to email",
"number": "Number", "number": "Number",
"english": "عربي", "english": "English",
"title": "Hello", "title": "Hello",
"msg": "Hello {} in the {} world ", "msg": "Hello {} in the {} world ",
"msg_named": "{} are written in the {lang} language", "msg_named": "{} are written in the {lang} language",
@ -1079,7 +1079,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",
"adsRemaining ": "Ads Remaining", "adsRemainingVar ": "Ads Remaining",
"youLeftAdsGivenSubscription": "You have left with 05 out of 50 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",
@ -1149,7 +1149,7 @@ static const Map<String,dynamic> en_US = {
"inviteFriends": "Invite Friends", "inviteFriends": "Invite Friends",
"more": "More", "more": "More",
"language": "Language", "language": "Language",
"mySubscriptions": "My Subscriptions", "mySubscriptions": "My Subscription",
"subscriptions": "Subscriptions", "subscriptions": "Subscriptions",
"defineLicenses": "Define Licenses", "defineLicenses": "Define Licenses",
"logOut": "Log Out", "logOut": "Log Out",

@ -470,7 +470,7 @@ 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 adsRemaining = 'adsRemaining'; 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';
@ -540,7 +540,7 @@ abstract class LocaleKeys {
static const inviteFriends = 'inviteFriends'; static const inviteFriends = 'inviteFriends';
static const more = 'more'; static const more = 'more';
static const language = 'language'; static const language = 'language';
static const mySubscriptions = 'mySubscriptions'; static const mySubscription = 'mySubscription';
static const subscriptions = 'subscriptions'; static const subscriptions = 'subscriptions';
static const defineLicenses = 'defineLicenses'; static const defineLicenses = 'defineLicenses';
static const logOut = 'logOut'; static const logOut = 'logOut';

@ -18,6 +18,9 @@ class ProviderSubscriptionModel {
bool? isUpgradeLater; bool? isUpgradeLater;
bool? isTrialSubscription; bool? isTrialSubscription;
dynamic currentSubscription; dynamic currentSubscription;
int? totalBranches;
int? totalSubUsers;
int? totalAds;
ProviderSubscriptionModel({ ProviderSubscriptionModel({
this.id, this.id,
@ -36,7 +39,10 @@ class ProviderSubscriptionModel {
this.isUpgradeLater, this.isUpgradeLater,
this.isTrialSubscription, this.isTrialSubscription,
this.currentSubscription, this.currentSubscription,
this.subscriptionID this.subscriptionID,
this.totalAds,
this.totalBranches,
this.totalSubUsers,
}); });
factory ProviderSubscriptionModel.fromRawJson(String str) => ProviderSubscriptionModel.fromJson(json.decode(str)); factory ProviderSubscriptionModel.fromRawJson(String str) => ProviderSubscriptionModel.fromJson(json.decode(str));
@ -44,42 +50,48 @@ class ProviderSubscriptionModel {
String toRawJson() => json.encode(toJson()); String toRawJson() => json.encode(toJson());
factory ProviderSubscriptionModel.fromJson(Map<String, dynamic> json) => ProviderSubscriptionModel( factory ProviderSubscriptionModel.fromJson(Map<String, dynamic> json) => ProviderSubscriptionModel(
id: json["id"], id: json["id"],
subscriptionAppliedId: json["subscriptionAppliedID"], subscriptionAppliedId: json["subscriptionAppliedID"],
serviceProviderId: json["serviceProviderID"], serviceProviderId: json["serviceProviderID"],
subscriptionID: json["subscriptionID"], subscriptionID: json["subscriptionID"],
subscriptionName: json["subscriptionName"], subscriptionName: json["subscriptionName"],
subscriptionDescription: json["subscriptionDescription"], subscriptionDescription: json["subscriptionDescription"],
dateStart: json["dateStart"] == null ? null : DateTime.parse(json["dateStart"]), dateStart: json["dateStart"] == null ? null : DateTime.parse(json["dateStart"]),
dateEnd: json["dateEnd"] == null ? null : DateTime.parse(json["dateEnd"]), dateEnd: json["dateEnd"] == null ? null : DateTime.parse(json["dateEnd"]),
branchesRemaining: json["branchesRemaining"], branchesRemaining: json["branchesRemaining"],
subUsersRemaining: json["subUsersRemaining"], subUsersRemaining: json["subUsersRemaining"],
adsRemaining: json["adsRemaining"], adsRemaining: json["adsRemaining"],
isExpired: json["isExpired"], isExpired: json["isExpired"],
isActive: json["isActive"], isActive: json["isActive"],
isUpgradeNow: json["isUpgradeNow"], isUpgradeNow: json["isUpgradeNow"],
isUpgradeLater: json["isUpgradeLater"], isUpgradeLater: json["isUpgradeLater"],
isTrialSubscription: json["isTrialSubscription"], isTrialSubscription: json["isTrialSubscription"],
currentSubscription: json["currentSubscription"], currentSubscription: json["currentSubscription"],
); totalBranches: json["totalBranches"],
totalAds: json["totalAds"],
totalSubUsers: json["totalSubUsers"],
);
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
"id": id, "id": id,
"subscriptionAppliedID": subscriptionAppliedId, "subscriptionAppliedID": subscriptionAppliedId,
"serviceProviderID": serviceProviderId, "serviceProviderID": serviceProviderId,
"subscriptionID": subscriptionID, "subscriptionID": subscriptionID,
"subscriptionName": subscriptionName, "subscriptionName": subscriptionName,
"subscriptionDescription": subscriptionDescription, "subscriptionDescription": subscriptionDescription,
"dateStart": dateStart?.toIso8601String(), "dateStart": dateStart?.toIso8601String(),
"dateEnd": dateEnd?.toIso8601String(), "dateEnd": dateEnd?.toIso8601String(),
"branchesRemaining": branchesRemaining, "branchesRemaining": branchesRemaining,
"subUsersRemaining": subUsersRemaining, "subUsersRemaining": subUsersRemaining,
"adsRemaining": adsRemaining, "adsRemaining": adsRemaining,
"isExpired": isExpired, "isExpired": isExpired,
"isActive": isActive, "isActive": isActive,
"isUpgradeNow": isUpgradeNow, "isUpgradeNow": isUpgradeNow,
"isUpgradeLater": isUpgradeLater, "isUpgradeLater": isUpgradeLater,
"isTrialSubscription":isTrialSubscription, "isTrialSubscription": isTrialSubscription,
"currentSubscription": currentSubscription, "currentSubscription": currentSubscription,
}; "totalAds": totalAds,
"totalSubUsers": totalSubUsers,
"totalBranches": totalBranches,
};
} }

@ -8,8 +8,7 @@ import 'package:mc_common_app/extensions/string_extensions.dart';
import '../../utils/enums.dart'; import '../../utils/enums.dart';
Subscription subscriptionFromJson(String str) => Subscription subscriptionFromJson(String str) => Subscription.fromJson(json.decode(str));
Subscription.fromJson(json.decode(str));
String subscriptionToJson(Subscription data) => json.encode(data.toJson()); String subscriptionToJson(Subscription data) => json.encode(data.toJson());
@ -26,23 +25,17 @@ class SubscriptionModel {
List<Subscription>? data; List<Subscription>? data;
String? message; String? message;
factory SubscriptionModel.fromJson(Map<String, dynamic> json) => factory SubscriptionModel.fromJson(Map<String, dynamic> json) => SubscriptionModel(
SubscriptionModel(
messageStatus: json["messageStatus"], messageStatus: json["messageStatus"],
totalItemsCount: json["totalItemsCount"], totalItemsCount: json["totalItemsCount"],
data: json["data"] == null data: json["data"] == null ? [] : List<Subscription>.from(json["data"]!.map((x) => Subscription.fromJson(x))),
? []
: List<Subscription>.from(
json["data"]!.map((x) => Subscription.fromJson(x))),
message: json["message"], message: json["message"],
); );
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
"messageStatus": messageStatus, "messageStatus": messageStatus,
"totalItemsCount": totalItemsCount, "totalItemsCount": totalItemsCount,
"data": data == null "data": data == null ? [] : List<dynamic>.from(data!.map((x) => x.toJson())),
? []
: List<dynamic>.from(data!.map((x) => x.toJson())),
"message": message, "message": message,
}; };
} }
@ -69,6 +62,7 @@ class Subscription {
this.isExpired, this.isExpired,
this.isActive, this.isActive,
this.subscriptionTypeEnum, this.subscriptionTypeEnum,
this.isMyCurrentPackage,
}); });
int? id; int? id;
@ -91,6 +85,7 @@ class Subscription {
bool? isExpired; bool? isExpired;
bool? isActive; bool? isActive;
SubscriptionTypeEnum? subscriptionTypeEnum; SubscriptionTypeEnum? subscriptionTypeEnum;
bool? isMyCurrentPackage;
factory Subscription.fromJson(Map<String, dynamic> json) => Subscription( factory Subscription.fromJson(Map<String, dynamic> json) => Subscription(
id: json["id"], id: json["id"],
@ -107,16 +102,13 @@ class Subscription {
countryName: json["countryName"], countryName: json["countryName"],
isSubscribed: json["isSubscribed"], isSubscribed: json["isSubscribed"],
subscriptionAppliedId: json["subscriptionAppliedID"], subscriptionAppliedId: json["subscriptionAppliedID"],
serviceProviderId: serviceProviderId: json["serviceProviderID"],
json["serviceProviderID"], dateStart: json["dateStart"] == null ? null : DateTime.parse(json["dateStart"]),
dateStart:
json["dateStart"] == null ? null : DateTime.parse(json["dateStart"]),
dateEnd: json["dateEnd"] == null ? null : DateTime.parse(json["dateEnd"]), dateEnd: json["dateEnd"] == null ? null : DateTime.parse(json["dateEnd"]),
isExpired: json["isExpired"], isExpired: json["isExpired"],
isActive: json["isActive"], isActive: json["isActive"],
subscriptionTypeEnum: json["subscriptionType"] == null isMyCurrentPackage: false,
? null subscriptionTypeEnum: json["subscriptionType"] == null ? null : ((json['subscriptionType']) as int).toSubscriptionTypeEnum());
: ((json['subscriptionType']) as int).toSubscriptionTypeEnum());
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
"id": id, "id": id,

@ -71,6 +71,8 @@ abstract class UserRepo {
Future<ImageResponse> getUserImage(String image); Future<ImageResponse> getUserImage(String image);
Future<Response> logoutUser();
Future<String> updateUserToken(); Future<String> updateUserToken();
} }
@ -275,7 +277,12 @@ class UserRepoImp implements UserRepo {
String t = AppState().getUser.data!.accessToken ?? ""; String t = AppState().getUser.data!.accessToken ?? "";
debugPrint("token $t"); debugPrint("token $t");
return await injector.get<ApiClient>().postJsonForObject((json) => ImageResponse.fromJson(json), ApiConsts.UpdateUserImage, postParams, token: t,); return await injector.get<ApiClient>().postJsonForObject(
(json) => ImageResponse.fromJson(json),
ApiConsts.UpdateUserImage,
postParams,
token: t,
);
} }
@override @override
@ -303,4 +310,10 @@ class UserRepoImp implements UserRepo {
AppState().setUser = user; AppState().setUser = user;
return refresh.data!.accessToken ?? ""; return refresh.data!.accessToken ?? "";
} }
Future<Response> logoutUser() async {
String t = AppState().getUser.data!.accessToken ?? "";
var postParams = {"token": AppState().getUser.data!.accessToken ?? ""};
return await injector.get<ApiClient>().postJsonForResponse(ApiConsts.LogoutUser, postParams, token: t);
}
} }

@ -35,10 +35,11 @@ class SubscriptionsVM extends BaseVM {
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), "")); 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;
selectedMothlyTab = monthlyTabs.first; selectedMothlyTab = monthlyTabs.first;
filterSubscriptions(); filterSubscriptions();
setState(ViewState.idle); setState(ViewState.idle);
@ -56,11 +57,13 @@ class SubscriptionsVM extends BaseVM {
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), "")); 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;
selectedMothlyTab = monthlyTabs.first; selectedMothlyTab = monthlyTabs.first;
filterSubscriptions(); filterSubscriptions();
setState(ViewState.idle); setState(ViewState.idle);
} else { } else {
@ -156,6 +159,9 @@ class SubscriptionsVM extends BaseVM {
if (selectedMothlyTab.id == element.durationDays) { if (selectedMothlyTab.id == element.durationDays) {
tempSubscriptions.add(element); tempSubscriptions.add(element);
} }
if (element.id == AppState().getproviderSubscription.first.subscriptionID) {
element.isMyCurrentPackage = true;
}
} }
} }
@ -165,6 +171,7 @@ class SubscriptionsVM extends BaseVM {
setState(ViewState.busy); setState(ViewState.busy);
// allSubscriptions = await subscriptionRepo.getAllSubscriptions(serviceProviderID); // allSubscriptions = await subscriptionRepo.getAllSubscriptions(serviceProviderID);
allSubscriptions = await subscriptionRepo.getMySubscriptions(serviceProviderID); allSubscriptions = await subscriptionRepo.getMySubscriptions(serviceProviderID);
if (allSubscriptions.messageStatus == 1) { if (allSubscriptions.messageStatus == 1) {
// allSubscriptions.data!.sort((a, b) => a.value.compareTo(b.value)); // allSubscriptions.data!.sort((a, b) => a.value.compareTo(b.value));
setState(ViewState.idle); setState(ViewState.idle);

@ -1,16 +1,10 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:file_picker/file_picker.dart'; import 'package:file_picker/file_picker.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:http/src/response.dart';
import 'package:http/http.dart';
import 'package:huawei_fido/huawei_fido.dart';
import 'package:image_picker/image_picker.dart';
import 'package:local_auth/local_auth.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/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/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/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_compare.dart';
import 'package:mc_common_app/models/user_models/forget_password_otp_request.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/login_password.dart';
import 'package:mc_common_app/models/user_models/register_user.dart'; import 'package:mc_common_app/models/user_models/register_user.dart';
import 'package:mc_common_app/models/user_models/user.dart'; import 'package:mc_common_app/models/user_models/user.dart';
@ -650,7 +643,18 @@ class UserVM extends BaseVM {
notifyListeners(); notifyListeners();
} }
void logout(BuildContext context) { void logout(BuildContext context) async {
navigateReplaceWithNameUntilRoute(context, AppRoutes.loginWithPassword); 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);
} }
} }

@ -245,7 +245,7 @@ class AdDurationReview extends StatelessWidget {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
SingleDetailWidget(type: LocaleKeys.amount.tr(), text: adVM.specialServiceCards[index].serviceSelectedId!.itemPrice), SingleDetailWidget(type: LocaleKeys.amountVAR.tr(), text: adVM.specialServiceCards[index].serviceSelectedId!.itemPrice),
], ],
), ),
), ),

@ -157,7 +157,7 @@ class SelectAdTypeView extends StatelessWidget {
Row( Row(
children: [ children: [
"5 of 10 ".toText(fontSize: 29, isBold: true, letterSpacing: 0, height: 1), "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( Text.rich(

@ -3,6 +3,7 @@ import 'dart:io';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.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/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';
@ -34,8 +35,7 @@ class _ProviderLicensePageState extends State<ProviderLicensePage> {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
branchVM = Provider.of<ServiceVM>(context, listen: false); branchVM = Provider.of<ServiceVM>(context, listen: false);
branchVM.getServiceProviderDocument( branchVM.getServiceProviderDocument(AppState().getUser.data!.userInfo!.providerId ?? 0);
AppState().getUser.data!.userInfo!.providerId ?? 0);
} }
@override @override
@ -74,13 +74,14 @@ class _ProviderLicensePageState extends State<ProviderLicensePage> {
if (validation(model)) { if (validation(model)) {
updateDocument(model); updateDocument(model);
} else { } else {
Utils.showToast(LocaleKeys Utils.showToast(LocaleKeys.allDocumentMandatoryDealershipProvider.tr());
.allDocumentMandatoryDealershipProvider
.tr());
} }
} else { } else {
updateDocument(model); updateDocument(model);
} }
Future.delayed(const Duration(seconds: 1), () {
Navigator.of(context).pop();
});
}, },
), ),
), ),
@ -127,27 +128,19 @@ class _ProviderLicensePageState extends State<ProviderLicensePage> {
), ),
), ),
Padding( Padding(
padding: const EdgeInsets.only( padding: const EdgeInsets.only(left: 20, right: 20, top: 4, bottom: 8),
left: 20, right: 20, top: 4, bottom: 8), child: LocaleKeys.enter_licence_detail.tr().toText(fontSize: 14, color: MyColors.lightTextColor, textAlign: TextAlign.center),
child: LocaleKeys.enter_licence_detail.tr().toText(
fontSize: 14,
color: MyColors.lightTextColor,
textAlign: TextAlign.center),
), ),
TxtField( TxtField(
hint: LocaleKeys.description.tr(), hint: LocaleKeys.description.tr(),
maxLines: 3, maxLines: 3,
isBackgroundEnabled: true, isBackgroundEnabled: true,
), ),
if ((model.document?.data![index].documentUrl ?? "") if ((model.document?.data![index].documentUrl ?? "").toString().isNotEmpty)
.toString()
.isNotEmpty)
Column( Column(
children: [ children: [
8.height, 8.height,
(model.document?.data![index].documentUrl ?? "") (model.document?.data![index].documentUrl ?? "").toString().toText(
.toString()
.toText(
fontSize: 14, fontSize: 14,
color: MyColors.lightTextColor, color: MyColors.lightTextColor,
), ),
@ -163,10 +156,8 @@ class _ProviderLicensePageState extends State<ProviderLicensePage> {
height: 45, height: 45,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.transparent, color: Colors.transparent,
border: border: Border.all(color: MyColors.greyACColor, width: 2),
Border.all(color: MyColors.greyACColor, width: 2), borderRadius: const BorderRadius.all(Radius.circular(0)),
borderRadius:
const BorderRadius.all(Radius.circular(0)),
), ),
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,

@ -103,8 +103,8 @@ class SettingOptionsLanguage extends StatelessWidget {
color: MyColors.primaryColor, color: MyColors.primaryColor,
), ),
), ),
titleText: LocaleKeys.mySubscriptions.tr(), titleText: LocaleKeys.mySubscription.tr(),
subTitle: "Silver", subTitle: AppState().getproviderSubscription.first.subscriptionName ?? "Silver",
isForLanguage: false, isForLanguage: false,
needBorderBelow: true, needBorderBelow: true,
onTap: () { onTap: () {

@ -49,8 +49,10 @@ class _LoginWithPasswordState extends State<LoginWithPassword> {
userVM = Provider.of(context, listen: false); userVM = Provider.of(context, listen: false);
context.read<UserVM>().getAvailBio(); context.read<UserVM>().getAvailBio();
if (AppState().currentAppType == AppType.provider) { if (AppState().currentAppType == AppType.provider) {
phoneNum = "966530896018"; // phoneNum = "966530896018";
password = "Amir@1234"; // password = "Amir@1234";
phoneNum = "966569755630";
password = "Amir12345@";
} }
getCountryList(); getCountryList();

@ -42,6 +42,7 @@ class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
// print("User Image URL == ${AppState().getUser.data!.userInfo!.userImageUrl} ============");
return Column( return Column(
children: [ children: [
AppBar( AppBar(
@ -64,27 +65,24 @@ class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
).toCircle(borderRadius: 100) ).toCircle(borderRadius: 100)
: profileImageUrl.isEmpty && AppState().getUser.data!.userInfo!.userImageUrl != null : profileImageUrl.isEmpty && AppState().getUser.data!.userInfo!.userImageUrl != null
? CachedNetworkImage( ? CachedNetworkImage(
imageUrl: AppState().getUser.data!.userInfo!.userImageUrl, imageUrl: AppState().getUser.data!.userInfo!.userImageUrl,
imageBuilder: (context, imageProvider) => imageBuilder: (context, imageProvider) =>
Container( Container(
decoration: BoxDecoration( decoration: BoxDecoration(
image: DecorationImage( image: DecorationImage(
image: imageProvider, image: imageProvider,
fit: BoxFit.cover, fit: BoxFit.cover,
),
), ),
), ),
), placeholder: (context, url) => const Center(child: CircularProgressIndicator()),
placeholder: (context, url) => const Center(child: CircularProgressIndicator()), errorWidget: (context, url, error) => const Icon(Icons.supervised_user_circle_outlined),
errorWidget: (context, url, error) => const Icon(Icons.error), fadeInCurve: Curves.easeIn,
fadeInCurve: Curves.easeIn, width: 34,
width: 34, height: 34,
height: 34, fit: BoxFit.fill,
fit: BoxFit.fill, fadeInDuration: Duration(milliseconds: 1000),
useOldImageOnUrlChange: false
fadeInDuration: Duration(milliseconds: 1000),
useOldImageOnUrlChange: false,
).toCircle(borderRadius: 100) ).toCircle(borderRadius: 100)
: Image.asset( : Image.asset(
MyAssets.carBanner, MyAssets.carBanner,

@ -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/theme/colors.dart';
import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart'; import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart';
class MenuTabs extends StatefulWidget { class MenuTabs extends StatelessWidget {
int selectedIndex;
List<DropValue> dropList; List<DropValue> dropList;
Function(DropValue value) onSelect; Function(DropValue value, int index ) onSelected;
Color? selectedColor; Color? selectedColor;
MenuTabs(this.selectedIndex, this.dropList, {required this.onSelect, this.selectedColor}); MenuTabs(this.dropList, {required this.onSelected, this.selectedColor});
@override
State<MenuTabs> createState() => _RoleTypeTabState();
}
class _RoleTypeTabState extends State<MenuTabs> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return SizedBox( return SizedBox(
@ -25,24 +19,21 @@ class _RoleTypeTabState extends State<MenuTabs> {
itemBuilder: (context, index) { itemBuilder: (context, index) {
return InkWell( return InkWell(
onTap: () { onTap: () {
setState(() { onSelected(dropList[index], index);
widget.selectedIndex = index;
widget.onSelect(widget.dropList[index]);
});
}, },
child: Container( child: Container(
height: 45, height: 45,
decoration: BoxDecoration( decoration: BoxDecoration(
color: widget.selectedIndex == index ? widget.selectedColor ?? MyColors.darkIconColor : Colors.white, color: dropList[index].isEnabled! ? selectedColor ?? MyColors.darkIconColor : Colors.white,
border: Border.all(color: widget.selectedIndex == index ? widget.selectedColor ?? MyColors.darkIconColor : MyColors.darkPrimaryColor, width: 1.5), border: Border.all(color: dropList[index].isEnabled! ? selectedColor ?? MyColors.darkIconColor : MyColors.darkPrimaryColor, width: 1.5),
borderRadius: const BorderRadius.all(Radius.circular(0)), borderRadius: const BorderRadius.all(Radius.circular(0)),
), ),
padding: const EdgeInsets.symmetric(horizontal: 20), padding: const EdgeInsets.symmetric(horizontal: 20),
child: Center( child: Center(
child: Text( child: Text(
widget.dropList[index].value, dropList[index].value,
style: TextStyle( style: TextStyle(
color: widget.selectedIndex == index ? MyColors.white : Colors.black, color: dropList[index].isEnabled! ? MyColors.white : Colors.black,
fontSize: 12, fontSize: 12,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
@ -55,7 +46,7 @@ class _RoleTypeTabState extends State<MenuTabs> {
return 12.width; return 12.width;
}, },
padding: const EdgeInsets.symmetric(horizontal: 21), padding: const EdgeInsets.symmetric(horizontal: 21),
itemCount: widget.dropList.length, itemCount: dropList.length,
scrollDirection: Axis.horizontal, scrollDirection: Axis.horizontal,
), ),
); );

@ -20,7 +20,7 @@ class _RoleTypeTabState extends State<RoleTypeTab> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return SizedBox( return SizedBox(
width: double.infinity, width: double.infinity,
height: 45, height: 50,
child: ListView.separated( child: ListView.separated(
itemBuilder: (context, index) { itemBuilder: (context, index) {
return InkWell( return InkWell(
@ -32,7 +32,7 @@ class _RoleTypeTabState extends State<RoleTypeTab> {
}, },
child: Container( child: Container(
width: widget.width ?? (MediaQuery.of(context).size.width / 2) - 30, width: widget.width ?? (MediaQuery.of(context).size.width / 2) - 30,
height: 45, height: 50,
decoration: BoxDecoration( decoration: BoxDecoration(
color: widget.selectedIndex == index ? MyColors.darkPrimaryColor : Colors.grey[200], color: widget.selectedIndex == index ? MyColors.darkPrimaryColor : Colors.grey[200],
// border: Border.all(color: type == ClassType.NUMBER ? MyColors.darkPrimaryColor : Colors.transparent, width: 2), // border: Border.all(color: type == ClassType.NUMBER ? MyColors.darkPrimaryColor : Colors.transparent, width: 2),
@ -43,13 +43,16 @@ class _RoleTypeTabState extends State<RoleTypeTab> {
child: Center( child: Center(
child: Text( child: Text(
(widget.dropList[index].value) == "ServiceProvider_Dealership" || (widget.dropList[index].value) == "ServiceProvider_Individual" (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, : widget.dropList[index].value,
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: TextStyle( style: TextStyle(
color: widget.selectedIndex == index ? MyColors.white : Colors.black, color: widget.selectedIndex == index ? MyColors.white : Colors.black,
fontSize: 15, fontSize: 15,
height: 1
), ),
), ),
), ),
), ),

Loading…
Cancel
Save