diff --git a/lib/view_models/ad_view_model.dart b/lib/view_models/ad_view_model.dart index d541c72..3fafbd0 100644 --- a/lib/view_models/ad_view_model.dart +++ b/lib/view_models/ad_view_model.dart @@ -1,6 +1,8 @@ import 'dart:convert'; import 'dart:developer'; import 'dart:io'; + +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/cupertino.dart'; import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/consts.dart'; @@ -32,7 +34,6 @@ import 'package:mc_common_app/utils/utils.dart'; 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/widgets/dropdown/dropdow_field.dart'; -import 'package:easy_localization/easy_localization.dart'; import 'package:provider/provider.dart'; class AdVM extends BaseVM { @@ -218,6 +219,14 @@ class AdVM extends BaseVM { notifyListeners(); } + int currentPage = 1; + bool isLoadingMore = false; + bool hasMoreData = true; + + fetchMoreAds() async { + + } + Future> getAdsByFilter({AdPostStatus? adPostStatus, required bool isMyAds, CreatedByRoleEnum? createdByRoleEnum}) async { return await adsRepo.getAllAds(isMyAds: isMyAds, adPostStatus: adPostStatus, createdByRoleEnum: createdByRoleEnum); } diff --git a/lib/views/advertisement/components/ads_list_widget.dart b/lib/views/advertisement/components/ads_list_widget.dart index fd14790..094baae 100644 --- a/lib/views/advertisement/components/ads_list_widget.dart +++ b/lib/views/advertisement/components/ads_list_widget.dart @@ -1,3 +1,6 @@ +import 'dart:developer'; + +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:mc_common_app/classes/consts.dart'; @@ -12,7 +15,6 @@ import 'package:mc_common_app/utils/utils.dart'; import 'package:mc_common_app/view_models/ad_view_model.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:provider/provider.dart'; -import 'package:easy_localization/easy_localization.dart'; class AdsListWidget extends StatelessWidget { final List adsList; @@ -21,12 +23,12 @@ class AdsListWidget extends StatelessWidget { final bool shouldShowAdStatus; const AdsListWidget({ - Key? key, + super.key, required this.adsList, this.scrollPhysics, required this.shouldShowAdStatus, this.isAdsFragment = false, - }) : super(key: key); + }); @override Widget build(BuildContext context) { @@ -38,21 +40,29 @@ class AdsListWidget extends StatelessWidget { ], ); } - return ListView.separated( - itemCount: adsList.length, - shrinkWrap: true, - physics: scrollPhysics, - itemBuilder: (BuildContext context, int index) { - return AdCard( - adDetails: adsList[index], - isAdsFragment: isAdsFragment, - shouldShowAdStatus: shouldShowAdStatus, - ).onPress(() => navigateWithName(context, AppRoutes.adsDetailView, arguments: adsList[index])); - }, - separatorBuilder: (BuildContext context, int index) { - return 12.height; + return NotificationListener( + onNotification: (ScrollNotification scrollInfo) { + if (scrollInfo.metrics.pixels == scrollInfo.metrics.maxScrollExtent && context.read().hasMoreData) { + log("should call more ads api:"); + } + return false; }, - padding: const EdgeInsets.symmetric(horizontal: 21), + child: ListView.separated( + itemCount: adsList.length, + shrinkWrap: true, + physics: scrollPhysics, + itemBuilder: (BuildContext context, int index) { + return AdCard( + adDetails: adsList[index], + isAdsFragment: isAdsFragment, + shouldShowAdStatus: shouldShowAdStatus, + ).onPress(() => navigateWithName(context, AppRoutes.adsDetailView, arguments: adsList[index])); + }, + separatorBuilder: (BuildContext context, int index) { + return 12.height; + }, + padding: const EdgeInsets.symmetric(horizontal: 21), + ), ); } } @@ -62,7 +72,7 @@ class AdCard extends StatelessWidget { final bool isAdsFragment; final bool shouldShowAdStatus; - const AdCard({Key? key, required this.adDetails, required this.isAdsFragment, required this.shouldShowAdStatus}) : super(key: key); + const AdCard({super.key, required this.adDetails, required this.isAdsFragment, required this.shouldShowAdStatus}); @override Widget build(BuildContext context) { diff --git a/lib/views/common_fragments/ads_fragment.dart b/lib/views/common_fragments/ads_fragment.dart index ec09bc1..547ff96 100644 --- a/lib/views/common_fragments/ads_fragment.dart +++ b/lib/views/common_fragments/ads_fragment.dart @@ -1,3 +1,4 @@ +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/consts.dart'; @@ -18,10 +19,9 @@ import 'package:mc_common_app/widgets/common_widgets/app_bar.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'; -import 'package:easy_localization/easy_localization.dart'; class AdsFragment extends StatelessWidget { - const AdsFragment({Key? key}) : super(key: key); + const AdsFragment({super.key}); List getAdsList(AdVM adVM) { if (adVM.isExploreAdsTapped) {