diff --git a/lib/config/provider_dependencies.dart b/lib/config/provider_dependencies.dart index 7b370af..3bddfa8 100644 --- a/lib/config/provider_dependencies.dart +++ b/lib/config/provider_dependencies.dart @@ -1,9 +1,9 @@ import 'package:car_provider_app/repositories/branch_repo.dart'; import 'package:car_provider_app/repositories/items_repo.dart'; import 'package:car_provider_app/repositories/schedule_repo.dart'; -import 'package:car_provider_app/repositories/subscription_repo.dart'; import 'package:mc_common_app/config/dependencies.dart'; +import 'package:mc_common_app/repositories/subscription_repo.dart'; class ProviderAppDependencies { static void addDependencies() { diff --git a/lib/main.dart b/lib/main.dart index 8707394..cc06bdb 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -2,13 +2,11 @@ import 'package:car_provider_app/config/provider_dependencies.dart'; import 'package:car_provider_app/repositories/branch_repo.dart'; import 'package:car_provider_app/repositories/items_repo.dart'; import 'package:car_provider_app/repositories/schedule_repo.dart'; -import 'package:car_provider_app/repositories/subscription_repo.dart'; import 'package:car_provider_app/view_models/branch_view_model.dart'; import 'package:car_provider_app/view_models/dashboard_view_model.dart'; import 'package:car_provider_app/view_models/items_view_model.dart'; import 'package:car_provider_app/view_models/schedule_view_model.dart'; import 'package:car_provider_app/view_models/service_view_model.dart'; -import 'package:car_provider_app/view_models/subscriptions_view_model.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:mc_common_app/classes/app_state.dart'; @@ -23,6 +21,7 @@ import 'package:mc_common_app/repositories/common_repo.dart'; import 'package:mc_common_app/repositories/payments_repo.dart'; import 'package:mc_common_app/repositories/provider_repo.dart'; import 'package:mc_common_app/repositories/request_repo.dart'; +import 'package:mc_common_app/repositories/subscription_repo.dart'; import 'package:mc_common_app/repositories/user_repo.dart'; import 'package:mc_common_app/services/common_services.dart'; import 'package:mc_common_app/services/payments_service.dart'; @@ -34,6 +33,7 @@ import 'package:mc_common_app/view_models/base_view_model.dart'; import 'package:mc_common_app/view_models/chat_view_model.dart'; import 'package:mc_common_app/view_models/payment_view_model.dart'; import 'package:mc_common_app/view_models/requests_view_model.dart'; +import 'package:mc_common_app/view_models/subscriptions_view_model.dart'; import 'package:mc_common_app/view_models/user_view_model.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:provider/provider.dart'; diff --git a/lib/repositories/subscription_repo.dart b/lib/repositories/subscription_repo.dart deleted file mode 100644 index 9617155..0000000 --- a/lib/repositories/subscription_repo.dart +++ /dev/null @@ -1,27 +0,0 @@ - -import 'package:mc_common_app/api/api_client.dart'; -import 'package:mc_common_app/classes/app_state.dart'; -import 'package:mc_common_app/classes/consts.dart'; -import 'package:mc_common_app/config/dependencies.dart'; -import 'package:mc_common_app/models/subscriptions_models/subscription_model.dart'; -import 'package:mc_common_app/models/subscriptions_models/subscription_model.dart'; - - -abstract class SubscriptionRepo { - Future getAllSubscriptions(String? serviceProviderID); -} - -class SubscriptionRepoImp extends SubscriptionRepo { - @override - Future getAllSubscriptions(String? serviceProviderID) async { - String t = AppState().getUser.data!.accessToken ?? ""; - Map queryParameters = {}; - if (serviceProviderID != null) { - queryParameters = { - "ID": serviceProviderID, - }; - } - - return await injector.get().getJsonForObject((json) => SubscriptionModel.fromJson(json), ApiConsts.getAllSubscriptions, token: t, queryParameters: queryParameters); - } -} diff --git a/lib/view_models/subscriptions_view_model.dart b/lib/view_models/subscriptions_view_model.dart deleted file mode 100644 index a370bf6..0000000 --- a/lib/view_models/subscriptions_view_model.dart +++ /dev/null @@ -1,74 +0,0 @@ - -import 'package:car_provider_app/repositories/subscription_repo.dart'; -import 'package:mc_common_app/models/subscriptions_models/subscription_model.dart'; -import 'package:mc_common_app/utils/enums.dart'; -import 'package:mc_common_app/view_models/base_view_model.dart'; -import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart'; - -class SubscriptionsVM extends BaseVM { - final SubscriptionRepo subscriptionRepo; - - SubscriptionsVM({required this.subscriptionRepo}); - - //All Subscriptions - int selectedIndex = 0; - late DropValue selectedMothlyTab; - List monthlyTabs = []; - late SubscriptionModel allSubscriptions; - List tempSubscriptions = []; - - //My Subscriptions - - //All Subscriptions - getAllAvailableSubscriptions(String? serviceProviderID) async { - selectedIndex = 0; - setState(ViewState.busy); - allSubscriptions = await subscriptionRepo.getAllSubscriptions(serviceProviderID); - if (allSubscriptions.messageStatus == 1) { - monthlyTabs.clear(); - var idSet = {}; - for (var d in allSubscriptions.data ?? []) { - if (idSet.add(d.durationDays ?? 0)) { - monthlyTabs.add(DropValue(d.durationDays, _convertDaysToMonths(d.durationDays ?? 0), "")); - } - } - monthlyTabs.sort((a, b) => a.value.compareTo(b.value)); - selectedMothlyTab = monthlyTabs.first; - filterSubscriptions(); - setState(ViewState.idle); - } else { - setState(ViewState.error); - } - } - - String _convertDaysToMonths(int days) { - final int months = days ~/ 30; - final int remainingDays = days % 30; - - String _result = months > 0 ? '$months Month${months > 1 ? 's' : ''}${remainingDays > 0 ? ' & ' : ''}' : ''; - _result += remainingDays > 0 ? '$remainingDays Day${remainingDays > 1 ? 's' : ''}' : ''; - return _result; - } - - filterSubscriptions() { - tempSubscriptions.clear(); - for (var element in allSubscriptions.data!) { - if (selectedMothlyTab.id == element.durationDays) { - tempSubscriptions.add(element); - } - } - } - -//My Subscriptions - getMySubscriptions(String? serviceProviderID) async { - selectedIndex = 0; - setState(ViewState.busy); - allSubscriptions = await subscriptionRepo.getAllSubscriptions(serviceProviderID); - if (allSubscriptions.messageStatus == 1) { - // allSubscriptions.data!.sort((a, b) => a.value.compareTo(b.value)); - setState(ViewState.idle); - } else { - setState(ViewState.error); - } - } -} diff --git a/lib/views/settings/branch/dealer/dealer_user_page.dart b/lib/views/settings/branch/dealer/dealer_user_page.dart index cef765d..8740a01 100644 --- a/lib/views/settings/branch/dealer/dealer_user_page.dart +++ b/lib/views/settings/branch/dealer/dealer_user_page.dart @@ -111,8 +111,8 @@ class _DealerUserPageState extends State { ("${model.branchUserList[index].firstName} ${model.branchUserList[index].lastName}").toText(fontSize: 16, isBold: true), 8.height, itemWidget("Role", "Dealer User"), - itemWidget("Email", model.branchUserList[index].email), - itemWidget("Phone", model.branchUserList[index].mobileNo) + itemWidget("Email", model.branchUserList[index].email??""), + itemWidget("Phone", model.branchUserList[index].mobileNo??"") ], ), ), diff --git a/lib/views/settings/branch/dealer/widget/assign_dealer_user_sheet.dart b/lib/views/settings/branch/dealer/widget/assign_dealer_user_sheet.dart index b477352..552b393 100644 --- a/lib/views/settings/branch/dealer/widget/assign_dealer_user_sheet.dart +++ b/lib/views/settings/branch/dealer/widget/assign_dealer_user_sheet.dart @@ -90,7 +90,7 @@ class _AssignDealerUserSheetState extends State { Utils.showLoading(context); List userIds = []; for (var element in provider.allProviderDealersList) { - if (element.isBranchUser) { + if (element.isBranchUser??false) { userIds.add(element.id); } } @@ -156,8 +156,8 @@ class _AssignDealerUserSheetState extends State { ("${model.allProviderDealersList[index].firstName} ${model.allProviderDealersList[index].lastName}").toText(fontSize: 16, isBold: true), 8.height, itemWidget("Role", "Dealer User"), - itemWidget("Email", model.allProviderDealersList[index].email), - itemWidget("Phone", model.allProviderDealersList[index].mobileNo) + itemWidget("Email", model.allProviderDealersList[index].email??""), + itemWidget("Phone", model.allProviderDealersList[index].mobileNo??"") ], ), ), @@ -181,7 +181,7 @@ class _AssignDealerUserSheetState extends State { bool validation() { bool isValid = false; for (var element in provider.allProviderDealersList) { - if (element.isBranchUser) { + if (element.isBranchUser??false) { isValid = true; } } diff --git a/lib/views/settings/define_license_page.dart b/lib/views/settings/define_license_page.dart index 04ecb3d..84b7650 100644 --- a/lib/views/settings/define_license_page.dart +++ b/lib/views/settings/define_license_page.dart @@ -131,7 +131,7 @@ class _DefineLicensePageState extends State { maxLines: 3, isBackgroundEnabled: true, ), - if (((model.document?.data![index].documentUrl ?? "").toString().isNotEmpty)) + if ((model.document?.data![index].documentUrl ?? "").toString().isNotEmpty) Column( children: [ 8.height, @@ -145,7 +145,9 @@ class _DefineLicensePageState extends State { InkWell( onTap: () async { bool isPermissionsAvailable = await requestPermissionGranted(context, Permission.storage); - if (isPermissionsAvailable) model.selectFile(context,index); + if (isPermissionsAvailable) { + model.selectFile(context,index); + } }, child: Container( width: double.infinity, diff --git a/lib/views/subscriptions/my_subscritions_page.dart b/lib/views/subscriptions/my_subscritions_page.dart index 146ebda..ed0a0ca 100644 --- a/lib/views/subscriptions/my_subscritions_page.dart +++ b/lib/views/subscriptions/my_subscritions_page.dart @@ -1,5 +1,4 @@ import 'package:car_provider_app/config/provider_routes.dart'; -import 'package:car_provider_app/view_models/subscriptions_view_model.dart'; import 'package:car_provider_app/views/subscriptions/sheet/select_package_sheet.dart'; import 'package:car_provider_app/views/subscriptions/widget/subscriptions_card.dart'; import 'package:flutter/material.dart'; @@ -10,6 +9,7 @@ import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/navigator.dart'; import 'package:mc_common_app/view_models/payment_view_model.dart'; +import 'package:mc_common_app/view_models/subscriptions_view_model.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/common_widgets/app_bar.dart'; diff --git a/lib/views/subscriptions/subscriptions_page.dart b/lib/views/subscriptions/subscriptions_page.dart index f70bad0..2426a92 100644 --- a/lib/views/subscriptions/subscriptions_page.dart +++ b/lib/views/subscriptions/subscriptions_page.dart @@ -1,13 +1,17 @@ -import 'package:car_provider_app/view_models/subscriptions_view_model.dart'; + +import 'package:car_provider_app/views/subscriptions/sheet/downgrade_data_sheet.dart'; +import 'package:car_provider_app/views/subscriptions/sheet/upgrade_package_sheet.dart'; import 'package:car_provider_app/views/subscriptions/widget/subscriptions_card.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/models/subscriptions_models/subscription_model.dart'; import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/navigator.dart'; import 'package:mc_common_app/view_models/payment_view_model.dart'; +import 'package:mc_common_app/view_models/subscriptions_view_model.dart'; +import 'package:mc_common_app/widgets/bottom_sheet.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart'; import 'package:mc_common_app/widgets/tab/menu_tabs.dart'; @@ -18,7 +22,10 @@ class SubscriptionsPage extends StatelessWidget { @override Widget build(BuildContext context) { - context.read().getAllAvailableSubscriptions(null); + context.read().getSubscriptionBySP( + AppState().getUser.data?.userInfo?.providerId.toString() ?? "", + true, + ); return Scaffold( appBar: const CustomAppBar( title: "Subscriptions", @@ -50,13 +57,20 @@ class SubscriptionsPage extends StatelessWidget { return SubscriptionsCard( model.tempSubscriptions[index], isSubscribed: model.tempSubscriptions[index].isSubscribed ?? false, + isMainPage: false, onRenewSubscriptionClick: () { - context.read().updateOrderProviderSubscriptionId(id: model.tempSubscriptions[index].id??0); - navigateWithName( - context, - AppRoutes.paymentMethodsView, - arguments: PaymentTypes.subscription, - ); + // context.read().updateOrderProviderSubscriptionId(id: model.tempSubscriptions[index].id??0); + // navigateWithName( + // context, + // AppRoutes.paymentMethodsView, + // arguments: PaymentTypes.subscription, + // ); + if(model.tempSubscriptions[index].subscriptionTypeEnum==SubscriptionTypeEnum.upgrade){ + showMyBottomSheet(context, child: UpgradePackageSheet(model.tempSubscriptions[index])); + }else{ + showMyBottomSheet(context, child: DowngradeDataSheet(model.tempSubscriptions[index])); + } + }, ); }, diff --git a/lib/views/subscriptions/widget/subscriptions_card.dart b/lib/views/subscriptions/widget/subscriptions_card.dart index 6dcc91d..237c44f 100644 --- a/lib/views/subscriptions/widget/subscriptions_card.dart +++ b/lib/views/subscriptions/widget/subscriptions_card.dart @@ -4,6 +4,7 @@ import 'package:mc_common_app/extensions/string_extensions.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/utils/date_helper.dart'; +import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; class SubscriptionsCard extends StatelessWidget { @@ -12,12 +13,14 @@ class SubscriptionsCard extends StatelessWidget { Color? backgroundColor; late Color textColor; Function onRenewSubscriptionClick; + bool isMainPage; SubscriptionsCard(this.subscription, {Key? key, this.isSubscribed = false, this.backgroundColor, - required this.onRenewSubscriptionClick}) + required this.onRenewSubscriptionClick, + this.isMainPage = true}) : super(key: key); @override @@ -40,31 +43,44 @@ class SubscriptionsCard extends StatelessWidget { color: textColor, ), ), - if (isSubscribed) - Row( - children: [ - Container( - color: MyColors.white, - padding: const EdgeInsets.all(2), - child: const Icon( - Icons.done, - size: 8, - color: MyColors.primaryColor, + // if (isSubscribed) + // Row( + // children: [ + // Container( + // color: MyColors.white, + // padding: const EdgeInsets.all(2), + // child: const Icon( + // Icons.done, + // size: 8, + // color: MyColors.primaryColor, + // ), + // ).toCircle( + // borderRadius: 122, + // ), + // 6.width, + // "Subscribed".toText(color: Colors.white, isBold: true) + // ], + // ).toContainer( + // backgroundColor: MyColors.primaryColor, + // borderRadius: 20, + // padding: const EdgeInsets.symmetric( + // horizontal: 6, + // vertical: 3, + // ), + // ) + if (!isMainPage) + if (subscription.subscriptionTypeEnum == + SubscriptionTypeEnum.current) + "Current Package".toText(color: MyColors.primaryColor,fontWeight: FontWeight.bold), + if (isMainPage) + "Upgrade".toText(color: Colors.white).toContainer( + backgroundColor: MyColors.primaryColor, + borderRadius: 30, + padding: const EdgeInsets.symmetric( + horizontal: 6, + vertical: 3, ), - ).toCircle( - borderRadius: 122, - ), - 6.width, - "Subscribed".toText(color: Colors.white, isBold: true) - ], - ).toContainer( - backgroundColor: MyColors.primaryColor, - borderRadius: 20, - padding: const EdgeInsets.symmetric( - horizontal: 6, - vertical: 3, - ), - ) + ) ], ), 6.height, @@ -74,7 +90,7 @@ class SubscriptionsCard extends StatelessWidget { 14.height, Row( crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.start, children: [ Expanded( child: Row( @@ -94,24 +110,28 @@ class SubscriptionsCard extends StatelessWidget { ], ), ), - if (!isSubscribed) + if (!isMainPage) Row( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, children: [ - "Upgrade".toText( - fontSize: 14, - color: textColor, - ), - 4.width, - Icon( + (subscription.subscriptionTypeEnum == + SubscriptionTypeEnum.current) + ? "Renew".toText() + : (subscription.subscriptionTypeEnum)! + .getStringSubscriptionTypeEnum() + .toText(), + 6.width, + const Icon( Icons.arrow_forward, size: 16, - color: textColor, ) ], - ) + ), ], ), - if (isSubscribed) + // if (isSubscribed) + if (isMainPage) Row( children: [ "Expires on ${DateHelper.formatAsDayMonthYear(subscription.dateEnd)}" @@ -126,6 +146,7 @@ class SubscriptionsCard extends StatelessWidget { color: MyColors.primaryColor, fontSize: 14, textDecoration: TextDecoration.underline, + decorationColor: MyColors.primaryColor, isBold: true, ), ], diff --git a/pubspec.lock b/pubspec.lock index 4caf0fa..ae89607 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -485,6 +485,30 @@ packages: url: "https://pub.dev" source: hosted version: "0.6.7" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" + url: "https://pub.dev" + source: hosted + version: "10.0.0" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 + url: "https://pub.dev" + source: hosted + version: "2.0.1" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 + url: "https://pub.dev" + source: hosted + version: "2.0.1" lints: dependency: transitive description: @@ -553,18 +577,18 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" mc_common_app: dependency: "direct main" description: @@ -576,10 +600,10 @@ packages: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.0" nested: dependency: transitive description: @@ -600,10 +624,10 @@ packages: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_drawing: dependency: transitive description: @@ -1065,14 +1089,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - web: + vm_service: dependency: transitive description: - name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + name: vm_service + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "13.0.0" web_socket_channel: dependency: transitive description: