diff --git a/lib/config/customer_routes.dart b/lib/config/customer_routes.dart index 0267ec3..561cd6a 100644 --- a/lib/config/customer_routes.dart +++ b/lib/config/customer_routes.dart @@ -4,6 +4,7 @@ import 'package:car_customer_app/views/providers/book_provider_app_view.dart'; import 'package:flutter/cupertino.dart'; import 'package:mc_common_app/config/routes.dart'; import 'package:mc_common_app/models/advertisment_models/ad_details_model.dart'; +import 'package:mc_common_app/models/appointments_models/appointment_list_model.dart'; import 'package:mc_common_app/views/advertisement/ads_detail_view.dart'; import 'package:mc_common_app/views/advertisement/create_ad_view.dart'; @@ -11,7 +12,7 @@ class CustomerAppRoutes { static final Map routes = { AppRoutes.dashboard: (context) => DashboardPage(), AppRoutes.bookProviderAppView: (context) => BookProviderAppView(), - AppRoutes.appointmentDetailView: (context) => AppointmentDetailView(), + AppRoutes.appointmentDetailView: (context) => AppointmentDetailView(appointmentListModel: ModalRoute.of(context)!.settings.arguments as AppointmentListModel), AppRoutes.adsDetailView: (context) => AdsDetailView(adDetails: ModalRoute.of(context)!.settings.arguments as AdDetailsModel), AppRoutes.createAdView: (context) => CreateAdView(), }; diff --git a/lib/view_models/appointments_view_model.dart b/lib/view_models/appointments_view_model.dart index 35f5ccd..c06c89e 100644 --- a/lib/view_models/appointments_view_model.dart +++ b/lib/view_models/appointments_view_model.dart @@ -1,4 +1,5 @@ import 'package:flutter/cupertino.dart'; +import 'package:mc_common_app/models/appointments_models/appointment_list_model.dart'; import 'package:mc_common_app/models/widgets_models.dart'; import 'package:mc_common_app/repositories/common_repo.dart'; import 'package:mc_common_app/services/services.dart'; @@ -9,15 +10,19 @@ class AppointmentsVM extends ChangeNotifier { AppointmentsVM({required this.commonServices, required this.commonRepo}); + bool isFetchingLists = false; + + List myAppointments = []; List appointmentsFilterOptions = []; populateAppointmentsFilterList() { appointmentsFilterOptions.clear(); appointmentsFilterOptions = [ - FilterListModel(title: "All Appointments", isSelected: true), - FilterListModel(title: "Booked", isSelected: false), - FilterListModel(title: "Confirmed", isSelected: false), - FilterListModel(title: "Arrived", isSelected: false), + FilterListModel(title: "All Appointments", isSelected: true, id: -1), + FilterListModel(title: "Booked", isSelected: false, id: 1), + FilterListModel(title: "Confirmed", isSelected: false, id: 2), + FilterListModel(title: "Arrived", isSelected: false, id: 3), + FilterListModel(title: "Cancelled", isSelected: false, id: 4), ]; notifyListeners(); } @@ -30,4 +35,11 @@ class AppointmentsVM extends ChangeNotifier { appointmentsFilterOptions[index].isSelected = true; notifyListeners(); } + + Future getMyAppointments() async { + isFetchingLists = true; + myAppointments = await commonRepo.getMyAppointments(); + isFetchingLists = false; + notifyListeners(); + } } diff --git a/lib/view_models/providers_view_model.dart b/lib/view_models/providers_view_model.dart index 97af746..6dcce67 100644 --- a/lib/view_models/providers_view_model.dart +++ b/lib/view_models/providers_view_model.dart @@ -14,12 +14,12 @@ class ProvidersVM extends ChangeNotifier { populateProvidersFilterList() { providersFilterOptions.clear(); providersFilterOptions = [ - FilterListModel(title: "All Providers", isSelected: true), - FilterListModel(title: "Maintenance", isSelected: false), - FilterListModel(title: "Oil Service", isSelected: false), - FilterListModel(title: "Accessories", isSelected: false), - FilterListModel(title: "Tire Service", isSelected: false), - FilterListModel(title: "Dent and Paint", isSelected: false), + FilterListModel(title: "All Providers", isSelected: true, id: -1), + FilterListModel(title: "Maintenance", isSelected: false, id: 0), + FilterListModel(title: "Oil Service", isSelected: false, id: 1), + FilterListModel(title: "Accessories", isSelected: false, id: 2), + FilterListModel(title: "Tire Service", isSelected: false, id: 3), + FilterListModel(title: "Dent and Paint", isSelected: false, id: 4), ]; notifyListeners(); } diff --git a/lib/views/appointments/appointment_detail_view.dart b/lib/views/appointments/appointment_detail_view.dart index 3e017f6..86e2dec 100644 --- a/lib/views/appointments/appointment_detail_view.dart +++ b/lib/views/appointments/appointment_detail_view.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:mc_common_app/classes/consts.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/appointments_models/appointment_list_model.dart'; import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; @@ -9,7 +10,9 @@ import 'package:mc_common_app/widgets/common_widgets/card_button_with_icon.dart' import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; class AppointmentDetailView extends StatelessWidget { - AppointmentDetailView({Key? key}) : super(key: key); + AppointmentListModel appointmentListModel; + + AppointmentDetailView({Key? key, required this.appointmentListModel}) : super(key: key); final List servicesList = [ "Mechanic", @@ -22,7 +25,6 @@ class AppointmentDetailView extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( appBar: CustomAppBar( - backgroundColor: MyColors.backgroundColor, title: "Appointment", profileImageUrl: MyAssets.bnCar, isRemoveBackButton: false, @@ -36,7 +38,7 @@ class AppointmentDetailView extends StatelessWidget { mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Al Ahmad Maintenance".toText(fontSize: 18, isBold: true), + appointmentListModel.providerName!.toText(fontSize: 18, isBold: true), Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ @@ -46,7 +48,7 @@ class AppointmentDetailView extends StatelessWidget { fit: BoxFit.fill, ), 10.width, - "08:00 to 09:00 at 23 July, 2023".toText(fontSize: 12, isBold: true, color: MyColors.lightTextColor), + "${appointmentListModel.duration ?? ""} ${appointmentListModel.appointmentDate!.toFormattedDateWithoutTime()}".toText(fontSize: 12, isBold: true, color: MyColors.lightTextColor), ], ), 13.height, @@ -104,15 +106,17 @@ class AppointmentDetailView extends StatelessWidget { backgroundColor: MyColors.redColor, ), ), - 12.width, - Expanded( - child: ShowFillButton( - maxHeight: 55, - title: "Confirm", - onPressed: () {}, - backgroundColor: MyColors.greenColor, + if (appointmentListModel.appointmentStatusID == 1) ...[ + 12.width, + Expanded( + child: ShowFillButton( + maxHeight: 55, + title: "Confirm", + onPressed: () {}, + backgroundColor: MyColors.greenColor, + ), ), - ), + ], ], ), ), diff --git a/lib/views/appointments/widgets/customer_appointment_slider_widget.dart b/lib/views/appointments/widgets/customer_appointment_slider_widget.dart new file mode 100644 index 0000000..7cfb819 --- /dev/null +++ b/lib/views/appointments/widgets/customer_appointment_slider_widget.dart @@ -0,0 +1,199 @@ +import 'package:carousel_slider/carousel_slider.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; +import 'package:mc_common_app/classes/consts.dart'; +import 'package:mc_common_app/config/routes.dart'; +import 'package:mc_common_app/extensions/int_extensions.dart'; +import 'package:mc_common_app/extensions/string_extensions.dart'; +import 'package:mc_common_app/models/appointments_models/appointment_list_model.dart'; +import 'package:mc_common_app/theme/colors.dart'; +import 'package:mc_common_app/utils/navigator.dart'; +import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; + +class CustomerAppointmentSliderWidget extends StatelessWidget { + final List myUpComingAppointments; + + const CustomerAppointmentSliderWidget({Key? key, required this.myUpComingAppointments}) : super(key: key); + + @override + Widget build(BuildContext context) { + if (myUpComingAppointments.isEmpty) { + return InkWell( + child: Container( + height: 86, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + height: 24, + width: 24, + decoration: BoxDecoration(shape: BoxShape.circle, color: MyColors.darkTextColor), + child: Icon( + Icons.add, + color: MyColors.white, + ), + ), + SizedBox(width: 10), + "Add New Appointment".toText( + fontSize: 15, + isBold: true, + color: MyColors.lightTextColor, + ), + ], + ), + ), + ).toWhiteContainer(width: double.infinity, margin: EdgeInsets.symmetric(horizontal: 21, vertical: 10)); + } + return CarouselSlider.builder( + options: CarouselOptions( + height: 140, + viewportFraction: 1.0, + enlargeCenterPage: false, + enableInfiniteScroll: false, + ), + itemCount: myUpComingAppointments.length, + itemBuilder: (BuildContext context, int itemIndex, int pageViewIndex) => BuildAppointmentContainerForCustomer( + isForHome: true, + appointmentListModel: myUpComingAppointments[itemIndex], + onTapped: () => navigateWithName(context, AppRoutes.appointmentDetailView, arguments: myUpComingAppointments[itemIndex]), + ), + ); + } +} + +class BuildAppointmentContainerForCustomer extends StatelessWidget { + final bool? isForHome; + final AppointmentListModel? appointmentListModel; + final Function() onTapped; + + const BuildAppointmentContainerForCustomer({Key? key, this.isForHome = false, required this.onTapped, required this.appointmentListModel}) : super(key: key); + + Widget showServices(String title, String icon, {bool isMoreText = false}) { + return Row( + children: [ + if (icon != "") ...[ + SvgPicture.asset(icon), + 8.width, + ], + Flexible( + child: title.toText( + fontSize: 12, + isBold: true, + color: isMoreText ? MyColors.primaryColor : MyColors.black, + ), + ), + ], + ); + } + + List buildServicesFromAppointment({required AppointmentListModel appointmentListModel}) { + if (appointmentListModel.serviceAppointmentItems == null || appointmentListModel.serviceAppointmentItems!.isEmpty) { + return [SizedBox()]; + } + + if (appointmentListModel.serviceAppointmentItems!.length == 1) { + return [ + showServices( + appointmentListModel.serviceAppointmentItems![0].serviceItemName!, + MyAssets.modificationsIcon, + ) + ]; + } + + List servicesList = List.generate( + 2, + (index) => showServices( + appointmentListModel.serviceAppointmentItems![index].serviceItemName!, + MyAssets.modificationsIcon, + ), + ); + + if (appointmentListModel.serviceAppointmentItems!.length > 1) { + servicesList.add( + showServices( + "+ ${appointmentListModel.serviceAppointmentItems!.length - 1} More", + "", + isMoreText: true, + ), + ); + } + return servicesList; + } + + @override + Widget build(BuildContext context) { + return Container( + margin: const EdgeInsets.only(bottom: 10, left: 21, right: 21), + child: Column( + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + isForHome != null && isForHome! + ? Image.asset( + MyAssets.bnCar, + width: 56, + height: 56, + fit: BoxFit.fill, + ).toCircle(borderRadius: 100) + : Image.asset( + MyAssets.bnCar, + width: 80, + height: 85, + fit: BoxFit.cover, + ), + 8.width, + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + (appointmentListModel!.providerName ?? "").toText(color: MyColors.black, isBold: true, fontSize: 16), + Row( + children: [ + MyAssets.miniClock.buildSvg(height: 12), + 2.width, + "${appointmentListModel!.duration ?? ""} ${appointmentListModel!.appointmentDate!.toFormattedDateWithoutTime()}".toText( + color: MyColors.lightTextColor, + fontSize: 12, + ), + ], + ), + 9.height, + isForHome != null && isForHome! + ? Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + "Appointment Details".toText( + color: MyColors.primaryColor, + isUnderLine: true, + isBold: true, + fontSize: 14, + ), + const Icon(Icons.arrow_forward), + ], + ) + : Row( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Expanded( + child: Column( + children: buildServicesFromAppointment(appointmentListModel: appointmentListModel!), + ), + ), + const Icon( + Icons.arrow_forward, + ), + ], + ), + ], + ), + ), + ], + ), + ], + ).onPress(onTapped).toWhiteContainer(width: double.infinity, allPading: 12), + ); + } +} diff --git a/lib/views/dashboard/dashboard_page.dart b/lib/views/dashboard/dashboard_page.dart index bfc4f5b..921bea8 100644 --- a/lib/views/dashboard/dashboard_page.dart +++ b/lib/views/dashboard/dashboard_page.dart @@ -1,4 +1,5 @@ import 'dart:async'; + import 'package:car_customer_app/view_models/appointments_view_model.dart'; import 'package:car_customer_app/view_models/dashboard_view_model.dart'; import 'package:car_customer_app/view_models/providers_view_model.dart'; @@ -35,9 +36,24 @@ class _DashboardPageState extends State { context.read().populateAppointmentsFilterList(); context.read().populateProvidersFilterList(); context.read().populateAdsFilterList(); + _onRefresh(); }); } + Future _onRefresh() async { + AdVM adVm = Provider.of(context, listen: false); + AppointmentsVM appointmentsVM = Provider.of(context, listen: false); + if (appointmentsVM.myAppointments.isEmpty) { + await appointmentsVM.getMyAppointments(); + } + if (adVm.myAds.isEmpty) { + await adVm.getMyAds(); + } + if (adVm.exploreAds.isEmpty) { + await adVm.getExploreAds(); + } + } + fetchUsername() async {} List fragments = [ diff --git a/lib/views/dashboard/fragments/ads_fragment.dart b/lib/views/dashboard/fragments/ads_fragment.dart index df49657..59809ac 100644 --- a/lib/views/dashboard/fragments/ads_fragment.dart +++ b/lib/views/dashboard/fragments/ads_fragment.dart @@ -1,13 +1,14 @@ -import 'package:mc_common_app/view_models/ad_view_model.dart'; -import 'package:mc_common_app/views/advertisement/ads_list.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/theme/colors.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/views/advertisement/ads_list.dart'; import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import 'package:mc_common_app/widgets/common_widgets/categories_list.dart'; +import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:provider/provider.dart'; class AdsFragment extends StatelessWidget { @@ -15,7 +16,7 @@ class AdsFragment extends StatelessWidget { Future onRefreshAds(BuildContext context) async { AdVM adVM = context.read(); - await adVM.getAllAds(); + await adVM.getExploreAds(); await adVM.getMyAds(); } @@ -60,10 +61,19 @@ class AdsFragment extends StatelessWidget { ), ), ], - ), - if (adVM.isExploreAdsTapped) ...[ + ).horPaddingMain(), + if (adVM.isExploreAdsTapped && adVM.exploreAds.isNotEmpty) ...[ 16.height, - FiltersList(filterList: adVM.adsFilterOptions, onFilterTapped: (index) => adVM.applyFilterOnAds(index: index), needLeftPadding: false), + FiltersList(filterList: adVM.exploreAdsFilterOptions, onFilterTapped: (index, selectedFilterId) => adVM.applyFilterOnExploreAds(index: index), needLeftPadding: false) + .paddingOnly(left: 21), + ], + if (!adVM.isExploreAdsTapped && adVM.myAds.isNotEmpty) ...[ + 16.height, + FiltersList( + filterList: adVM.myAdsFilterOptions, + onFilterTapped: (index, selectedFilterId) => adVM.applyFilterOnMyAds(index: index, selectedFilterId: selectedFilterId), + needLeftPadding: false) + .paddingOnly(left: 21), ], ], ); @@ -72,16 +82,20 @@ class AdsFragment extends StatelessWidget { 16.height, Expanded( child: RefreshIndicator( - onRefresh: () => onRefreshAds(context), - child: Consumer( - builder: (BuildContext context, AdVM adVM, Widget? child) { - return BuildAdsList( - adsList: adVM.isExploreAdsTapped && adVM.adsFilteredList.isNotEmpty ? adVM.adsFilteredList : adVM.myAds, - ); - }, - ), - ), - ), + onRefresh: () => onRefreshAds(context), + child: Consumer( + builder: (BuildContext context, AdVM adVM, Widget? child) { + return BuildAdsList( + isAdsFragment: true, + adsList: adVM.isExploreAdsTapped && adVM.exploreAdsFilteredList.isNotEmpty + ? adVM.exploreAdsFilteredList + : !adVM.isExploreAdsTapped && adVM.myAdsFilteredList.isNotEmpty + ? adVM.myAdsFilteredList + : [], + ); + }, + )), + ) ], ), ), diff --git a/lib/views/dashboard/fragments/appointments_fragment.dart b/lib/views/dashboard/fragments/appointments_fragment.dart index 3bb1a17..137ae1e 100644 --- a/lib/views/dashboard/fragments/appointments_fragment.dart +++ b/lib/views/dashboard/fragments/appointments_fragment.dart @@ -1,11 +1,12 @@ import 'package:car_customer_app/view_models/appointments_view_model.dart'; +import 'package:car_customer_app/views/appointments/widgets/customer_appointment_slider_widget.dart'; import 'package:flutter/material.dart'; import 'package:mc_common_app/config/routes.dart'; import 'package:mc_common_app/extensions/int_extensions.dart'; +import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/utils/navigator.dart'; import 'package:mc_common_app/widgets/common_widgets/categories_list.dart'; -import 'package:mc_common_app/widgets/common_widgets/customer_appointment_slider_widget.dart'; import 'package:provider/provider.dart'; class AppointmentsFragment extends StatelessWidget { @@ -24,22 +25,27 @@ class AppointmentsFragment extends StatelessWidget { 16.height, FiltersList( filterList: appointmentsVM.appointmentsFilterOptions, - onFilterTapped: (index) => appointmentsVM.applyFilterOnAppointmentsVM(index: index), + onFilterTapped: (index, selectedFilterId) => appointmentsVM.applyFilterOnAppointmentsVM(index: index), ), 16.height, Expanded( - child: Container( - child: ListView.builder( - shrinkWrap: true, - itemCount: 30, - itemBuilder: (BuildContext context, int index) { - return BuildAppointmentContainerForCustomer( - onTapped: () { - navigateWithName(context, AppRoutes.appointmentDetailView); - }, - ); - }), - ), + child: appointmentsVM.myAppointments.isEmpty + ? Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + "No Appointments to show.".toText(fontSize: 16, color: MyColors.lightTextColor), + ], + ) + : ListView.builder( + shrinkWrap: true, + itemCount: appointmentsVM.myAppointments.length, + itemBuilder: (BuildContext context, int index) { + return BuildAppointmentContainerForCustomer( + onTapped: () => navigateWithName(context, AppRoutes.appointmentDetailView, arguments: appointmentsVM.myAppointments[index]), + appointmentListModel: appointmentsVM.myAppointments[index], + ); + }, + ), ), ], ); diff --git a/lib/views/dashboard/fragments/home_fragment.dart b/lib/views/dashboard/fragments/home_fragment.dart index cac2678..d1434b2 100644 --- a/lib/views/dashboard/fragments/home_fragment.dart +++ b/lib/views/dashboard/fragments/home_fragment.dart @@ -1,43 +1,20 @@ -import 'dart:async'; - -import 'package:mc_common_app/view_models/ad_view_model.dart'; +import 'package:car_customer_app/view_models/appointments_view_model.dart'; import 'package:car_customer_app/view_models/dashboard_view_model.dart'; +import 'package:car_customer_app/view_models/providers_view_model.dart'; +import 'package:car_customer_app/views/appointments/widgets/customer_appointment_slider_widget.dart'; import 'package:flutter/material.dart'; - +import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/extensions/int_extensions.dart'; +import 'package:mc_common_app/view_models/ad_view_model.dart'; import 'package:mc_common_app/views/advertisement/ads_list.dart'; -import 'package:mc_common_app/widgets/common_widgets/customer_appointment_slider_widget.dart'; import 'package:mc_common_app/widgets/common_widgets/my_service_provider.dart'; import 'package:mc_common_app/widgets/common_widgets/view_all_widget.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:provider/provider.dart'; -class HomeFragment extends StatefulWidget { +class HomeFragment extends StatelessWidget { const HomeFragment({Key? key}) : super(key: key); - @override - State createState() => _HomeFragmentState(); -} - -class _HomeFragmentState extends State { - @override - void initState() { - scheduleMicrotask(() async { - await _onRefresh(); - }); - super.initState(); - } - - Future _onRefresh() async { - AdVM adVm = Provider.of(context, listen: false); - if (adVm.myAds.isEmpty) { - await adVm.getMyAds(); - } - if (adVm.allAds.isEmpty) { - await adVm.getAllAds(); - } - } - @override Widget build(BuildContext context) { return SizedBox( @@ -53,45 +30,66 @@ class _HomeFragmentState extends State { ViewAllWidget( title: "Upcoming Appointment".toUpperCase(), subTitle: "View All", - onSubtitleTapped: () {}, + onSubtitleTapped: () { + context.read().onNavbarTapped(1); + context.read().applyFilterOnAppointmentsVM(index: 0); + }, ).horPaddingMain(), - const CustomerAppointmentSliderWidget(), + CustomerAppointmentSliderWidget(myUpComingAppointments: context.watch().myAppointments), 7.height, - ViewAllWidget(title: "My Recent Service Providers".toUpperCase(), subTitle: "View All", onSubtitleTapped: () {}).horPaddingMain(), - const ServiceProviderWidget().horPaddingMain(), - 15.height, ViewAllWidget( - title: "My Active Ads".toUpperCase(), + title: "My Recent Service Providers".toUpperCase(), subTitle: "View All", onSubtitleTapped: () { - context.read().onNavbarTapped(3); - context.read().updateIsExploreAds(false); + print("value: ${AppState().getUser.data!.accessToken}"); + context.read().onNavbarTapped(0); + context.read().applyFilterOnProviders(index: 0); }).horPaddingMain(), + const ServiceProviderWidget().horPaddingMain(), Consumer( builder: (BuildContext context, AdVM adVM, Widget? child) { - return BuildAdsList( - adsList: adVM.myAds.length >= 3 ? adVM.myAds.take(3).toList() : adVM.myAds, - scrollPhysics: NeverScrollableScrollPhysics(), - ).horPaddingMain(); + return adVM.myAds.isEmpty + ? SizedBox() + : Column( + children: [ + 15.height, + ViewAllWidget( + title: "My Active Ads".toUpperCase(), + subTitle: "View All", + onSubtitleTapped: () { + context.read().onNavbarTapped(3); + context.read().updateIsExploreAds(false); + }).horPaddingMain(), + BuildAdsList( + adsList: adVM.myAds.length >= 3 ? adVM.myAds.take(3).toList() : adVM.myAds, + scrollPhysics: NeverScrollableScrollPhysics(), + ), + ], + ); }, ), 20.height, ViewAllWidget( - title: "My Recommended Ads".toUpperCase(), - subTitle: "View All", - onSubtitleTapped: () { - context.read().onNavbarTapped(3); - context.read().updateIsExploreAds(true); - context.read().applyFilterOnAds(index: 0); - }).horPaddingMain(), + title: "My Recommended Ads".toUpperCase(), + subTitle: "View All", + onSubtitleTapped: () { + context.read().onNavbarTapped(3); + context.read().updateIsExploreAds(true); + context.read().applyFilterOnExploreAds(index: 0); + }, + ).horPaddingMain(), Consumer( builder: (BuildContext context, AdVM adVM, Widget? child) { return BuildAdsList( - adsList: adVM.allAds.length >= 3 ? adVM.allAds.take(3).toList() : adVM.allAds, + adsList: adVM.exploreAds.length >= 3 ? adVM.exploreAds.take(3).toList() : adVM.exploreAds, + // adsList: [], + isAdsFragment: true, scrollPhysics: NeverScrollableScrollPhysics(), - ).horPaddingMain(); + ); }, ), + 20.height, + ], ), ), diff --git a/lib/views/dashboard/fragments/providers_fragment.dart b/lib/views/dashboard/fragments/providers_fragment.dart index 3872e12..3d45e88 100644 --- a/lib/views/dashboard/fragments/providers_fragment.dart +++ b/lib/views/dashboard/fragments/providers_fragment.dart @@ -25,7 +25,7 @@ class ProvidersFragment extends StatelessWidget { 16.height, FiltersList( filterList: providersVM.providersFilterOptions, - onFilterTapped: (index) => providersVM.applyFilterOnProviders(index: index), + onFilterTapped: (index, selectedFilterId) => providersVM.applyFilterOnProviders(index: index), ), 16.height, Expanded( diff --git a/lib/views/providers/book_provider_app_view.dart b/lib/views/providers/book_provider_app_view.dart index e00bd2e..3787da3 100644 --- a/lib/views/providers/book_provider_app_view.dart +++ b/lib/views/providers/book_provider_app_view.dart @@ -6,9 +6,9 @@ import 'package:mc_common_app/theme/colors.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/provider_details_card.dart'; +import 'package:mc_common_app/widgets/common_widgets/time_slots.dart'; import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; -import 'package:mc_common_app/widgets/common_widgets/time_slots.dart'; class BookProviderAppView extends StatefulWidget { const BookProviderAppView({Key? key}) : super(key: key); @@ -117,7 +117,7 @@ class ServicesSelectionSection extends StatelessWidget { 22.height, "Available slots".toText(fontSize: 15, isBold: true), 8.height, - BuildTimeSlots(), + BuildTimeSlots(onPressed: (index) {}, timeSlots: []), 22.height, "Total Amount".toText(fontSize: 18, isBold: true), Row( @@ -166,4 +166,3 @@ class ReviewAppointmentSection extends StatelessWidget { ); } } -