From 2e0ff88b7546f38c80836a25210994ce433c48d3 Mon Sep 17 00:00:00 2001 From: amirrezaghabeli Date: Thu, 11 Sep 2025 12:11:40 +0330 Subject: [PATCH] fix home and tenders scrolling and no data problem in tenders --- lib/view_models/tenders_view_model.dart | 5 +- lib/views/home/pages/d_home_page.dart | 104 +++++++++++--------- lib/views/tenders/pages/d_tenders_page.dart | 73 +++++++------- lib/views/tenders/pages/m_tenders_page.dart | 5 +- lib/views/tenders/pages/t_tenders_page.dart | 5 +- 5 files changed, 105 insertions(+), 87 deletions(-) diff --git a/lib/view_models/tenders_view_model.dart b/lib/view_models/tenders_view_model.dart index 5f0cf69..8270978 100644 --- a/lib/view_models/tenders_view_model.dart +++ b/lib/view_models/tenders_view_model.dart @@ -94,11 +94,12 @@ class TendersViewModel with ChangeNotifier { } Future getTenders() async { - clearAll(); // Clear all data before fetching new tenders _isLoading = true; + notifyListeners(); + clearAll(); // Clear all data before fetching new tenders + _currentOffset = 0; _hasMoreData = true; - notifyListeners(); final result = await _tendersRepository.getTenders( limit: _pageSize, diff --git a/lib/views/home/pages/d_home_page.dart b/lib/views/home/pages/d_home_page.dart index 8ec91f3..5b68a31 100644 --- a/lib/views/home/pages/d_home_page.dart +++ b/lib/views/home/pages/d_home_page.dart @@ -16,56 +16,62 @@ class DesktopHomePage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - body: Consumer( - builder: (context, homeViewModel, child) { - if (homeViewModel.isLoading) { - return const Center( - child: CircularProgressIndicator(color: AppColors.secondary50), - ); - } - - if (homeViewModel.errorMessage != null) { - return Center(child: Text(homeViewModel.errorMessage!)); - } - - if (homeViewModel.tenderApprovalsStateResponse != null && - homeViewModel.data != null && - homeViewModel.feedbackStats != null) { - return SingleChildScrollView( - child: Column( - children: [ - DesktopNavigationWidget( - currentIndex: 0, // Home index - ), - SizedBox( - width: 780, - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - SizedBox(height: 55), - // SizedBox(width: 780, child: NotificationCard()), - SizedBox(height: 40.0), - _progressBarsRow(homeViewModel), - SizedBox(height: 32.0.h()), - Padding( - padding: EdgeInsets.symmetric(horizontal: 15.0.w()), - child: _firstTenderCardsRow(context, homeViewModel), - ), - SizedBox(height: 32.0.h()), - _yourTenderText(homeViewModel), - SizedBox(height: 8.0.h()), - _bottomListView(homeViewModel), - ], + body: Column( + children: [ + DesktopNavigationWidget( + currentIndex: 0, // Home index + ), + Expanded( + child: Consumer( + builder: (context, homeViewModel, child) { + if (homeViewModel.isLoading) { + return const Center( + child: CircularProgressIndicator( + color: AppColors.secondary50, ), + ); + } + + if (homeViewModel.errorMessage != null) { + return Center(child: Text(homeViewModel.errorMessage!)); + } + + if (homeViewModel.tenderApprovalsStateResponse != null && + homeViewModel.data != null && + homeViewModel.feedbackStats != null) { + return SingleChildScrollView( + child: SizedBox( + width: 780, + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox(height: 55), + // SizedBox(width: 780, child: NotificationCard()), + SizedBox(height: 40.0), + _progressBarsRow(homeViewModel), + SizedBox(height: 32.0.h()), + Padding( + padding: EdgeInsets.symmetric(horizontal: 15.0.w()), + child: _firstTenderCardsRow(context, homeViewModel), + ), + SizedBox(height: 32.0.h()), + _yourTenderText(homeViewModel), + SizedBox(height: 8.0.h()), + _bottomListView(homeViewModel), + ], + ), + ), + ); + } + return const Center( + child: CircularProgressIndicator( + color: AppColors.secondary50, ), - ], - ), - ); - } - return const Center( - child: CircularProgressIndicator(color: AppColors.secondary50), - ); - }, + ); + }, + ), + ), + ], ), ); } @@ -81,6 +87,7 @@ class DesktopHomePage extends StatelessWidget { amount: homeViewModel.partnershipPercent.toString(), circularProgressIndicatorWidth: 176, circularProgressIndicatorHeight: 176, + strokeWidth: 9, ), SizedBox(width: 106), ProgressBarColumn( @@ -89,6 +96,7 @@ class DesktopHomePage extends StatelessWidget { amount: homeViewModel.selfApplyPercent.toString(), circularProgressIndicatorWidth: 176, circularProgressIndicatorHeight: 176, + strokeWidth: 9, ), ], ); diff --git a/lib/views/tenders/pages/d_tenders_page.dart b/lib/views/tenders/pages/d_tenders_page.dart index 5277831..9193a05 100644 --- a/lib/views/tenders/pages/d_tenders_page.dart +++ b/lib/views/tenders/pages/d_tenders_page.dart @@ -44,41 +44,48 @@ class _DesktopTendersPageState extends State { Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.backgroundColor, - body: SingleChildScrollView( - child: Consumer( - builder: (context, viewModel, child) { - if (viewModel.isLoading) { - return Center( - child: CircularProgressIndicator(color: AppColors.jellyBean), - ); - } - if (viewModel.errorMessage != null) { - return Center(child: Text(viewModel.errorMessage!)); - } - if (viewModel.tendersResponse?.data?.tenders == null || - viewModel.tendersResponse!.data!.tenders!.isEmpty) { - return Center(child: Text(CommonStrings.noData)); - } - return Column( - children: [ - DesktopNavigationWidget( - currentIndex: 1, // Tenders index - ), - SizedBox( - width: 740, - height: 800, - child: Padding( - padding: EdgeInsets.symmetric(vertical: 24.0.h()), - child: MainTendersSlider( - tenders: viewModel.tendersResponse?.data?.tenders ?? [], - isDesktop: true, + body: Column( + children: [ + DesktopNavigationWidget( + currentIndex: 1, // Tenders index + ), + Expanded( + child: Consumer( + builder: (context, viewModel, child) { + if (viewModel.isLoading) { + return Expanded( + child: Center( + child: CircularProgressIndicator( + color: AppColors.jellyBean, + ), + ), + ); + } + if (viewModel.errorMessage != null) { + return Center(child: Text(viewModel.errorMessage!)); + } + if ((viewModel.tendersResponse?.data?.tenders == null || + viewModel.tendersResponse!.data!.tenders!.isEmpty) && + viewModel.isLoading == false) { + return Center(child: Text(CommonStrings.noData)); + } + return SingleChildScrollView( + child: SizedBox( + width: 740, + height: 800, + child: Padding( + padding: EdgeInsets.symmetric(vertical: 24.0.h()), + child: MainTendersSlider( + tenders: viewModel.tendersResponse?.data?.tenders ?? [], + isDesktop: true, + ), ), ), - ), - ], - ); - }, - ), + ); + }, + ), + ), + ], ), ); } diff --git a/lib/views/tenders/pages/m_tenders_page.dart b/lib/views/tenders/pages/m_tenders_page.dart index 98f8631..28912fb 100644 --- a/lib/views/tenders/pages/m_tenders_page.dart +++ b/lib/views/tenders/pages/m_tenders_page.dart @@ -57,8 +57,9 @@ class _MobileTendersPageState extends State { return Center(child: Text(viewModel.errorMessage!)); } - if (viewModel.tendersResponse?.data?.tenders == null || - viewModel.tendersResponse!.data!.tenders!.isEmpty) { + if ((viewModel.tendersResponse?.data?.tenders == null || + viewModel.tendersResponse!.data!.tenders!.isEmpty) && + viewModel.isLoading == false) { return Center(child: Text(CommonStrings.noData)); } diff --git a/lib/views/tenders/pages/t_tenders_page.dart b/lib/views/tenders/pages/t_tenders_page.dart index b7eac24..792af49 100644 --- a/lib/views/tenders/pages/t_tenders_page.dart +++ b/lib/views/tenders/pages/t_tenders_page.dart @@ -45,8 +45,9 @@ class _TabletTendersPageState extends State { if (viewModel.errorMessage != null) { return Center(child: Text(viewModel.errorMessage!)); } - if (viewModel.tendersResponse?.data?.tenders == null || - viewModel.tendersResponse!.data!.tenders!.isEmpty) { + if ((viewModel.tendersResponse?.data?.tenders == null || + viewModel.tendersResponse!.data!.tenders!.isEmpty) && + viewModel.isLoading == false) { return Center(child: Text(CommonStrings.noData)); } return Padding(