subscription 3.0

mirza_dev
Mirza.Shafique@cloudsolutions.com.sa 2 years ago
parent ed2a1eedc6
commit 9824303de1

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

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

@ -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<SubscriptionModel> getAllSubscriptions(String? serviceProviderID);
}
class SubscriptionRepoImp extends SubscriptionRepo {
@override
Future<SubscriptionModel> getAllSubscriptions(String? serviceProviderID) async {
String t = AppState().getUser.data!.accessToken ?? "";
Map<String, String> queryParameters = {};
if (serviceProviderID != null) {
queryParameters = {
"ID": serviceProviderID,
};
}
return await injector.get<ApiClient>().getJsonForObject((json) => SubscriptionModel.fromJson(json), ApiConsts.getAllSubscriptions, token: t, queryParameters: queryParameters);
}
}

@ -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<DropValue> monthlyTabs = [];
late SubscriptionModel allSubscriptions;
List<Subscription> 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 = <int>{};
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);
}
}
}

@ -111,8 +111,8 @@ class _DealerUserPageState extends State<DealerUserPage> {
("${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??"")
],
),
),

@ -90,7 +90,7 @@ class _AssignDealerUserSheetState extends State<AssignDealerUserSheet> {
Utils.showLoading(context);
List<int> 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<AssignDealerUserSheet> {
("${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<AssignDealerUserSheet> {
bool validation() {
bool isValid = false;
for (var element in provider.allProviderDealersList) {
if (element.isBranchUser) {
if (element.isBranchUser??false) {
isValid = true;
}
}

@ -131,7 +131,7 @@ class _DefineLicensePageState extends State<DefineLicensePage> {
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<DefineLicensePage> {
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,

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

@ -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<SubscriptionsVM>().getAllAvailableSubscriptions(null);
context.read<SubscriptionsVM>().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<PaymentVM>().updateOrderProviderSubscriptionId(id: model.tempSubscriptions[index].id??0);
navigateWithName(
context,
AppRoutes.paymentMethodsView,
arguments: PaymentTypes.subscription,
);
// context.read<PaymentVM>().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]));
}
},
);
},

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

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

Loading…
Cancel
Save