changed pagination to selectPage in t d yourTenders

This commit is contained in:
llsajjad
2025-09-13 16:33:05 +03:30
parent 6ae6f38137
commit c7fc74a153
7 changed files with 321 additions and 85 deletions
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:tm_app/core/constants/tender_feedback.dart';
import 'package:tm_app/core/theme/colors.dart';
import 'package:tm_app/core/utils/size_config.dart';
import 'package:tm_app/view_models/your_tenders_view_model.dart';
import 'package:tm_app/views/your_tenders/strings/your_tenders_strings.dart';
import 'package:tm_app/views/your_tenders/widgets/filter_button.dart';
@@ -38,26 +39,25 @@ class _YourTendersDesktopPageState extends State<YourTendersDesktopPage>
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: AppColors.backgroundColor,
body: Column(
children: [
DesktopNavigationWidget(
currentIndex: 1, // Tenders index
),
DesktopNavigationWidget(currentIndex: 1), // Tenders index
Expanded(
child: SizedBox(
width: 740,
child: Column(
children: [
SizedBox(height: 64.0),
TabletDesktopAppbar(),
SizedBox(height: 20.0),
FilterButton(platformType: PlatformType.tabletDesktop),
SizedBox(height: 64.0.h()),
const TabletDesktopAppbar(),
SizedBox(height: 20.0.h()),
const FilterButton(platformType: PlatformType.tabletDesktop),
Expanded(
child: Consumer<YourTendersViewModel>(
builder: (context, viewModel, child) {
if (viewModel.isLoading) {
if (viewModel.isLoading &&
(viewModel.data == null &&
viewModel.likedTendersData == null)) {
return const Center(
child: CircularProgressIndicator(
color: AppColors.secondary50,
@@ -69,32 +69,140 @@ class _YourTendersDesktopPageState extends State<YourTendersDesktopPage>
return Center(child: Text(viewModel.errorMessage!));
}
Widget content;
if (viewModel.selectedStatus ==
YourTendersStrings.likeTenders &&
viewModel.likedTendersData != null) {
return LikedDislikedTendersList(
content = LikedDislikedTendersList(
data: viewModel.likedTendersData!,
status: TenderFeedback.liked.value,
isDesctop: true,
isDesktop: true,
);
} else if (viewModel.selectedStatus ==
YourTendersStrings.dislikeTenders &&
viewModel.likedTendersData != null) {
return LikedDislikedTendersList(
content = LikedDislikedTendersList(
data: viewModel.likedTendersData!,
status: TenderFeedback.disliked.value,
isDesctop: true,
);
} else if (viewModel.data != null) {
return TendersSubmitted(
approvedTenders: viewModel.data!,
isDesktop: true,
);
} else if (viewModel.data != null) {
content = TendersSubmitted(
approvedTenders: viewModel.data!,
isDesktop: true,
isMobile: false,
);
} else {
return const Center(
content = const Center(
child: Text(YourTendersStrings.noTenders),
);
}
return Column(
children: [
Expanded(child: content),
SizedBox(height: 10.0.h()),
Row(
children: [
const Spacer(),
Text(
'Page',
style: TextStyle(
fontSize: 13.0.sp(),
fontWeight: FontWeight.w300,
color: AppColors.grey60,
),
),
SizedBox(width: 10.0.w()),
InkWell(
onTap: () async {
final selectedPage = await showDialog<int>(
context: context,
builder: (context) {
return AlertDialog(
backgroundColor:
AppColors.backgroundColor,
title: const Text('Select Page'),
content: SizedBox(
width: 200.0.w(),
height: 300.0.h(),
child: ListView.builder(
itemCount: viewModel.totalPages,
itemBuilder: (context, index) {
final pageNumber = index + 1;
return ListTile(
title: Text(
'Page $pageNumber',
),
onTap:
() => Navigator.pop(
context,
pageNumber,
),
);
},
),
),
);
},
);
if (selectedPage != null) {
await viewModel.jumpToPage(selectedPage);
}
},
child: Container(
decoration: BoxDecoration(
border: Border.all(
color: AppColors.grey30,
width: 1,
),
borderRadius: BorderRadius.circular(4),
),
child: Row(
children: [
SizedBox(width: 5.0.w()),
Text(
'${viewModel.currentPage}',
style: TextStyle(
fontSize: 14.0.sp(),
fontWeight: FontWeight.w500,
color: AppColors.grey70,
),
),
SizedBox(width: 5.0.w()),
const Icon(Icons.arrow_drop_down),
SizedBox(width: 5.0.w()),
],
),
),
),
SizedBox(width: 5.0.w()),
Text(
'of',
style: TextStyle(
fontSize: 14.0.sp(),
fontWeight: FontWeight.w400,
color: AppColors.grey60,
),
),
SizedBox(width: 5.0.w()),
Text(
'${viewModel.totalPages}',
style: TextStyle(
fontSize: 13.0.sp(),
fontWeight: FontWeight.w400,
color: AppColors.grey60,
),
),
],
),
SizedBox(height: 30.0.h()),
],
);
},
),
),
@@ -68,7 +68,7 @@ class _YourTendersMobilePageState extends State<YourTendersMobilePage> {
child: LikedDislikedTendersList(
data: viewModel.likedTendersData!,
status: TenderFeedback.liked.value,
isDesctop: false,
isDesktop: false,
),
)
else if (viewModel.selectedStatus ==
@@ -78,7 +78,7 @@ class _YourTendersMobilePageState extends State<YourTendersMobilePage> {
child: LikedDislikedTendersList(
data: viewModel.likedTendersData!,
status: TenderFeedback.disliked.value,
isDesctop: false,
isDesktop: false,
),
)
else if (viewModel.data != null)
@@ -86,6 +86,7 @@ class _YourTendersMobilePageState extends State<YourTendersMobilePage> {
child: TendersSubmitted(
approvedTenders: viewModel.data!,
isDesktop: false,
isMobile: true,
),
)
else
@@ -7,7 +7,6 @@ import 'package:tm_app/views/your_tenders/widgets/filter_button.dart';
import 'package:tm_app/views/your_tenders/widgets/liked_disliked_tenders_list.dart';
import 'package:tm_app/views/your_tenders/widgets/tablet_desktop_appbar.dart';
import 'package:tm_app/views/your_tenders/widgets/tenders_submitted.dart';
import '../../../core/constants/tender_feedback.dart';
import '../../shared/tablet_navigation_widget.dart';
import '../../shared/tender_app_bar.dart';
@@ -43,9 +42,7 @@ class _YourTendersTabletPageState extends State<YourTendersTabletPage>
key: key,
backgroundColor: AppColors.backgroundColor,
appBar: tabletAppBar(title: YourTendersStrings.yourTenders, key: key),
drawer: TabletNavigationWidget(
currentIndex: 1, // Home is index 0
),
drawer: TabletNavigationWidget(currentIndex: 1),
body: Center(
child: SizedBox(
width: 720,
@@ -57,19 +54,14 @@ class _YourTendersTabletPageState extends State<YourTendersTabletPage>
child: TabletDesktopAppbar(),
),
SizedBox(height: 24.0.h()),
// MainTabBar(
// controller: controller,
// titles: [
// AppStrings.approvedTenders,
// AppStrings.tenderSubmitted,
// ],
// ),
FilterButton(platformType: PlatformType.tabletDesktop),
Expanded(
child: Consumer<YourTendersViewModel>(
builder: (context, viewModel, child) {
if (viewModel.isLoading) {
if (viewModel.isLoading &&
(viewModel.data == null &&
viewModel.likedTendersData == null)) {
return const Center(
child: CircularProgressIndicator(
color: AppColors.secondary50,
@@ -81,32 +73,136 @@ class _YourTendersTabletPageState extends State<YourTendersTabletPage>
return Center(child: Text(viewModel.errorMessage!));
}
Widget content;
if (viewModel.selectedStatus ==
YourTendersStrings.likeTenders &&
viewModel.likedTendersData != null) {
return LikedDislikedTendersList(
content = LikedDislikedTendersList(
data: viewModel.likedTendersData!,
status: TenderFeedback.liked.value,
isDesctop: false,
isDesktop: false,
);
} else if (viewModel.selectedStatus ==
YourTendersStrings.dislikeTenders &&
viewModel.likedTendersData != null) {
return LikedDislikedTendersList(
content = LikedDislikedTendersList(
data: viewModel.likedTendersData!,
status: TenderFeedback.disliked.value,
isDesctop: false,
);
} else if (viewModel.data != null) {
return TendersSubmitted(
approvedTenders: viewModel.data!,
isDesktop: false,
);
} else if (viewModel.data != null) {
content = TendersSubmitted(
approvedTenders: viewModel.data!,
isDesktop: false,
isMobile: false,
);
} else {
return const Center(
content = const Center(
child: Text(YourTendersStrings.noTenders),
);
}
return Column(
children: [
Expanded(child: content),
SizedBox(height: 10.0.h()),
Row(
children: [
const Spacer(),
Text(
'Page',
style: TextStyle(
fontSize: 13.0,
fontWeight: FontWeight.w300,
color: AppColors.grey60,
),
),
SizedBox(width: 10.0.w()),
InkWell(
onTap: () async {
final selectedPage = await showDialog<int>(
context: context,
builder: (context) {
return AlertDialog(
backgroundColor: AppColors.backgroundColor,
title: const Text('Select Page'),
content: SizedBox(
width: 200.0.w(),
height: 300.0.h(),
child: ListView.builder(
itemCount: viewModel.totalPages,
itemBuilder: (context, index) {
final pageNumber = index + 1;
return ListTile(
title: Text('Page $pageNumber'),
onTap: () => Navigator.pop(
context,
pageNumber,
),
);
},
),
),
);
},
);
if (selectedPage != null) {
await viewModel.jumpToPage(selectedPage);
}
},
child: Container(
decoration: BoxDecoration(
border: Border.all(
color: AppColors.grey30,
width: 1,
),
borderRadius: BorderRadius.circular(4),
),
child: Row(
children: [
SizedBox(width: 5.0.w()),
Text(
'${viewModel.currentPage}',
style: TextStyle(
fontSize: 14.0.sp(),
fontWeight: FontWeight.w500,
color: AppColors.grey70,
),
),
SizedBox(width: 5.0.w()),
const Icon(Icons.arrow_drop_down),
SizedBox(width: 5.0.w()),
],
),
),
),
SizedBox(width: 5.0),
Text(
'of',
style: TextStyle(
fontSize: 14.0.sp(),
fontWeight: FontWeight.w400,
color: AppColors.grey60,
),
),
SizedBox(width: 5.0.w()),
Text(
'${viewModel.totalPages}',
style: TextStyle(
fontSize: 13.0.sp(),
fontWeight: FontWeight.w400,
color: AppColors.grey60,
),
),
],
),
const SizedBox(height: 30.0),
],
);
},
),
),