From 1b59c8f31a11c015086b0d766b65af31ae8200a2 Mon Sep 17 00:00:00 2001 From: FaizHashmiCS22 Date: Sun, 30 Apr 2023 10:02:30 +0300 Subject: [PATCH] Merged Ads Module in Common --- lib/config/customer_routes.dart | 4 +- lib/main.dart | 6 +- .../dashboard/fragments/ads_fragment.dart | 103 +++++++++--------- .../dashboard/fragments/home_fragment.dart | 65 +++++++---- 4 files changed, 99 insertions(+), 79 deletions(-) diff --git a/lib/config/customer_routes.dart b/lib/config/customer_routes.dart index 4635828..351b230 100644 --- a/lib/config/customer_routes.dart +++ b/lib/config/customer_routes.dart @@ -3,6 +3,7 @@ import 'package:car_customer_app/views/book_provider_app_view.dart'; import 'package:car_customer_app/views/dashboard/dashboard_page.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/views/advertisement/ads_detail_view.dart'; import 'package:mc_common_app/views/advertisement/create_ad_view.dart'; @@ -11,8 +12,7 @@ class CustomerAppRoutes { AppRoutes.dashboard: (context) => DashboardPage(), AppRoutes.bookProviderAppView: (context) => BookProviderAppView(), AppRoutes.appointmentDetailView: (context) => AppointmentDetailView(), - AppRoutes.adsDetailView: (context) => AdsDetailView(), + AppRoutes.adsDetailView: (context) => AdsDetailView(adDetails: ModalRoute.of(context)!.settings.arguments as AdDetailsModel), AppRoutes.createAdView: (context) => CreateAdView(), - }; } diff --git a/lib/main.dart b/lib/main.dart index c71f72e..e36f331 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,6 +1,5 @@ import 'package:car_customer_app/config/customer_dependencies.dart'; import 'package:car_customer_app/config/customer_routes.dart'; -import 'package:mc_common_app/view_models/ad_view_model.dart'; import 'package:car_customer_app/view_models/dashboard_view_model.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; @@ -13,6 +12,7 @@ import 'package:mc_common_app/config/routes.dart'; import 'package:mc_common_app/models/post_params_model.dart'; import 'package:mc_common_app/repositories/user_repo.dart'; import 'package:mc_common_app/utils/enums.dart'; +import 'package:mc_common_app/view_models/ad_view_model.dart'; import 'package:mc_common_app/view_models/base_view_model.dart'; import 'package:mc_common_app/view_models/user_view_model.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; @@ -20,6 +20,8 @@ import 'package:sizer/sizer.dart'; import 'package:provider/provider.dart'; import 'package:provider/single_child_widget.dart'; +import 'package:mc_common_app/repositories/common_repo.dart'; + Future main() async { WidgetsFlutterBinding.ensureInitialized(); CustomerDependencies.addDependencies(); @@ -42,7 +44,7 @@ Future main() async { create: (_) => UserVM(userRepo: injector.get()), ), ChangeNotifierProvider( - create: (_) => AdVM(commonServices: injector.get()), + create: (_) => AdVM(commonServices: injector.get(), commonRepo: injector.get()), ), ], child: const MyApp(), diff --git a/lib/views/dashboard/fragments/ads_fragment.dart b/lib/views/dashboard/fragments/ads_fragment.dart index a59aea7..b259274 100644 --- a/lib/views/dashboard/fragments/ads_fragment.dart +++ b/lib/views/dashboard/fragments/ads_fragment.dart @@ -3,20 +3,20 @@ 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/widgets/button/show_fill_button.dart'; -import 'package:mc_common_app/widgets/common_widgets/ads_list.dart'; +import 'package:provider/provider.dart'; +import 'package:mc_common_app/views/advertisement/ads_list.dart'; -class AdsFragment extends StatefulWidget { - AdsFragment({Key? key}) : super(key: key); - @override - State createState() => _AdsFragmentState(); -} - -class _AdsFragmentState extends State { - bool isExploreAdsTapped = true; +class AdsFragment extends StatelessWidget { + AdsFragment({Key? key}) : super(key: key); - bool isMyAdsTapped = false; + Future onRefreshAds(BuildContext context) async { + AdVM adVM = context.read(); + await adVM.getAllAds(); + await adVM.getMyAds(); + } @override Widget build(BuildContext context) { @@ -28,51 +28,48 @@ class _AdsFragmentState extends State { child: Column( children: [ 16.height, - Row( - children: [ - Expanded( - child: ShowFillButton( - isFilled: isExploreAdsTapped, - maxHeight: 55, - title: "Explore Ads", - txtColor: isExploreAdsTapped ? MyColors.white : MyColors.darkTextColor, - onPressed: () { - if (!isExploreAdsTapped) { - isExploreAdsTapped = true; - isMyAdsTapped = false; - } - setState(() {}); - }, - ), - ), - 12.width, - Expanded( - child: ShowFillButton( - isFilled: isMyAdsTapped, - txtColor: isMyAdsTapped ? MyColors.white : MyColors.darkTextColor, - maxHeight: 55, - title: "My Ads", - onPressed: () { - if (!isMyAdsTapped) { - isMyAdsTapped = true; - isExploreAdsTapped = false; - } - setState(() {}); - }, - ), - ), - ], + Consumer( + builder: (BuildContext context, AdVM adVM, Widget? child) { + return Row( + children: [ + Expanded( + child: ShowFillButton( + isFilled: adVM.isExploreAdsTapped, + maxHeight: 55, + title: "Explore Ads", + txtColor: adVM.isExploreAdsTapped ? MyColors.white : MyColors.darkTextColor, + onPressed: () { + adVM.updateIsExploreAds(true); + }, + ), + ), + 12.width, + Expanded( + child: ShowFillButton( + isFilled: !adVM.isExploreAdsTapped, + txtColor: !adVM.isExploreAdsTapped ? MyColors.white : MyColors.darkTextColor, + maxHeight: 55, + title: "My Ads", + onPressed: () { + adVM.updateIsExploreAds(false); + }, + ), + ), + ], + ); + }, ), 24.height, Expanded( - child: BuildAdsList( - count: 20, - onAdPressed: () { - navigateWithName( - context, - AppRoutes.adsDetailView, - ); - }, + child: RefreshIndicator( + onRefresh: () => onRefreshAds(context), + child: Consumer( + builder: (BuildContext context, AdVM adVM, Widget? child) { + return BuildAdsList( + adsList: adVM.isExploreAdsTapped ? adVM.allAds : adVM.myAds, + ); + }, + ), ), ), ], @@ -80,6 +77,8 @@ class _AdsFragmentState extends State { ), floatingActionButton: FloatingActionButton( onPressed: () { + context.read().getVehicleTypes(); + navigateWithName(context, AppRoutes.createAdView); }, backgroundColor: MyColors.darkPrimaryColor, diff --git a/lib/views/dashboard/fragments/home_fragment.dart b/lib/views/dashboard/fragments/home_fragment.dart index 00e67da..a50cbb5 100644 --- a/lib/views/dashboard/fragments/home_fragment.dart +++ b/lib/views/dashboard/fragments/home_fragment.dart @@ -1,16 +1,40 @@ +import 'dart:async'; +import 'package:mc_common_app/views/advertisement/ads_list.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/utils/navigator.dart'; -import 'package:mc_common_app/widgets/common_widgets/ads_list.dart'; +import 'package:mc_common_app/view_models/ad_view_model.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:mc_common_app/widgets/common_widgets/view_all_widget.dart'; import 'package:mc_common_app/widgets/common_widgets/my_service_provider.dart'; import 'package:mc_common_app/widgets/common_widgets/customer_appointment_slider_widget.dart'; +import 'package:provider/provider.dart'; -class HomeFragment extends StatelessWidget { +class HomeFragment extends StatefulWidget { 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( @@ -30,29 +54,24 @@ class HomeFragment extends StatelessWidget { const ServiceProviderWidget().horPaddingMain(), 15.height, ViewAllWidget(title: "My Active Ads".toUpperCase(), subTitle: "View All").horPaddingMain(), - // todo: we will replace this count with the sublist of ads - BuildAdsList( - count: 1, - scrollPhysics: NeverScrollableScrollPhysics(), - onAdPressed: () { - navigateWithName( - context, - AppRoutes.adsDetailView, - ); + Consumer( + builder: (BuildContext context, AdVM adVM, Widget? child) { + return BuildAdsList( + adsList: adVM.myAds, + scrollPhysics: NeverScrollableScrollPhysics(), + ).horPaddingMain(); }, - ).horPaddingMain(), + ), 20.height, ViewAllWidget(title: "My Recommended Ads".toUpperCase(), subTitle: "View All").horPaddingMain(), - BuildAdsList( - count: 2, - scrollPhysics: NeverScrollableScrollPhysics(), - onAdPressed: () { - navigateWithName( - context, - AppRoutes.adsDetailView, - ); + Consumer( + builder: (BuildContext context, AdVM adVM, Widget? child) { + return BuildAdsList( + adsList: adVM.allAds, + scrollPhysics: NeverScrollableScrollPhysics(), + ).horPaddingMain(); }, - ).horPaddingMain(), + ), ], ), ),