subscription & profile

master_new_changes
Aamir.Muhammad 1 year ago
parent cb04d4a2fb
commit b4a3819c36

@ -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": "تسجيل الخروج",

@ -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",

@ -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";

@ -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<String,dynamic> 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<String,dynamic> 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<String,dynamic> en_US = {
"inviteFriends": "Invite Friends",
"more": "More",
"language": "Language",
"mySubscriptions": "My Subscriptions",
"mySubscriptions": "My Subscription",
"subscriptions": "Subscriptions",
"defineLicenses": "Define Licenses",
"logOut": "Log Out",

@ -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';

@ -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<String, dynamic> 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<String, dynamic> 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,
};
}

@ -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<Subscription>? data;
String? message;
factory SubscriptionModel.fromJson(Map<String, dynamic> json) =>
SubscriptionModel(
factory SubscriptionModel.fromJson(Map<String, dynamic> json) => SubscriptionModel(
messageStatus: json["messageStatus"],
totalItemsCount: json["totalItemsCount"],
data: json["data"] == null
? []
: List<Subscription>.from(
json["data"]!.map((x) => Subscription.fromJson(x))),
data: json["data"] == null ? [] : List<Subscription>.from(json["data"]!.map((x) => Subscription.fromJson(x))),
message: json["message"],
);
Map<String, dynamic> toJson() => {
"messageStatus": messageStatus,
"totalItemsCount": totalItemsCount,
"data": data == null
? []
: List<dynamic>.from(data!.map((x) => x.toJson())),
"data": data == null ? [] : List<dynamic>.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<String, dynamic> 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<String, dynamic> toJson() => {
"id": id,

@ -71,6 +71,8 @@ abstract class UserRepo {
Future<ImageResponse> getUserImage(String image);
Future<Response> logoutUser();
Future<String> updateUserToken();
}
@ -275,7 +277,12 @@ class UserRepoImp implements UserRepo {
String t = AppState().getUser.data!.accessToken ?? "";
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
@ -303,4 +310,10 @@ class UserRepoImp implements UserRepo {
AppState().setUser = user;
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>{};
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 = <int>{};
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);

@ -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);
}
}

@ -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),
],
),
),

@ -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(

@ -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<ProviderLicensePage> {
// TODO: implement initState
super.initState();
branchVM = Provider.of<ServiceVM>(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<ProviderLicensePage> {
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<ProviderLicensePage> {
),
),
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<ProviderLicensePage> {
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,

@ -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: () {

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

@ -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,

@ -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<DropValue> 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<MenuTabs> createState() => _RoleTypeTabState();
}
class _RoleTypeTabState extends State<MenuTabs> {
@override
Widget build(BuildContext context) {
return SizedBox(
@ -25,24 +19,21 @@ class _RoleTypeTabState extends State<MenuTabs> {
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<MenuTabs> {
return 12.width;
},
padding: const EdgeInsets.symmetric(horizontal: 21),
itemCount: widget.dropList.length,
itemCount: dropList.length,
scrollDirection: Axis.horizontal,
),
);

@ -20,7 +20,7 @@ class _RoleTypeTabState extends State<RoleTypeTab> {
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<RoleTypeTab> {
},
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<RoleTypeTab> {
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
),
),
),
),

Loading…
Cancel
Save