added new design for tenders desktop
This commit is contained in:
@@ -15,6 +15,7 @@ class MainTendersSlider extends StatefulWidget {
|
||||
super.key,
|
||||
this.isDesktop = false,
|
||||
});
|
||||
|
||||
final bool isDesktop;
|
||||
final List<TenderData> tenders;
|
||||
|
||||
@@ -24,7 +25,6 @@ class MainTendersSlider extends StatefulWidget {
|
||||
|
||||
class _MainTendersSliderState extends State<MainTendersSlider> {
|
||||
final PageController pageController = PageController(initialPage: 0);
|
||||
|
||||
int currentPage = 1;
|
||||
|
||||
void _goToPreviousPage() {
|
||||
@@ -32,17 +32,22 @@ class _MainTendersSliderState extends State<MainTendersSlider> {
|
||||
return;
|
||||
}
|
||||
|
||||
final targetIndex = currentPage - 2;
|
||||
if (targetIndex < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
pageController.previousPage(
|
||||
duration: const Duration(milliseconds: 300),
|
||||
curve: Curves.easeInOutCubic,
|
||||
);
|
||||
|
||||
setState(() {
|
||||
currentPage = currentPage - 1;
|
||||
});
|
||||
|
||||
// Fetch feedback and approvals for the previous tender if not already loaded
|
||||
final viewModel = context.read<TendersViewModel>();
|
||||
final previousTenderId = widget.tenders[currentPage - 2].id!;
|
||||
final previousTenderId = widget.tenders[targetIndex].id!;
|
||||
if (!viewModel.hasFeedbackForTender(previousTenderId)) {
|
||||
viewModel.getTenderFeedback(previousTenderId);
|
||||
}
|
||||
@@ -56,17 +61,22 @@ class _MainTendersSliderState extends State<MainTendersSlider> {
|
||||
return;
|
||||
}
|
||||
|
||||
final targetIndex = currentPage;
|
||||
if (targetIndex >= widget.tenders.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
pageController.nextPage(
|
||||
duration: const Duration(milliseconds: 300),
|
||||
curve: Curves.easeInOutCubic,
|
||||
);
|
||||
|
||||
setState(() {
|
||||
currentPage = currentPage + 1;
|
||||
});
|
||||
|
||||
// Fetch feedback and approvals for the next tender if not already loaded
|
||||
final viewModel = context.read<TendersViewModel>();
|
||||
final nextTenderId = widget.tenders[currentPage].id!;
|
||||
final nextTenderId = widget.tenders[targetIndex].id!;
|
||||
if (!viewModel.hasFeedbackForTender(nextTenderId)) {
|
||||
viewModel.getTenderFeedback(nextTenderId);
|
||||
}
|
||||
@@ -83,11 +93,27 @@ class _MainTendersSliderState extends State<MainTendersSlider> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
bool isLtr = Directionality.of(context) == TextDirection.ltr;
|
||||
return SingleChildScrollView(
|
||||
child: Stack(
|
||||
children: [_tendersPageView(), _nextPreviousArrows(isLtr: isLtr)],
|
||||
),
|
||||
final bool isLtr = Directionality.of(context) == TextDirection.ltr;
|
||||
|
||||
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)],
|
||||
);
|
||||
}
|
||||
|
||||
@@ -97,25 +123,21 @@ class _MainTendersSliderState extends State<MainTendersSlider> {
|
||||
height: 722.0.h(),
|
||||
child: PageView.builder(
|
||||
controller: pageController,
|
||||
scrollDirection: Axis.horizontal,
|
||||
itemCount: widget.tenders.length,
|
||||
onPageChanged: (index) {
|
||||
setState(() {
|
||||
currentPage = index + 1;
|
||||
});
|
||||
|
||||
// Fetch feedback and approvals for the new tender if not already loaded
|
||||
final viewModel = context.read<TendersViewModel>();
|
||||
if (!viewModel.hasFeedbackForTender(widget.tenders[index].id!)) {
|
||||
viewModel.getTenderFeedback(widget.tenders[index].id!);
|
||||
final id = widget.tenders[index].id!;
|
||||
if (!viewModel.hasFeedbackForTender(id)) {
|
||||
viewModel.getTenderFeedback(id);
|
||||
}
|
||||
if (!viewModel.hasTenderApprovalForTender(
|
||||
widget.tenders[index].id!,
|
||||
)) {
|
||||
viewModel.getTenderApprovals(widget.tenders[index].id!);
|
||||
if (!viewModel.hasTenderApprovalForTender(id)) {
|
||||
viewModel.getTenderApprovals(id);
|
||||
}
|
||||
|
||||
// Check if we need to load more tenders (when user reaches near the end)
|
||||
if (index >= widget.tenders.length - 1 &&
|
||||
viewModel.hasMoreData &&
|
||||
!viewModel.isLoadingMore) {
|
||||
|
||||
Reference in New Issue
Block a user