Fixed pagination tenders for desktop and

added new config for notification
This commit is contained in:
llsajjad
2025-09-21 14:03:32 +03:30
parent 8a289f2d05
commit 6e6f248702
15 changed files with 422 additions and 219 deletions
@@ -27,6 +27,31 @@ class _MainTendersSliderState extends State<MainTendersSlider> {
final PageController pageController = PageController(initialPage: 0);
int currentPage = 1;
ScrollController? _scrollController;
@override
void initState() {
super.initState();
if (widget.isDesktop) {
_scrollController = ScrollController();
_scrollController!.addListener(_onScroll);
}
}
void _onScroll() {
if (!widget.isDesktop) {
return;
}
final viewModel = context.read<TendersViewModel>();
if (_scrollController!.position.pixels >=
_scrollController!.position.maxScrollExtent - 200 &&
viewModel.hasMoreData &&
!viewModel.isLoadingMore) {
viewModel.loadMoreTenders();
}
}
void _goToPreviousPage() {
if (currentPage == 1) {
return;
@@ -88,6 +113,7 @@ class _MainTendersSliderState extends State<MainTendersSlider> {
@override
void dispose() {
pageController.dispose();
_scrollController?.dispose();
super.dispose();
}
@@ -98,19 +124,6 @@ class _MainTendersSliderState extends State<MainTendersSlider> {
return widget.isDesktop ? _tendersListView() : _tendersSlider(isLtr);
}
Widget _tendersListView() {
return ListView.separated(
padding: EdgeInsets.all(16.0.h()),
itemCount: widget.tenders.length,
separatorBuilder:
(_, __) => SizedBox(height: widget.isDesktop ? 0 : 16.0.h()),
itemBuilder: (context, index) {
final tender = widget.tenders[index];
return TenderCard(tender: tender, isDesktop: widget.isDesktop);
},
);
}
Widget _tendersSlider(bool isLtr) {
return Stack(
children: [_tendersPageView(), _nextPreviousArrows(isLtr: isLtr)],
@@ -251,4 +264,38 @@ class _MainTendersSliderState extends State<MainTendersSlider> {
)
: SizedBox(width: 32.0.h(), height: 32.0.h());
}
Widget _tendersListView() {
final viewModel = context.watch<TendersViewModel>();
return Column(
children: [
Expanded(
child: ListView.separated(
padding: EdgeInsets.all(16.0.h()),
itemCount:
widget.tenders.length +
(widget.isDesktop && viewModel.isLoadingMore ? 1 : 0),
separatorBuilder:
(_, __) => SizedBox(height: widget.isDesktop ? 0 : 16.0.h()),
itemBuilder: (context, index) {
if (index < widget.tenders.length) {
final tender = widget.tenders[index];
return TenderCard(tender: tender, isDesktop: widget.isDesktop);
} else {
return const Padding(
padding: EdgeInsets.all(16.0),
child: Center(
child: CircularProgressIndicator(
strokeWidth: 2.0,
color: AppColors.jellyBean,
),
),
);
}
},
),
),
],
);
}
}