Merge branch 'aamir_dev' into faiz_development

# Conflicts:
#	lib/view_models/dashboard_view_model.dart
#	lib/views/dashboard/dashboard_page.dart
#	lib/views/settings/branch/branch_list_page.dart
aamir_dev
Faiz Hashmi 1 year ago
commit 5e80bf6eb2

@ -1,4 +1,6 @@
import 'dart:io'; import 'dart:io';
import 'package:car_provider_app/config/provider_routes.dart';
import 'package:car_provider_app/views/settings/branch/dealer/widget/add_phone_num_wiget.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
@ -12,12 +14,16 @@ import 'package:mc_common_app/repositories/user_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/utils/enums.dart'; import 'package:mc_common_app/utils/enums.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:mc_common_app/services/firebase_service.dart';
import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/utils/location/Location.dart'; import 'package:mc_common_app/utils/location/Location.dart';
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/ad_view_model.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/appointments_view_model.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/widgets/bottom_sheet.dart';
import 'package:mc_common_app/view_models/chat_view_model.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/requests_view_model.dart';
import 'package:mc_common_app/view_models/service_view_model.dart'; import 'package:mc_common_app/view_models/service_view_model.dart';
@ -127,4 +133,48 @@ class DashboardVM extends BaseVM {
// await subscriptionsVM.getSubscriptionBySP(AppState().getUser.data?.userInfo?.providerId.toString() ?? "", true); // await subscriptionsVM.getSubscriptionBySP(AppState().getUser.data?.userInfo?.providerId.toString() ?? "", true);
// } // }
} }
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) {
await navigateWithName(context, ProviderAppRoutes.defineBranch);
} else {
Utils.showToast("Upgrade your subscription to add more Branches.");
}
}
void performCheckOnAds(BuildContext context) async {
if (AppState().getproviderSubscription.isNotEmpty && AppState().getproviderSubscription.first.adsRemaining! > 0) {
await navigateWithName(context, ProviderAppRoutes.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) {
showMyBottomSheet(
context,
isDismissible: false,
child: const AddPhoneNumWidget(),
callBackFunc: callBack
);
} else {
Utils.showToast("Upgrade your subscription to add more Sub Users.");
}
}
} }

