From dbd6194441b70f78cdea5ee4acb2264352ab150c Mon Sep 17 00:00:00 2001 From: "Aamir.Muhammad" <> Date: Mon, 22 Jul 2024 09:36:03 +0300 Subject: [PATCH 1/3] Localization --- ios/Runner.xcodeproj/project.pbxproj | 4 +++- lib/views/subscriptions/my_subscritions_page.dart | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 7f369b4..a0f1406 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -121,7 +121,6 @@ F095357B123772C701252686 /* Pods-Runner.release.xcconfig */, B5D2F47A7F9A7D8C8678860A /* Pods-Runner.profile.xcconfig */, ); - name = Pods; path = Pods; sourceTree = ""; }; @@ -377,6 +376,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = CK4WN356P5; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -504,6 +504,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = CK4WN356P5; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -526,6 +527,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = CK4WN356P5; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( diff --git a/lib/views/subscriptions/my_subscritions_page.dart b/lib/views/subscriptions/my_subscritions_page.dart index 3f551ec..0798eb3 100644 --- a/lib/views/subscriptions/my_subscritions_page.dart +++ b/lib/views/subscriptions/my_subscritions_page.dart @@ -56,7 +56,7 @@ class MySubscriptionsPage extends StatelessWidget { MResponse response = await model.createSubscriptionOrder( model.allSubscriptions.data![index].id ?? 0, true, - false, + true, model.allSubscriptions.data![index].price.toString(), ); Utils.hideLoading(context); From b78aeb8002a05947d0d0fb4938bc90b29b3d25cc Mon Sep 17 00:00:00 2001 From: "Aamir.Muhammad" <> Date: Wed, 24 Jul 2024 09:25:58 +0300 Subject: [PATCH 2/3] fixes --- ios/Runner.xcodeproj/project.pbxproj | 12 +- .../xcshareddata/xcschemes/Runner.xcscheme | 15 +- ios/Runner/AppDelegate.swift | 2 + ios/Runner/Info.plist | 28 ++-- lib/config/provider_routes.dart | 2 +- .../add_new_service_appointment_page.dart | 2 +- .../appoinments/merge_appointment_page.dart | 2 +- .../appoinments/update_appointment_page.dart | 5 +- lib/views/dashboard/dashboard_page.dart | 18 ++- .../dashboard/fragments/home_fragment.dart | 28 ++-- lib/views/location/pick_location_page.dart | 15 +- ..._page.dart => all_subscriptions_page.dart} | 4 +- .../subscriptions/my_subscritions_page.dart | 24 ++-- ..._card.dart => all_subscriptions_card.dart} | 4 +- .../widget/my_subscriptions_card.dart | 133 ++++++++++++++++++ pubspec.yaml | 2 +- 16 files changed, 219 insertions(+), 77 deletions(-) rename lib/views/subscriptions/{subscriptions_page.dart => all_subscriptions_page.dart} (96%) rename lib/views/subscriptions/widget/{subscriptions_card.dart => all_subscriptions_card.dart} (98%) create mode 100644 lib/views/subscriptions/widget/my_subscriptions_card.dart diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index a0f1406..0752838 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -376,14 +376,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = CK4WN356P5; + DEVELOPMENT_TEAM = 99Z3UD3LJM; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.carProviderApp; + PRODUCT_BUNDLE_IDENTIFIER = com.example.carProviderAppp; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -504,14 +504,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = CK4WN356P5; + DEVELOPMENT_TEAM = 99Z3UD3LJM; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.carProviderApp; + PRODUCT_BUNDLE_IDENTIFIER = com.example.carProviderAppp; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -527,14 +527,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = CK4WN356P5; + DEVELOPMENT_TEAM = 99Z3UD3LJM; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.carProviderApp; + PRODUCT_BUNDLE_IDENTIFIER = com.example.carProviderAppp; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index e67b280..8b3e7d0 100644 --- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -27,8 +27,6 @@ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES"> - - - - + + - - + + + + Bool { + GMSServices.provideAPIKey("AIzaSyCyDbWUM9d_sBUGIE8PcuShzPaqO08NSC8") GeneratedPluginRegistrant.register(with: self) return super.application(application, didFinishLaunchingWithOptions: launchOptions) } diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index f04971b..fd96eda 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -2,6 +2,8 @@ + CADisableMinimumFrameDurationOnPhone + CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable @@ -22,6 +24,22 @@ $(FLUTTER_BUILD_NUMBER) LSRequiresIPhoneOS + NSAppleMusicUsageDescription + Access to pick a photo + NSCameraUsageDescription + Access to take a photo by camera + NSPhotoLibraryUsageDescription + Access to pick a photo + NSFaceIDUsageDescription + This app requires Face ID to allow biometric authentication for app login. + NSLocationAlwaysAndWhenInUseUsageDescription + This App requires access to your location to pick the location. + NSLocationAlwaysUsageDescription + This App requires access to your location to pick the location. + NSLocationWhenInUseUsageDescription + This App requires access to your location to pick the location. + UIApplicationSupportsIndirectInputEvents + UILaunchStoryboardName LaunchScreen UIMainStoryboardFile @@ -41,15 +59,5 @@ UIViewControllerBasedStatusBarAppearance - NSCameraUsageDescription - Access to take a photo by camera - NSAppleMusicUsageDescription - Access to pick a photo - NSPhotoLibraryUsageDescription - Access to pick a photo - CADisableMinimumFrameDurationOnPhone - - UIApplicationSupportsIndirectInputEvents - diff --git a/lib/config/provider_routes.dart b/lib/config/provider_routes.dart index 502f739..40cde9d 100644 --- a/lib/config/provider_routes.dart +++ b/lib/config/provider_routes.dart @@ -18,7 +18,7 @@ import 'package:car_provider_app/views/settings/services/duplication/sheet/appro import 'package:car_provider_app/views/settings/services/items_list_page.dart'; import 'package:car_provider_app/views/settings/services/services_list_page.dart'; import 'package:car_provider_app/views/subscriptions/my_subscritions_page.dart'; -import 'package:car_provider_app/views/subscriptions/subscriptions_page.dart'; +import 'package:car_provider_app/views/subscriptions/all_subscriptions_page.dart'; import 'package:mc_common_app/config/routes.dart'; import 'package:mc_common_app/models/advertisment_models/ad_details_model.dart'; import 'package:flutter/material.dart'; diff --git a/lib/views/appoinments/add_new_service_appointment_page.dart b/lib/views/appoinments/add_new_service_appointment_page.dart index 6ed4f4b..ce553e6 100644 --- a/lib/views/appoinments/add_new_service_appointment_page.dart +++ b/lib/views/appoinments/add_new_service_appointment_page.dart @@ -255,7 +255,7 @@ class _AddNewServiceAppointmentPageState extends State().getMyAppointmentsForProvider({ "ServiceProviderID": injector.get().getUser.data?.userInfo?.providerId.toString() ?? "0", "ProviderBranchID": branchId.toString(), - }, isNeedToRebuild: true); + },); } double calculatePrice() { diff --git a/lib/views/appoinments/merge_appointment_page.dart b/lib/views/appoinments/merge_appointment_page.dart index ead4e59..1253c78 100644 --- a/lib/views/appoinments/merge_appointment_page.dart +++ b/lib/views/appoinments/merge_appointment_page.dart @@ -156,6 +156,6 @@ class MergeAppointmentListPage extends StatelessWidget { .toString() ?? "0", "ProviderBranchID": branchId.toString(), - }, isNeedToRebuild: true); + }); } } diff --git a/lib/views/appoinments/update_appointment_page.dart b/lib/views/appoinments/update_appointment_page.dart index 317bdcf..1ecd4c3 100644 --- a/lib/views/appoinments/update_appointment_page.dart +++ b/lib/views/appoinments/update_appointment_page.dart @@ -21,7 +21,6 @@ import 'package:provider/provider.dart'; import '../dashboard/widget/appointment_slider_widget.dart'; import 'package:easy_localization/easy_localization.dart'; - class UpdateAppointmentPage extends StatelessWidget { late AppointmentListModel appointmentListModel; @@ -30,7 +29,7 @@ class UpdateAppointmentPage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: CustomAppBar( + appBar: CustomAppBar( title: LocaleKeys.updateAppointment.tr(), ), body: SizedBox( @@ -266,6 +265,6 @@ class UpdateAppointmentPage extends StatelessWidget { await context.read().getMyAppointmentsForProvider({ "ServiceProviderID": injector.get().getUser.data?.userInfo?.providerId.toString() ?? "0", "ProviderBranchID": branchId.toString(), - }, isNeedToRebuild: true); + }); } } diff --git a/lib/views/dashboard/dashboard_page.dart b/lib/views/dashboard/dashboard_page.dart index 023abf9..3282827 100644 --- a/lib/views/dashboard/dashboard_page.dart +++ b/lib/views/dashboard/dashboard_page.dart @@ -25,6 +25,7 @@ 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/chat_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/common_widgets/app_bar.dart'; import 'package:mc_common_app/widgets/common_widgets/bottom_nav_bar.dart'; @@ -49,20 +50,15 @@ class _DashboardPageState extends State { dashboardVM = Provider.of(context, listen: false); context.read().populateRequestsFilterList(); context.read().populateAppointmentsFilterList(); - _onRefresh(); + scheduleMicrotask(() => _onRefresh()); } Future _onRefresh() async { final requestsVM = context.read(); - // final chatVM = context.read(); - // context.read().populateAdsFilterList(); - context.read().getBranchAndServices(); + await context.read().getBranchAndServices(); AdVM adVm = Provider.of(context, listen: false); - // context.read().myUpComingAppointments, - AppointmentsVM appointmentsVM = Provider.of(context, listen: false); - if (appointmentsVM.myAppointments.isEmpty) { - await appointmentsVM.getMyAppointmentsForProvider({"ServiceProviderID": injector.get().getUser.data?.userInfo?.providerId.toString() ?? "0"}); - } + SubscriptionsVM sVM = Provider.of(context, listen: false); + await context.read().getMyAppointmentsForProvider({"ServiceProviderID": injector.get().getUser.data?.userInfo?.providerId.toString() ?? "0"}); adVm.populateAdsFilterList(); if (adVm.myAds.isEmpty) { await adVm.getMyAds(); @@ -82,11 +78,13 @@ class _DashboardPageState extends State { if (requestsVM.myRequests.isEmpty) { await requestsVM.getRequests(appType: AppType.provider); } + if (sVM.mySubscriptionsBySp.isEmpty) { + await sVM.getMySubscriptionsBySP(AppState().getUser.data?.userInfo?.providerId.toString() ?? ""); + } // await chatVM.buildHubConnection(context); } - @override Widget build(BuildContext context) { List fragments = [ diff --git a/lib/views/dashboard/fragments/home_fragment.dart b/lib/views/dashboard/fragments/home_fragment.dart index f477e37..ee13c53 100644 --- a/lib/views/dashboard/fragments/home_fragment.dart +++ b/lib/views/dashboard/fragments/home_fragment.dart @@ -1,3 +1,5 @@ +import 'package:car_provider_app/config/provider_routes.dart'; +import 'package:car_provider_app/view_models/dashboard_view_model.dart'; import 'package:car_provider_app/views/dashboard/widget/my_service_provider.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -5,11 +7,13 @@ import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/generated/locale_keys.g.dart'; +import 'package:mc_common_app/models/appointments_models/appointment_list_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/ad_view_model.dart'; import 'package:mc_common_app/view_models/appointments_view_model.dart'; +import 'package:mc_common_app/view_models/service_view_model.dart'; import 'package:mc_common_app/views/advertisement/ads_list.dart'; import 'package:mc_common_app/views/appointments/widgets/customer_appointment_slider_widget.dart'; @@ -20,7 +24,6 @@ import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:provider/provider.dart'; import 'package:easy_localization/easy_localization.dart'; - import '../widget/appointment_slider_widget.dart'; class HomeFragment extends StatelessWidget { @@ -64,28 +67,29 @@ class HomeFragment extends StatelessWidget { onRefresh: onRefresh, child: ListView( children: [ + 10.height, ViewAllWidget( - title: LocaleKeys.upcoming_appointment.tr(), - subTitle: LocaleKeys.view_all.tr(), - onSubtitleTapped: () {}, - ).horPaddingMain(), + title: LocaleKeys.upcoming_appointment.tr(), + subTitle: LocaleKeys.view_all.tr(), + onSubtitleTapped: () { + context.read().updateIndex(1); + }).horPaddingMain(), // const AppointmentSliderWidget().horPaddingMain(), CustomerAppointmentSliderWidget( - myUpComingAppointments: context.read().myUpComingAppointments, - isNeedToShowEmptyMessage: true, - onAppointmentClick: () { - // navigateWithName( - // context, ProviderAppRoutes.appointment, - // arguments: branches[index]); + onAppointmentClick: (AppointmentListModel value) { + navigateWithName(context, ProviderAppRoutes.appointmentDetailList, arguments: value); }, ), 21.height, ViewAllWidget( title: LocaleKeys.myBranches.tr(), subTitle: LocaleKeys.view_all.tr(), - onSubtitleTapped: () {}, + onSubtitleTapped: () { + context.read().updateIndex(0); + }, ).horPaddingMain(), const ServiceProviderWidget().horPaddingMain(), + Consumer( builder: (BuildContext context, AdVM adVM, Widget? child) { if (adVM.state == ViewState.busy) { diff --git a/lib/views/location/pick_location_page.dart b/lib/views/location/pick_location_page.dart index 99f0004..72105d3 100644 --- a/lib/views/location/pick_location_page.dart +++ b/lib/views/location/pick_location_page.dart @@ -13,6 +13,7 @@ import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; import 'package:permission_handler/permission_handler.dart'; import 'map_selection_widget.dart'; +import 'package:geocoding/geocoding.dart'; class PickLocationPage extends StatefulWidget { Function(double, double, String) onPickAddress; @@ -122,6 +123,8 @@ class _PickLocationPageState extends State { Future _updatePosition(CameraPosition _position) async { latitude = _position.target.latitude; longitude = _position.target.longitude; + print(latitude); + print(latitude); updateAddress(latitude, longitude); } @@ -137,8 +140,7 @@ class _PickLocationPageState extends State { requestPermissions().then( (value) async { if (value[Permission.location]!.isGranted) { - var position = - await GeolocatorPlatform.instance.getCurrentPosition(); + var position = await GeolocatorPlatform.instance.getCurrentPosition(); currentPostion = LatLng(position.latitude, position.longitude); latitude = position.latitude; longitude = position.longitude; @@ -151,11 +153,8 @@ class _PickLocationPageState extends State { } updateAddress(double latitude, double longitude) async { - // List placemarks = - // await placemarkFromCoordinates(latitude, longitude); - // _counter.value = - // '${placemarks.first.street}, ${placemarks.first.subLocality}, ${placemarks.first.locality}, ${placemarks.first.postalCode}, ${placemarks.first.country}'; - // print("Address121: " + placemarks[0].toString()); + List placemarks = await placemarkFromCoordinates(latitude, longitude); + _counter.value = '${placemarks.first.street}, ${placemarks.first.subLocality}, ${placemarks.first.locality}, ${placemarks.first.postalCode}, ${placemarks.first.country}'; } setMap() { @@ -176,6 +175,6 @@ class _PickLocationPageState extends State { } Future> requestPermissions() async { - var permissionResults = [Permission.calendar].request(); + var permissionResults = [Permission.location].request(); return permissionResults; } diff --git a/lib/views/subscriptions/subscriptions_page.dart b/lib/views/subscriptions/all_subscriptions_page.dart similarity index 96% rename from lib/views/subscriptions/subscriptions_page.dart rename to lib/views/subscriptions/all_subscriptions_page.dart index 48d4b45..865cfcd 100644 --- a/lib/views/subscriptions/subscriptions_page.dart +++ b/lib/views/subscriptions/all_subscriptions_page.dart @@ -2,7 +2,7 @@ import 'dart:async'; 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:car_provider_app/views/subscriptions/widget/all_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'; @@ -68,7 +68,7 @@ class _SubscriptionsPageState extends State { 21.height, ListView.separated( itemBuilder: (BuildContext context, int index) { - return SubscriptionsCard( + return AllSubscriptionsCard( model.tempSubscriptions[index], isSubscribed: model.tempSubscriptions[index].isSubscribed ?? false, isMainPage: false, diff --git a/lib/views/subscriptions/my_subscritions_page.dart b/lib/views/subscriptions/my_subscritions_page.dart index 0798eb3..7ff6815 100644 --- a/lib/views/subscriptions/my_subscritions_page.dart +++ b/lib/views/subscriptions/my_subscritions_page.dart @@ -2,7 +2,8 @@ import 'dart:developer'; import 'package:car_provider_app/config/provider_routes.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:car_provider_app/views/subscriptions/widget/all_subscriptions_card.dart'; +import 'package:car_provider_app/views/subscriptions/widget/my_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'; @@ -27,10 +28,10 @@ class MySubscriptionsPage extends StatelessWidget { @override Widget build(BuildContext context) { - context.read().getMySubscriptions(AppState().getUser.data?.userInfo?.providerId.toString() ?? ""); + context.read().getMySubscriptionsBySP(AppState().getUser.data?.userInfo?.providerId.toString() ?? ""); return Scaffold( appBar: const CustomAppBar( - title: "My Subscriptions", + title: "My Subscription", ), body: SizedBox( width: double.infinity, @@ -47,18 +48,14 @@ class MySubscriptionsPage extends StatelessWidget { 21.height, ListView.separated( itemBuilder: (BuildContext context, int index) { - return SubscriptionsCard( - model.allSubscriptions.data![index], - isSubscribed: model.allSubscriptions.data![index].isSubscribed ?? false, + return MySubscriptionsCard( + model.mySubscriptionsBySp[index], + isSubscribed: false, backgroundColor: MyColors.darkIconColor, + isMainPage: model.mySubscriptionsBySp[index].isExpired ?? false, onRenewSubscriptionClick: () async { Utils.showLoading(context); - MResponse response = await model.createSubscriptionOrder( - model.allSubscriptions.data![index].id ?? 0, - true, - true, - model.allSubscriptions.data![index].price.toString(), - ); + MResponse response = await model.createSubscriptionOrder(model.mySubscriptionsBySp[index].subscriptionID ?? 0, true, true); Utils.hideLoading(context); if (response.data != null) { log("response.data: ${response.data}"); @@ -81,7 +78,7 @@ class MySubscriptionsPage extends StatelessWidget { }, physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, - itemCount: model.allSubscriptions.data!.length, + itemCount: model.mySubscriptionsBySp.length, ), 21.height, ], @@ -102,7 +99,6 @@ class MySubscriptionsPage extends StatelessWidget { ], ), ), - ); } } diff --git a/lib/views/subscriptions/widget/subscriptions_card.dart b/lib/views/subscriptions/widget/all_subscriptions_card.dart similarity index 98% rename from lib/views/subscriptions/widget/subscriptions_card.dart rename to lib/views/subscriptions/widget/all_subscriptions_card.dart index 237c44f..c107c82 100644 --- a/lib/views/subscriptions/widget/subscriptions_card.dart +++ b/lib/views/subscriptions/widget/all_subscriptions_card.dart @@ -7,7 +7,7 @@ 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 { +class AllSubscriptionsCard extends StatelessWidget { Subscription subscription; bool isSubscribed; Color? backgroundColor; @@ -15,7 +15,7 @@ class SubscriptionsCard extends StatelessWidget { Function onRenewSubscriptionClick; bool isMainPage; - SubscriptionsCard(this.subscription, + AllSubscriptionsCard(this.subscription, {Key? key, this.isSubscribed = false, this.backgroundColor, diff --git a/lib/views/subscriptions/widget/my_subscriptions_card.dart b/lib/views/subscriptions/widget/my_subscriptions_card.dart new file mode 100644 index 0000000..216718a --- /dev/null +++ b/lib/views/subscriptions/widget/my_subscriptions_card.dart @@ -0,0 +1,133 @@ +import 'package:flutter/material.dart'; +import 'package:mc_common_app/extensions/int_extensions.dart'; +import 'package:mc_common_app/extensions/string_extensions.dart'; +import 'package:mc_common_app/models/subscriptions_models/provider_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/utils/date_helper.dart'; +import 'package:mc_common_app/utils/enums.dart'; +import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; + +class MySubscriptionsCard extends StatelessWidget { + ProviderSubscriptionModel providerSubscriptionModel; + bool isSubscribed; + Color? backgroundColor; + late Color textColor; + Function onRenewSubscriptionClick; + bool isMainPage; + + MySubscriptionsCard(this.providerSubscriptionModel, {Key? key, this.isSubscribed = false, this.backgroundColor, required this.onRenewSubscriptionClick, this.isMainPage = true}) : super(key: key); + + @override + Widget build(BuildContext context) { + textColor = backgroundColor == null ? Colors.black : Colors.white; + return InkWell( + onTap: isSubscribed + ? null + : () { + onRenewSubscriptionClick(); + }, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Expanded( + child: providerSubscriptionModel.subscriptionName.toString().toText( + fontSize: 18, + color: textColor, + ), + ), + if (providerSubscriptionModel.isActive!) "Current Package".toText(color: MyColors.primaryColor, fontWeight: FontWeight.bold), + 5.width, + if (providerSubscriptionModel.isUpgradeNow!) + "Upgrade".toText(color: Colors.white).toContainer( + backgroundColor: MyColors.primaryColor, + borderRadius: 30, + padding: const EdgeInsets.symmetric( + horizontal: 6, + vertical: 3, + ), + ) + ], + ), + 6.height, + showItem("Ads:", providerSubscriptionModel.adsRemaining.toString()), + showItem("Users:", providerSubscriptionModel.subUsersRemaining.toString()), + showItem("Branches:", providerSubscriptionModel.branchesRemaining.toString()), + 14.height, + // Row( + // crossAxisAlignment: CrossAxisAlignment.center, + // mainAxisAlignment: MainAxisAlignment.start, + // children: [ + // Expanded( + // child: Row( + // mainAxisAlignment: MainAxisAlignment.start, + // crossAxisAlignment: CrossAxisAlignment.end, + // children: [ + // "10000".toString().toText( + // fontSize: 26, + // isBold: true, + // color: textColor, + // ), + // 2.width, + // " SAR/Month".toText( + // color: MyColors.lightTextColor, + // fontSize: 16, + // ), + // ], + // ), + // ), + // ], + // ), + Row( + children: [ + "Expires on ${DateHelper.formatAsDayMonthYear(providerSubscriptionModel.dateEnd)}".toText( + fontSize: 14, + color: textColor, + ), + if (!providerSubscriptionModel.isTrialSubscription!) + Row( + children: [ + 6.width, + "Renew".toText( + color: MyColors.primaryColor, + fontSize: 14, + textDecoration: TextDecoration.underline, + decorationColor: MyColors.primaryColor, + isBold: true, + ), + ], + ).onPress(() { + onRenewSubscriptionClick(); + }), + ], + ) + ], + ).toWhiteContainer( + width: double.infinity, + allPading: 12, + backgroundColor: backgroundColor, + margin: const EdgeInsets.symmetric( + horizontal: 21, + ), + ), + ); + } + + Widget showItem(String title, String value) { + return Row( + children: [ + title.toText( + fontSize: 14, + color: textColor, + ), + 2.width, + value.toText( + fontSize: 14, + color: textColor, + ), + ], + ); + } +} diff --git a/pubspec.yaml b/pubspec.yaml index 5348ee8..c9d71d3 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -40,7 +40,7 @@ dependencies: # path: C:/Users/mirza.shafique/AndroidStudioProjects/mc_common_app mc_common_app: - path: /Volumes/Data/Projects/Flutter/car_common_app + path: /Users/amir/StudioProjects/car_common_app From 8b32b53983322dfa648354df0c3c3a39fdb691d7 Mon Sep 17 00:00:00 2001 From: "Aamir.Muhammad" <> Date: Mon, 29 Jul 2024 15:10:03 +0300 Subject: [PATCH 3/3] Subscriptions --- lib/views/dashboard/dashboard_page.dart | 6 +- .../dashboard/widget/my_service_provider.dart | 2 +- .../subscriptions/all_subscriptions_page.dart | 54 ++-- .../subscriptions/my_subscritions_page.dart | 66 ++++- .../sheet/upgrade_package_sheet.dart | 32 +-- .../widget/all_subscriptions_card.dart | 265 ++++++++---------- .../widget/my_subscriptions_card.dart | 199 +++++++------ 7 files changed, 334 insertions(+), 290 deletions(-) diff --git a/lib/views/dashboard/dashboard_page.dart b/lib/views/dashboard/dashboard_page.dart index 3282827..6d4f796 100644 --- a/lib/views/dashboard/dashboard_page.dart +++ b/lib/views/dashboard/dashboard_page.dart @@ -57,7 +57,7 @@ class _DashboardPageState extends State { final requestsVM = context.read(); await context.read().getBranchAndServices(); AdVM adVm = Provider.of(context, listen: false); - SubscriptionsVM sVM = Provider.of(context, listen: false); + SubscriptionsVM sVM = Provider.of(context, listen: false); await context.read().getMyAppointmentsForProvider({"ServiceProviderID": injector.get().getUser.data?.userInfo?.providerId.toString() ?? "0"}); adVm.populateAdsFilterList(); if (adVm.myAds.isEmpty) { @@ -82,6 +82,10 @@ class _DashboardPageState extends State { await sVM.getMySubscriptionsBySP(AppState().getUser.data?.userInfo?.providerId.toString() ?? ""); } + if (sVM.tempSubscriptions.isEmpty) { + await sVM.getSubscriptionBySP(AppState().getUser.data?.userInfo?.providerId.toString() ?? "", true); + } + // await chatVM.buildHubConnection(context); } diff --git a/lib/views/dashboard/widget/my_service_provider.dart b/lib/views/dashboard/widget/my_service_provider.dart index 60a41d3..f834dd5 100644 --- a/lib/views/dashboard/widget/my_service_provider.dart +++ b/lib/views/dashboard/widget/my_service_provider.dart @@ -25,7 +25,7 @@ class ServiceProviderWidget extends StatelessWidget { if (model.state == ViewState.busy) { return const Center(child: CircularProgressIndicator()); } else { - return model.branches!.data == null + return model.branches == null || model.branches!.data == null ? Center(child: Text(LocaleKeys.noBranchFound.tr())) : model.branches!.data!.serviceProviderBranch != null && model.branches!.data!.serviceProviderBranch!.isEmpty ? Center(child: Text(LocaleKeys.no_branch.tr())) diff --git a/lib/views/subscriptions/all_subscriptions_page.dart b/lib/views/subscriptions/all_subscriptions_page.dart index 865cfcd..bd7fecd 100644 --- a/lib/views/subscriptions/all_subscriptions_page.dart +++ b/lib/views/subscriptions/all_subscriptions_page.dart @@ -7,6 +7,8 @@ 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/generated/locale_keys.g.dart'; +import 'package:mc_common_app/models/general_models/m_response.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'; @@ -17,6 +19,7 @@ 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'; import 'package:provider/provider.dart'; +import 'package:easy_localization/easy_localization.dart'; class SubscriptionsPage extends StatefulWidget { const SubscriptionsPage({Key? key}) : super(key: key); @@ -41,50 +44,49 @@ class _SubscriptionsPageState extends State { @override Widget build(BuildContext context) { return Scaffold( - appBar: const CustomAppBar( - title: "Subscriptions", + appBar: CustomAppBar( + title: LocaleKeys.subscriptions.tr(), ), body: SizedBox( width: double.infinity, height: double.infinity, - child: Consumer(builder: (context, model, _) { - return model.state == ViewState.busy + child: Consumer(builder: (context, subcriptionsVM, _) { + return subcriptionsVM.state == ViewState.busy ? const Center(child: CircularProgressIndicator()) : SingleChildScrollView( child: Column( children: [ 21.height, MenuTabs( - model.selectedIndex, - model.monthlyTabs, + subcriptionsVM.monthlyTabs, selectedColor: MyColors.primaryColor, - onSelect: (DropValue selectedValue) { - model.selectedMothlyTab = selectedValue; - // model.selectedIndex = selectedIndex; - model.filterSubscriptions(); - model.setState(ViewState.idle); + onSelected: (DropValue selectedValue, int index) { + subcriptionsVM.selectedMothlyTab = selectedValue; + subcriptionsVM.monthlyTabs.forEach((element) => element.isEnabled = false); + subcriptionsVM.monthlyTabs[index].isEnabled = true; + subcriptionsVM.filterSubscriptions(); + subcriptionsVM.setState(ViewState.idle); }, ), 21.height, ListView.separated( itemBuilder: (BuildContext context, int index) { return AllSubscriptionsCard( - 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, - // ); - if (model.tempSubscriptions[index].subscriptionTypeEnum == SubscriptionTypeEnum.upgrade) { - showMyBottomSheet(context, child: UpgradePackageSheet(model.tempSubscriptions[index])); - } else { - showMyBottomSheet(context, child: DowngradeDataSheet(model.tempSubscriptions[index])); + subcriptionsVM.tempSubscriptions[index], + isSubscribed: subcriptionsVM.tempSubscriptions[index].isSubscribed ?? false, + onRenewSubscriptionClick: () async { + MResponse response = await subcriptionsVM.createSubscriptionOrder(subcriptionsVM.tempSubscriptions[index].id ?? 0, true, true); + if (response.data != null) { + context.read().updateOrderProviderSubscriptionId(id: response.data ?? 0); + navigateWithName(context, AppRoutes.paymentMethodsView, arguments: PaymentTypes.subscription); } }, + onUpgradeSubscriptionClick: () { + showMyBottomSheet(context, child: UpgradePackageSheet(subcriptionsVM.tempSubscriptions[index])); + }, + onDowngradeSubscriptionClick: () { + showMyBottomSheet(context, child: DowngradeDataSheet(subcriptionsVM.tempSubscriptions[index])); + }, ); }, separatorBuilder: (BuildContext context, int index) { @@ -92,7 +94,7 @@ class _SubscriptionsPageState extends State { }, physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, - itemCount: model.tempSubscriptions.length, + itemCount: subcriptionsVM.tempSubscriptions.length, ), 21.height, ], diff --git a/lib/views/subscriptions/my_subscritions_page.dart b/lib/views/subscriptions/my_subscritions_page.dart index 7ff6815..6773dec 100644 --- a/lib/views/subscriptions/my_subscritions_page.dart +++ b/lib/views/subscriptions/my_subscritions_page.dart @@ -1,7 +1,9 @@ +import 'dart:async'; import 'dart:developer'; import 'package:car_provider_app/config/provider_routes.dart'; import 'package:car_provider_app/views/subscriptions/sheet/select_package_sheet.dart'; +import 'package:car_provider_app/views/subscriptions/sheet/upgrade_package_sheet.dart'; import 'package:car_provider_app/views/subscriptions/widget/all_subscriptions_card.dart'; import 'package:car_provider_app/views/subscriptions/widget/my_subscriptions_card.dart'; import 'package:flutter/material.dart'; @@ -10,6 +12,7 @@ import 'package:mc_common_app/config/routes.dart'; import 'package:mc_common_app/extensions/int_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/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'; @@ -19,19 +22,30 @@ 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'; -import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:provider/provider.dart'; import 'package:easy_localization/easy_localization.dart'; -class MySubscriptionsPage extends StatelessWidget { +class MySubscriptionsPage extends StatefulWidget { const MySubscriptionsPage({Key? key}) : super(key: key); + @override + State createState() => _MySubscriptionsPageState(); +} + +class _MySubscriptionsPageState extends State { + @override + void initState() { + super.initState(); + scheduleMicrotask(() { + context.read().getMySubscriptionsBySP(AppState().getUser.data?.userInfo?.providerId.toString() ?? ""); + }); + } + @override Widget build(BuildContext context) { - context.read().getMySubscriptionsBySP(AppState().getUser.data?.userInfo?.providerId.toString() ?? ""); return Scaffold( - appBar: const CustomAppBar( - title: "My Subscription", + appBar: CustomAppBar( + title: LocaleKeys.mySubscription.tr(), ), body: SizedBox( width: double.infinity, @@ -48,6 +62,7 @@ class MySubscriptionsPage extends StatelessWidget { 21.height, ListView.separated( itemBuilder: (BuildContext context, int index) { + var sub = model.mySubscriptionsBySp[index]; return MySubscriptionsCard( model.mySubscriptionsBySp[index], isSubscribed: false, @@ -58,20 +73,43 @@ class MySubscriptionsPage extends StatelessWidget { MResponse response = await model.createSubscriptionOrder(model.mySubscriptionsBySp[index].subscriptionID ?? 0, true, true); Utils.hideLoading(context); if (response.data != null) { - log("response.data: ${response.data}"); context.read().updateOrderProviderSubscriptionId(id: response.data ?? 0); - navigateWithName( - context, - AppRoutes.paymentMethodsView, - arguments: PaymentTypes.subscription, - ); + navigateWithName(context, AppRoutes.paymentMethodsView, arguments: PaymentTypes.subscription); } }, - ).onPress( - () { - showMyBottomSheet(context, child: const SelectPackageSheet()); + onUpgradeSubscriptionClick: () { + print("Upgrade"); + print(sub.toJson()); + // showMyBottomSheet( + // context, + // child: UpgradePackageSheet( + // Subscription( + // id: sub.subscriptionID, + // isMyCurrentPackage: false, + // 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 + // ), + // ), + // ); }, ); + // .onPress( + // () { + // // showMyBottomSheet(context, child: const SelectPackageSheet()); + // }, + // ); }, separatorBuilder: (BuildContext context, int index) { return 21.height; diff --git a/lib/views/subscriptions/sheet/upgrade_package_sheet.dart b/lib/views/subscriptions/sheet/upgrade_package_sheet.dart index cd5d009..085b14e 100644 --- a/lib/views/subscriptions/sheet/upgrade_package_sheet.dart +++ b/lib/views/subscriptions/sheet/upgrade_package_sheet.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/extensions/int_extensions.dart'; @@ -33,7 +35,9 @@ class _UpgradePackageSheetState extends State { void initState() { // TODO: implement initState super.initState(); - calculateUpgradePrice(); + scheduleMicrotask(() { + calculateUpgradePrice(); + }); } calculateUpgradePrice() { @@ -70,7 +74,7 @@ class _UpgradePackageSheetState extends State { 12.height, packageItem( "Now", - ("Your subscription will upgrade now. Affecting from ${DateHelper.formatAsLongDate(widget.subscription.dateEnd!)}"), + ("Your subscription will upgrade now. Affecting from ${DateHelper.formatAsLongDate(widget.subscription.dateEnd ?? DateTime.now())}"), model.newPrice.toString(), isNowSelected, ).onPress(() { @@ -82,7 +86,7 @@ class _UpgradePackageSheetState extends State { 6.height, packageItem( "Upgrade after current expiry", - ("Your subscription will upgrade after you current subscription will end. Affecting from 27 January, 2024 ${DateHelper.formatAsLongDate(widget.subscription.dateEnd!)}"), + ("Your subscription will upgrade after you current subscription will end. Affecting from 27 January, 2024 ${DateHelper.formatAsLongDate(widget.subscription.dateEnd ?? DateTime.now())}"), widget.subscription.price.toString(), isNowSelected ? false : true, ).onPress(() { @@ -102,17 +106,10 @@ class _UpgradePackageSheetState extends State { paymentType: PaymentTypes.subscription, onTempContinue: () async { Utils.showLoading(context); - MResponse mResponse = await model.payForSubscription( - widget.subscription.id!, - isNowSelected, - false, - price); + MResponse mResponse = await model.payForSubscription(widget.subscription.id!, isNowSelected, false, price); Utils.hideLoading(context); if (mResponse.messageStatus == 1) { - context - .read() - .updateOrderProviderSubscriptionId( - id: mResponse.data); + context.read().updateOrderProviderSubscriptionId(id: mResponse.data); // Utils.showToast( // "Subscriptions is successfully updated"); @@ -133,8 +130,7 @@ class _UpgradePackageSheetState extends State { ); } - Widget packageItem( - String title, String description, String price, bool isSelected) { + Widget packageItem(String title, String description, String price, bool isSelected) { return Row( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, @@ -145,8 +141,7 @@ class _UpgradePackageSheetState extends State { color: Colors.white, ).toContainer( isEnabledBorder: true, - backgroundColor: - isSelected ? MyColors.primaryColor : Colors.transparent, + backgroundColor: isSelected ? MyColors.primaryColor : Colors.transparent, borderColor: MyColors.primaryColor, borderWidget: 1, borderRadius: 0, @@ -176,10 +171,7 @@ class _UpgradePackageSheetState extends State { 2.width, Padding( padding: const EdgeInsets.only(bottom: 2), - child: "SAR".toText( - fontSize: 16, - isBold: true, - color: MyColors.lightTextColor), + child: "SAR".toText(fontSize: 16, isBold: true, color: MyColors.lightTextColor), ), ], ) diff --git a/lib/views/subscriptions/widget/all_subscriptions_card.dart b/lib/views/subscriptions/widget/all_subscriptions_card.dart index c107c82..259e35a 100644 --- a/lib/views/subscriptions/widget/all_subscriptions_card.dart +++ b/lib/views/subscriptions/widget/all_subscriptions_card.dart @@ -13,158 +13,141 @@ class AllSubscriptionsCard extends StatelessWidget { Color? backgroundColor; late Color textColor; Function onRenewSubscriptionClick; - bool isMainPage; + Function onUpgradeSubscriptionClick; + Function onDowngradeSubscriptionClick; - AllSubscriptionsCard(this.subscription, - {Key? key, - this.isSubscribed = false, - this.backgroundColor, - required this.onRenewSubscriptionClick, - this.isMainPage = true}) - : super(key: key); + AllSubscriptionsCard( + this.subscription, { + Key? key, + this.isSubscribed = false, + this.backgroundColor, + required this.onRenewSubscriptionClick, + required this.onUpgradeSubscriptionClick, + required this.onDowngradeSubscriptionClick, + }) : super(key: key); @override Widget build(BuildContext context) { textColor = backgroundColor == null ? Colors.black : Colors.white; - return InkWell( - onTap: isSubscribed - ? null - : () { - onRenewSubscriptionClick(); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - Expanded( - child: subscription.name.toString().toText( - fontSize: 18, - color: textColor, + // return InkWell( + // onTap: isSubscribed + // ? null + // : () { + // onRenewSubscriptionClick(); + // }, + // child: + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Expanded( + child: subscription.name.toString().toText( + fontSize: 18, + 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, + // ), + // ).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 (subscription.isMyCurrentPackage!) "Current Package".toText(color: MyColors.primaryColor, fontWeight: FontWeight.bold), + if (!subscription.isMyCurrentPackage!) + (subscription.subscriptionTypeEnum)! + .getStringSubscriptionTypeEnum() + .toText(color: Colors.white) + .toContainer( + backgroundColor: MyColors.primaryColor, + borderRadius: 30, + padding: const EdgeInsets.symmetric( + horizontal: 6, + vertical: 3, ), - ), - // 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, + ) + .onPress(() { + if (subscription.subscriptionTypeEnum == SubscriptionTypeEnum.downgrade) { + onDowngradeSubscriptionClick(); + } else { + onUpgradeSubscriptionClick(); + } + }) + ], + ), + 6.height, + showItem("Ads:", subscription.numberOfAds.toString()), + showItem("Users:", subscription.numberOfSubUsers.toString()), + showItem("Branches:", subscription.numberOfBranches.toString()), + 14.height, + Row( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Expanded( + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + subscription.price.toString().toText( + fontSize: 26, + isBold: true, + color: textColor, ), - ) - ], - ), - 6.height, - showItem("Ads:", subscription.numberOfAds.toString()), - showItem("Users:", subscription.numberOfSubUsers.toString()), - showItem("Branches:", subscription.numberOfBranches.toString()), - 14.height, - Row( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Expanded( - child: Row( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - subscription.price.toString().toText( - fontSize: 26, - isBold: true, - color: textColor, - ), - 2.width, - "${subscription.currency}/Month".toText( - color: MyColors.lightTextColor, - fontSize: 16, - ), - ], - ), + 2.width, + "${subscription.currency}/Month".toText( + color: MyColors.lightTextColor, + fontSize: 16, + ), + ], ), - if (!isMainPage) - Row( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - (subscription.subscriptionTypeEnum == - SubscriptionTypeEnum.current) - ? "Renew".toText() - : (subscription.subscriptionTypeEnum)! - .getStringSubscriptionTypeEnum() - .toText(), - 6.width, - const Icon( - Icons.arrow_forward, - size: 16, - ) - ], - ), - ], - ), - // if (isSubscribed) - if (isMainPage) - Row( - children: [ - "Expires on ${DateHelper.formatAsDayMonthYear(subscription.dateEnd)}" - .toText( - fontSize: 14, - color: textColor, - ), - Row( - children: [ - 6.width, - "Renew".toText( - color: MyColors.primaryColor, - fontSize: 14, - textDecoration: TextDecoration.underline, - decorationColor: MyColors.primaryColor, - isBold: true, - ), - ], - ).onPress(() { - onRenewSubscriptionClick(); - }), - ], - ) - ], - ).toWhiteContainer( - width: double.infinity, - allPading: 12, - backgroundColor: backgroundColor, - margin: const EdgeInsets.symmetric( - horizontal: 21, + ), + if (subscription.isMyCurrentPackage!) + Row( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + (subscription.subscriptionTypeEnum == SubscriptionTypeEnum.current) ? "Renew".toText() : (subscription.subscriptionTypeEnum)!.getStringSubscriptionTypeEnum().toText(), + 6.width, + const Icon( + Icons.arrow_forward, + size: 16, + ) + ], + ).onPress(() { + onRenewSubscriptionClick(); + }), + ], ), + ], + ).toWhiteContainer( + width: double.infinity, + allPading: 12, + backgroundColor: backgroundColor, + margin: const EdgeInsets.symmetric( + horizontal: 21, ), ); + // ); } Widget showItem(String title, String value) { diff --git a/lib/views/subscriptions/widget/my_subscriptions_card.dart b/lib/views/subscriptions/widget/my_subscriptions_card.dart index 216718a..e047e16 100644 --- a/lib/views/subscriptions/widget/my_subscriptions_card.dart +++ b/lib/views/subscriptions/widget/my_subscriptions_card.dart @@ -14,105 +14,130 @@ class MySubscriptionsCard extends StatelessWidget { Color? backgroundColor; late Color textColor; Function onRenewSubscriptionClick; + Function onUpgradeSubscriptionClick; bool isMainPage; - MySubscriptionsCard(this.providerSubscriptionModel, {Key? key, this.isSubscribed = false, this.backgroundColor, required this.onRenewSubscriptionClick, this.isMainPage = true}) : super(key: key); + MySubscriptionsCard(this.providerSubscriptionModel, + {Key? key, this.isSubscribed = false, this.backgroundColor, required this.onRenewSubscriptionClick, required this.onUpgradeSubscriptionClick, this.isMainPage = true}) + : super(key: key); @override Widget build(BuildContext context) { textColor = backgroundColor == null ? Colors.black : Colors.white; - return InkWell( - onTap: isSubscribed - ? null - : () { - onRenewSubscriptionClick(); - }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - Expanded( - child: providerSubscriptionModel.subscriptionName.toString().toText( - fontSize: 18, - color: textColor, + // return InkWell( + // onTap: isSubscribed + // ? null + // : () { + // onRenewSubscriptionClick(); + // }, + // child: + + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Expanded( + child: providerSubscriptionModel.subscriptionName.toString().toText( + fontSize: 18, + color: textColor, + ), + ), + // if (providerSubscriptionModel.isActive!) "Current Package".toText(color: MyColors.primaryColor, fontWeight: FontWeight.bold), + 5.width, + if (!providerSubscriptionModel.isExpired!) + Row( + children: [ + Container( + height: 15, + width: 15, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: MyColors.white, ), - ), - if (providerSubscriptionModel.isActive!) "Current Package".toText(color: MyColors.primaryColor, fontWeight: FontWeight.bold), - 5.width, - if (providerSubscriptionModel.isUpgradeNow!) - "Upgrade".toText(color: Colors.white).toContainer( - backgroundColor: MyColors.primaryColor, - borderRadius: 30, - padding: const EdgeInsets.symmetric( - horizontal: 6, - vertical: 3, - ), - ) - ], - ), - 6.height, - showItem("Ads:", providerSubscriptionModel.adsRemaining.toString()), - showItem("Users:", providerSubscriptionModel.subUsersRemaining.toString()), - showItem("Branches:", providerSubscriptionModel.branchesRemaining.toString()), - 14.height, - // Row( - // crossAxisAlignment: CrossAxisAlignment.center, - // mainAxisAlignment: MainAxisAlignment.start, - // children: [ - // Expanded( - // child: Row( - // mainAxisAlignment: MainAxisAlignment.start, - // crossAxisAlignment: CrossAxisAlignment.end, - // children: [ - // "10000".toString().toText( - // fontSize: 26, - // isBold: true, - // color: textColor, - // ), - // 2.width, - // " SAR/Month".toText( - // color: MyColors.lightTextColor, - // fontSize: 16, - // ), - // ], - // ), - // ), - // ], - // ), - Row( - children: [ - "Expires on ${DateHelper.formatAsDayMonthYear(providerSubscriptionModel.dateEnd)}".toText( - fontSize: 14, - color: textColor, - ), - if (!providerSubscriptionModel.isTrialSubscription!) - Row( - children: [ - 6.width, - "Renew".toText( + alignment: Alignment.center, + child: Icon( + Icons.done, + size: 12, color: MyColors.primaryColor, - fontSize: 14, - textDecoration: TextDecoration.underline, - decorationColor: MyColors.primaryColor, - isBold: true, ), - ], - ).onPress(() { - onRenewSubscriptionClick(); - }), - ], - ) - ], - ).toWhiteContainer( - width: double.infinity, - allPading: 12, - backgroundColor: backgroundColor, - margin: const EdgeInsets.symmetric( - horizontal: 21, + ), + 5.width, + "Subscribed".toText(color: MyColors.white) + ], + ) + .toContainer( + backgroundColor: MyColors.primaryColor, + borderRadius: 30, + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 7), + ) + .onPress(() { + onUpgradeSubscriptionClick(); + }) + ], ), + 6.height, + showItem("Ads:", providerSubscriptionModel.adsRemaining.toString()), + showItem("Users:", providerSubscriptionModel.subUsersRemaining.toString()), + showItem("Branches:", providerSubscriptionModel.branchesRemaining.toString()), + 14.height, + // Row( + // crossAxisAlignment: CrossAxisAlignment.center, + // mainAxisAlignment: MainAxisAlignment.start, + // children: [ + // Expanded( + // child: Row( + // mainAxisAlignment: MainAxisAlignment.start, + // crossAxisAlignment: CrossAxisAlignment.end, + // children: [ + // "10000".toString().toText( + // fontSize: 26, + // isBold: true, + // color: textColor, + // ), + // 2.width, + // " SAR/Month".toText( + // color: MyColors.lightTextColor, + // fontSize: 16, + // ), + // ], + // ), + // ), + // ], + // ), + Row( + children: [ + "Expires on ${DateHelper.formatAsDayMonthYear(providerSubscriptionModel.dateEnd)}".toText( + fontSize: 14, + color: textColor, + ), + if (!providerSubscriptionModel.isTrialSubscription!) + Row( + children: [ + 6.width, + "Renew".toText( + color: MyColors.primaryColor, + fontSize: 14, + textDecoration: TextDecoration.underline, + decorationColor: MyColors.primaryColor, + isBold: true, + ), + ], + ).onPress(() { + onRenewSubscriptionClick(); + }), + ], + ) + ], + ).toWhiteContainer( + width: double.infinity, + allPading: 12, + backgroundColor: backgroundColor, + margin: const EdgeInsets.symmetric( + horizontal: 21, ), ); + //); } Widget showItem(String title, String value) {