@ -1,15 +1,14 @@
import 'dart:convert'; import 'dart:async';
import 'dart:developer';
import 'package:car_provider_app/config/provider_routes.dart'; import 'package:car_provider_app/config/provider_routes.dart';
import 'package:car_provider_app/views/settings/branch/dealer/widget/assign_dealer_user_sheet.dart';
import 'package:mc_common_app/generated/locale_keys.g.dart'; import 'package:mc_common_app/generated/locale_keys.g.dart';
import 'package:mc_common_app/models/general_models/m_response.dart';
import 'package:mc_common_app/utils/utils.dart';
import 'package:mc_common_app/view_models/service_view_model.dart'; import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:car_provider_app/views/settings/services/services_list_page.dart'; import 'package:car_provider_app/views/settings/services/services_list_page.dart';
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:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:car_provider_app/view_models/branch_view_model.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';
@ -20,23 +19,28 @@ import 'package:mc_common_app/models/provider_branches_models/profile/categroy.d
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/utils/navigator.dart';
import 'package:mc_common_app/widgets/bottom_sheet.dart';
import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import 'package:mc_common_app/widgets/button/show_fill_button.dart';
import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../../../generated/locale_keys.g.dart';
class BranchDetailPage extends StatelessWidget { class BranchDetailPage extends StatelessWidget {
BranchDetailModel branchData; BranchDetailModel branchData;
BranchDetailPage(this.branchData); BranchDetailPage(this.branchData, {super.key});
List<CategoryData> categories = []; List<CategoryData> categories = [];
@override getBranchUsers(BuildContext context) {
Widget build(BuildContext context) { scheduleMicrotask(() {
context.read<ServiceVM>().getAllProviderDealers(
{"ServiceProviderBranchID": branchData.id.toString(), "ServiceProviderID": AppState().getUser.data?.userInfo?.providerId.toString() ?? ""},
);
});
}
filterBranch() {
branchData.branchServices!.forEach((element) { branchData.branchServices!.forEach((element) {
categories.add( categories.add(
CategoryData( CategoryData(
@ -56,6 +60,12 @@ class BranchDetailPage extends StatelessWidget {
}); });
} }
branchData.categories = categories; branchData.categories = categories;
}
@override
Widget build(BuildContext context) {
filterBranch();
getBranchUsers(context);
return Scaffold( return Scaffold(
appBar: CustomAppBar( appBar: CustomAppBar(
title: branchData.branchName.toString(), title: branchData.branchName.toString(),
@ -77,14 +87,11 @@ class BranchDetailPage extends StatelessWidget {
Row( Row(
children: [ children: [
Expanded( Expanded(
child: titleWidget(MyAssets.icBranches, child: titleWidget(MyAssets.icBranches, LocaleKeys.branchInfo.tr()),
LocaleKeys.branchInfo.tr()),
), ),
IconButton( IconButton(
onPressed: () { onPressed: () {
navigateWithName( navigateWithName(context, ProviderAppRoutes.defineBranch, arguments: branchData);
context, ProviderAppRoutes.defineBranch,
arguments: branchData);
}, },
icon: SvgPicture.asset(MyAssets.icEdit), icon: SvgPicture.asset(MyAssets.icEdit),
) )
@ -92,17 +99,11 @@ class BranchDetailPage extends StatelessWidget {
), ),
Column( Column(
children: [ children: [
showData("${LocaleKeys.country.tr()}:", showData("${LocaleKeys.country.tr()}:", branchData.countryName.toString()),
branchData.countryName.toString()), showData("${LocaleKeys.city.tr()}:", branchData.cityName.toString()),
showData("${LocaleKeys.city.tr()}:", showData("${LocaleKeys.branchName.tr()}:", branchData.branchName.toString()),
branchData.cityName.toString()), showData("${LocaleKeys.branchDescription.tr()}:", branchData.branchDescription.toString()),
showData("${LocaleKeys.branchName.tr()}:", showData("${LocaleKeys.address.tr()}:", branchData.address.toString()),
branchData.branchName.toString()),
showData(
"${LocaleKeys.branchDescription.tr()}:",
branchData.branchDescription.toString()),
showData("${LocaleKeys.address.tr()}:",
branchData.address.toString()),
], ],
), ),
], ],
@ -111,8 +112,7 @@ class BranchDetailPage extends StatelessWidget {
Container( Container(
width: double.infinity, width: double.infinity,
color: MyColors.darkIconColor, color: MyColors.darkIconColor,
padding: const EdgeInsets.symmetric( padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 8),
horizontal: 20, vertical: 8),
child: Row( child: Row(
children: [ children: [
const Icon( const Icon(
@ -136,9 +136,7 @@ class BranchDetailPage extends StatelessWidget {
], ],
), ),
).onPress(() { ).onPress(() {
navigateWithName( navigateWithName(context, ProviderAppRoutes.schedulesList, arguments: branchData.id.toString());
context, ProviderAppRoutes.schedulesList,
arguments: branchData.id.toString());
}), }),
Row( Row(
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
@ -165,8 +163,7 @@ class BranchDetailPage extends StatelessWidget {
backgroundColor: MyColors.darkWhiteColor, backgroundColor: MyColors.darkWhiteColor,
width: double.infinity, width: double.infinity,
paddingAll: 20, paddingAll: 20,
margin: margin: const EdgeInsets.only(left: 20, right: 20, top: 20),
const EdgeInsets.only(left: 20, right: 20, top: 20),
) )
.onPress(() { .onPress(() {
navigateWithName( navigateWithName(
@ -184,17 +181,12 @@ class BranchDetailPage extends StatelessWidget {
itemBuilder: (context, pIndex) { itemBuilder: (context, pIndex) {
return InkWell( return InkWell(
onTap: () { onTap: () {
categories[pIndex].branchId = categories[pIndex].branchId = branchData.id.toString();
branchData.id.toString(); categories[pIndex].branchName = branchData.branchName.toString();
categories[pIndex].branchName = navigateWithName(context, ProviderAppRoutes.servicesList, arguments: categories[pIndex]);
branchData.branchName.toString();
navigateWithName(
context, ProviderAppRoutes.servicesList,
arguments: categories[pIndex]);
}, },
child: Row( child: Row(
crossAxisAlignment: crossAxisAlignment: CrossAxisAlignment.start,
CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Padding( Padding(
@ -208,19 +200,12 @@ class BranchDetailPage extends StatelessWidget {
8.width, 8.width,
Expanded( Expanded(
child: Column( child: Column(
crossAxisAlignment: crossAxisAlignment: CrossAxisAlignment.start,
CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
mainAxisAlignment:
MainAxisAlignment.start,
children: [ children: [
Row( Row(
children: [ children: [
categories[pIndex] categories[pIndex].categoryName.toString().toText(fontSize: 16, isBold: true),
.categoryName
.toString()
.toText(
fontSize: 16,
isBold: true),
// Padding( // Padding(
// padding: const EdgeInsets.all(4.0), // padding: const EdgeInsets.all(4.0),
// child: SvgPicture.asset( // child: SvgPicture.asset(
@ -230,46 +215,26 @@ class BranchDetailPage extends StatelessWidget {
// ), // ),
// ), // ),
], ],
mainAxisAlignment: mainAxisAlignment: MainAxisAlignment.spaceBetween,
MainAxisAlignment.spaceBetween,
), ),
Row( Row(
children: [ children: [
Expanded( Expanded(
child: ListView.builder( child: ListView.builder(
itemBuilder: itemBuilder: (context, index) {
(context, index) {
return Container( return Container(
child: (EasyLocalization.of( child: (EasyLocalization.of(context)?.currentLocale?.countryCode == "SA"
context) ? categories[pIndex].services![index].serviceDescriptionN.toString()
?.currentLocale : categories[pIndex].services![index].serviceDescription.toString())
?.countryCode ==
"SA"
? categories[
pIndex]
.services![
index]
.serviceDescriptionN
.toString()
: categories[
pIndex]
.services![
index]
.serviceDescription
.toString())
.toText( .toText(
fontSize: 12, fontSize: 12,
color: MyColors color: MyColors.lightTextColor,
.lightTextColor,
isBold: true, isBold: true,
), ),
); );
}, },
itemCount: categories[pIndex] itemCount: categories[pIndex].services?.length,
.services physics: const NeverScrollableScrollPhysics(),
?.length,
physics:
const NeverScrollableScrollPhysics(),
shrinkWrap: true, shrinkWrap: true,
padding: EdgeInsets.zero, padding: EdgeInsets.zero,
), ),
@ -282,18 +247,15 @@ class BranchDetailPage extends StatelessWidget {
), ),
), ),
], ],
mainAxisAlignment: mainAxisAlignment: MainAxisAlignment.end,
MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end,
crossAxisAlignment:
CrossAxisAlignment.end,
) )
], ],
)), )),
], ],
).toContainer( ).toContainer(
width: double.infinity, width: double.infinity,
padding: const EdgeInsets.symmetric( padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
horizontal: 12, vertical: 8),
isShadowEnabled: true, isShadowEnabled: true,
), ),
); );
@ -302,8 +264,7 @@ class BranchDetailPage extends StatelessWidget {
physics: const NeverScrollableScrollPhysics(), physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true, shrinkWrap: true,
padding: const EdgeInsets.all(20), padding: const EdgeInsets.all(20),
separatorBuilder: separatorBuilder: (BuildContext context, int index) {
(BuildContext context, int index) {
return 12.height; return 12.height;
}, },
), ),
@ -327,9 +288,16 @@ class BranchDetailPage extends StatelessWidget {
borderColor: MyColors.darkPrimaryColor, borderColor: MyColors.darkPrimaryColor,
txtColor: MyColors.darkPrimaryColor, txtColor: MyColors.darkPrimaryColor,
isFilled: false, isFilled: false,
onPressed: () { onPressed: () async {
navigateWithName(context, ProviderAppRoutes.dealerUser, showMyBottomSheet(
arguments: branchData.id.toString()); context,
child: AssignDealerUserSheet(
branchId: branchData.id.toString(),
callBackFunc: () {
getBranchUsers(context);
},
),
);
}, },
), ),
), ),
@ -340,6 +308,16 @@ class BranchDetailPage extends StatelessWidget {
); );
} }
bool validation(BuildContext context) {
bool isValid = false;
for (var element in context.read<ServiceVM>().allProviderDealersList) {
if (element.isBranchUser ?? false) {
isValid = true;
}
}
return isValid;
}
Widget titleWidget(String icon, String title) { Widget titleWidget(String icon, String title) {
return Row( return Row(
children: [ children: [

@ -108,11 +108,15 @@ class _AddPhoneNumWidgetState extends State<AddPhoneNumWidget> {
if (_country != null) { if (_country != null) {
List<DropValue> dropList = []; List<DropValue> dropList = [];
_country!.data?.forEach((element) { _country!.data?.forEach((element) {
dropList.add(DropValue(element.id ?? 0, (element.countryName ?? "") + " " + (element.countryCode ?? ""), element.countryCode ?? "")); dropList.add(DropValue(element.id ?? 0, "${element.countryName ?? ""} ${element.countryCode ?? ""}", element.countryCode ?? ""));
}); });
return DropdownField((DropValue value) { return DropdownField(
(DropValue value) {
countryCode = value.subValue; countryCode = value.subValue;
}, list: dropList, hint: LocaleKeys.selectCountryCode.tr()); },
list: dropList,
hint: countryCode.isNotEmpty ? countryCode.toString() : LocaleKeys.selectCountryCode.tr(),
);
} else { } else {
return const Center( return const Center(
child: CircularProgressIndicator(), child: CircularProgressIndicator(),

@ -1,3 +1,4 @@
import 'package:car_provider_app/view_models/dashboard_view_model.dart';
import 'package:mc_common_app/generated/locale_keys.g.dart'; import 'package:mc_common_app/generated/locale_keys.g.dart';
import 'package:mc_common_app/view_models/service_view_model.dart'; import 'package:mc_common_app/view_models/service_view_model.dart';
import 'package:car_provider_app/views/settings/branch/dealer/widget/add_phone_num_wiget.dart'; import 'package:car_provider_app/views/settings/branch/dealer/widget/add_phone_num_wiget.dart';
@ -16,13 +17,13 @@ import 'package:mc_common_app/widgets/extensions/extensions_widget.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';
// ignore: must_be_immutable // ignore: must_be_immutable
class AssignDealerUserSheet extends StatefulWidget { class AssignDealerUserSheet extends StatefulWidget {
String branchId; String branchId;
VoidCallback callBackFunc; VoidCallback callBackFunc;
bool? isFromBranch;
AssignDealerUserSheet({required this.branchId, required this.callBackFunc, Key? key}) : super(key: key); AssignDealerUserSheet({required this.branchId, required this.callBackFunc, this.isFromBranch, Key? key}) : super(key: key);
@override @override
State<AssignDealerUserSheet> createState() => _AssignDealerUserSheetState(); State<AssignDealerUserSheet> createState() => _AssignDealerUserSheetState();
@ -41,11 +42,7 @@ class _AssignDealerUserSheetState extends State<AssignDealerUserSheet> {
} }
getBranchUsers() { getBranchUsers() {
provider.getAllProviderDealers({ provider.getAllProviderDealers({"ServiceProviderBranchID": widget.branchId, "ServiceProviderID": AppState().getUser.data?.userInfo?.providerId.toString() ?? ""});
// "id": services!.data![i].id,
"ServiceProviderBranchID": widget.branchId,
"ServiceProviderID": AppState().getUser.data?.userInfo?.providerId.toString() ?? ""
});
} }
@override @override
@ -93,7 +90,7 @@ class _AssignDealerUserSheetState extends State<AssignDealerUserSheet> {
Utils.showLoading(context); Utils.showLoading(context);
List<int> userIds = []; List<int> userIds = [];
for (var element in provider.allProviderDealersList) { for (var element in provider.allProviderDealersList) {
if (element.isBranchUser??false) { if (element.isBranchUser ?? false) {
userIds.add(element.id); userIds.add(element.id);
} }
} }
@ -122,14 +119,9 @@ class _AssignDealerUserSheetState extends State<AssignDealerUserSheet> {
txtColor: MyColors.darkPrimaryColor, txtColor: MyColors.darkPrimaryColor,
isFilled: false, isFilled: false,
onPressed: () { onPressed: () {
showMyBottomSheet( context.read<DashboardVM>().checkUserSubscription(SubscriptionActionTypeEnum.users, context, callback: () {
context,
isDismissible: false,
child: const AddPhoneNumWidget(),
callBackFunc: () {
getBranchUsers(); getBranchUsers();
}, });
);
}, },
) )
], ],
@ -159,8 +151,8 @@ class _AssignDealerUserSheetState extends State<AssignDealerUserSheet> {
("${model.allProviderDealersList[index].firstName} ${model.allProviderDealersList[index].lastName}").toText(fontSize: 16, isBold: true), ("${model.allProviderDealersList[index].firstName} ${model.allProviderDealersList[index].lastName}").toText(fontSize: 16, isBold: true),
8.height, 8.height,
itemWidget("Role", "Dealer User"), itemWidget("Role", "Dealer User"),
itemWidget("Email", model.allProviderDealersList[index].email??""), itemWidget("Email", model.allProviderDealersList[index].email ?? ""),
itemWidget("Phone", model.allProviderDealersList[index].mobileNo??"") itemWidget("Phone", model.allProviderDealersList[index].mobileNo ?? "")
], ],
), ),
), ),
@ -184,7 +176,7 @@ class _AssignDealerUserSheetState extends State<AssignDealerUserSheet> {
bool validation() { bool validation() {
bool isValid = false; bool isValid = false;
for (var element in provider.allProviderDealersList) { for (var element in provider.allProviderDealersList) {
if (element.isBranchUser??false) { if (element.isBranchUser ?? false) {
isValid = true; isValid = true;
} }
} }

@ -82,7 +82,7 @@ class _SubscriptionsPageState extends State<SubscriptionsPage> {
} }
}, },
onUpgradeSubscriptionClick: () { onUpgradeSubscriptionClick: () {
showMyBottomSheet(context, child: UpgradePackageSheet(subcriptionsVM.tempSubscriptions[index])); showMyBottomSheet(context, child: UpgradePackageSheet(subcriptionsVM.tempSubscriptions[index], false));
}, },
onDowngradeSubscriptionClick: () { onDowngradeSubscriptionClick: () {
showMyBottomSheet(context, child: DowngradeDataSheet(subcriptionsVM.tempSubscriptions[index])); showMyBottomSheet(context, child: DowngradeDataSheet(subcriptionsVM.tempSubscriptions[index]));

@ -69,17 +69,43 @@ class _MySubscriptionsPageState extends State<MySubscriptionsPage> {
backgroundColor: MyColors.darkIconColor, backgroundColor: MyColors.darkIconColor,
isMainPage: model.mySubscriptionsBySp[index].isExpired ?? false, isMainPage: model.mySubscriptionsBySp[index].isExpired ?? false,
onRenewSubscriptionClick: () async { onRenewSubscriptionClick: () async {
Utils.showLoading(context); print(sub.toJson());
MResponse response = await model.createSubscriptionOrder(model.mySubscriptionsBySp[index].subscriptionID ?? 0, true, true); showMyBottomSheet(
Utils.hideLoading(context); context,
if (response.data != null) { child: UpgradePackageSheet(
context.read<PaymentVM>().updateOrderProviderSubscriptionId(id: response.data ?? 0); Subscription(
navigateWithName(context, AppRoutes.paymentMethodsView, arguments: PaymentTypes.subscription); id: sub.subscriptionID,
} isMyCurrentPackage: true,
isExpired: sub.isExpired,
isActive: sub.isActive,
isSubscribed: true,
name: sub.subscriptionName,
description: sub.subscriptionDescription,
numberOfAds: sub.totalAds ?? 0,
numberOfBranches: sub.totalBranches ?? 0,
numberOfSubUsers: sub.totalSubUsers ?? 0,
countryId: 1,
countryName: "KSA",
currency: "SAR",
price: 0,
dateEnd: sub.dateEnd,
dateStart: sub.dateStart,
serviceProviderId: sub.serviceProviderId,
subscriptionAppliedId: sub.serviceProviderId,
),
true),
);
// Utils.showLoading(context);
// MResponse response = await model.createSubscriptionOrder(model.mySubscriptionsBySp[index].subscriptionID ?? 0, true, true);
// Utils.hideLoading(context);
// if (response.data != null) {
// context.read<PaymentVM>().updateOrderProviderSubscriptionId(id: response.data ?? 0);
// navigateWithName(context, AppRoutes.paymentMethodsView, arguments: PaymentTypes.subscription);
// }
}, },
onUpgradeSubscriptionClick: () { onUpgradeSubscriptionClick: () {
print("Upgrade"); // print(sub.toJson());
print(sub.toJson());
// showMyBottomSheet( // showMyBottomSheet(
// context, // context,
// child: UpgradePackageSheet( // child: UpgradePackageSheet(

@ -2,8 +2,10 @@ import 'dart:async';
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/models/general_models/m_response.dart'; import 'package:mc_common_app/models/general_models/m_response.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/theme/colors.dart'; import 'package:mc_common_app/theme/colors.dart';
@ -17,11 +19,13 @@ import 'package:mc_common_app/views/payments/payment_methods_view.dart';
import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import 'package:mc_common_app/widgets/button/show_fill_button.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:easy_localization/easy_localization.dart';
class UpgradePackageSheet extends StatefulWidget { class UpgradePackageSheet extends StatefulWidget {
Subscription subscription; Subscription subscription;
bool isRenew;
UpgradePackageSheet(this.subscription, {super.key}); UpgradePackageSheet(this.subscription, this.isRenew, {super.key});
@override @override
State<UpgradePackageSheet> createState() => _UpgradePackageSheetState(); State<UpgradePackageSheet> createState() => _UpgradePackageSheetState();
@ -61,21 +65,21 @@ class _UpgradePackageSheetState extends State<UpgradePackageSheet> {
); );
} else { } else {
if (isNowSelected) { if (isNowSelected) {
price = model.newPrice.toString(); price = double.parse(model.newPrice).toStringAsFixed(2);
} }
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: [ children: [
"When do you want to upgrade".toText( (widget.isRenew ? LocaleKeys.whendoyouWanttoRenew.tr() : LocaleKeys.whendoyouWanttoUpgrade.tr()).toText(
fontSize: 18, fontSize: 18,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
12.height, 12.height,
packageItem( packageItem(
"Now", LocaleKeys.nowVar.tr(),
("Your subscription will upgrade now. Affecting from ${DateHelper.formatAsLongDate(widget.subscription.dateEnd ?? DateTime.now())}"), (LocaleKeys.yourSubscriptionUpgradeAffectingFrom.tr() + " ${DateHelper.formatAsLongDate(widget.subscription.dateEnd ?? DateTime.now())}"),
model.newPrice.toString(), double.parse(model.newPrice).toStringAsFixed(2),
isNowSelected, isNowSelected,
).onPress(() { ).onPress(() {
setState(() { setState(() {
@ -85,8 +89,8 @@ class _UpgradePackageSheetState extends State<UpgradePackageSheet> {
}), }),
6.height, 6.height,
packageItem( packageItem(
"Upgrade after current expiry", LocaleKeys.upgradeAfterCurrentExpiry.tr(),
("Your subscription will upgrade after you current subscription will end. Affecting from 27 January, 2024 ${DateHelper.formatAsLongDate(widget.subscription.dateEnd ?? DateTime.now())}"), (LocaleKeys.yourSubscriptionUpgradeCurrentSubscriptionAffectingFrom.tr() + " ${DateHelper.formatAsLongDate(widget.subscription.dateEnd ?? DateTime.now())}"),
widget.subscription.price.toString(), widget.subscription.price.toString(),
isNowSelected ? false : true, isNowSelected ? false : true,
).onPress(() { ).onPress(() {
@ -97,9 +101,18 @@ class _UpgradePackageSheetState extends State<UpgradePackageSheet> {
}), }),
12.height, 12.height,
ShowFillButton( ShowFillButton(
title: "Upgrade", title: widget.isRenew ? LocaleKeys.renewVar.tr() : LocaleKeys.upgradeVar.tr(),
maxWidth: double.infinity, maxWidth: double.infinity,
onPressed: () async { onPressed: () async {
if (widget.isRenew) {
Utils.showLoading(context);
MResponse response = await model.createSubscriptionOrder(widget.subscription.id ?? 0, true, true);
Utils.hideLoading(context);
if (response.data != null) {
context.read<PaymentVM>().updateOrderProviderSubscriptionId(id: response.data ?? 0);
navigateWithName(context, AppRoutes.paymentMethodsView, arguments: PaymentTypes.subscription);
}
} else {
navigateTo( navigateTo(
context, context,
PaymentMethodsView( PaymentMethodsView(
@ -121,6 +134,7 @@ class _UpgradePackageSheetState extends State<UpgradePackageSheet> {
}, },
), ),
); );
}
}, },
), ),
], ],
@ -171,7 +185,7 @@ class _UpgradePackageSheetState extends State<UpgradePackageSheet> {
2.width, 2.width,
Padding( Padding(
padding: const EdgeInsets.only(bottom: 2), padding: const EdgeInsets.only(bottom: 2),
child: "SAR".toText(fontSize: 16, isBold: true, color: MyColors.lightTextColor), child: LocaleKeys.sar.tr().toText(fontSize: 16, isBold: true, color: MyColors.lightTextColor),
), ),
], ],
) )

@ -45,34 +45,36 @@ class MySubscriptionsCard extends StatelessWidget {
), ),
// if (providerSubscriptionModel.isActive!) "Current Package".toText(color: MyColors.primaryColor, fontWeight: FontWeight.bold), // if (providerSubscriptionModel.isActive!) "Current Package".toText(color: MyColors.primaryColor, fontWeight: FontWeight.bold),
5.width, 5.width,
if (!providerSubscriptionModel.isExpired!)
Row( Row(
children: [ children: [
Container( providerSubscriptionModel.isExpired!
? const SizedBox()
: Container(
height: 15, height: 15,
width: 15, width: 15,
decoration: BoxDecoration( decoration: const BoxDecoration(
shape: BoxShape.circle, shape: BoxShape.circle,
color: MyColors.white, color: MyColors.white,
), ),
alignment: Alignment.center, alignment: Alignment.center,
child: Icon( child: const Icon(
Icons.done, Icons.done,
size: 12, size: 12,
color: MyColors.primaryColor, color: MyColors.primaryColor,
), ),
), ),
5.width, 5.width,
"Subscribed".toText(color: MyColors.white) (providerSubscriptionModel.isExpired! ? "Expired" : "Subscribed").toText(color: providerSubscriptionModel.isExpired! ? MyColors.darkTextColor : MyColors.white)
], ],
) )
.toContainer( .toContainer(
backgroundColor: MyColors.primaryColor, backgroundColor: providerSubscriptionModel.isExpired! ? MyColors.greyButtonColor : MyColors.primaryColor,
borderRadius: 30, borderRadius: 30,
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 7), padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 7),
) )
.onPress(() { .onPress(() {
onUpgradeSubscriptionClick(); providerSubscriptionModel.isExpired! ? onRenewSubscriptionClick() : onUpgradeSubscriptionClick();
}) })
], ],
), ),
@ -107,7 +109,7 @@ class MySubscriptionsCard extends StatelessWidget {
// ), // ),
Row( Row(
children: [ children: [
"Expires on ${DateHelper.formatAsDayMonthYear(providerSubscriptionModel.dateEnd)}".toText( "${providerSubscriptionModel.isExpired! ? "Expired" : "Expires"} on ${DateHelper.formatAsDayMonthYear(providerSubscriptionModel.dateEnd)}".toText(
fontSize: 14, fontSize: 14,
color: textColor, color: textColor,
), ),

Loading…
Cancel
Save