get liked list approvals

This commit is contained in:
amirrezaghabeli
2025-09-05 12:59:01 +03:30
parent 7ed240b8df
commit 9398c83b8e
9 changed files with 195 additions and 13 deletions
@@ -4,6 +4,7 @@ import 'package:provider/provider.dart';
import 'package:tm_app/core/constants/assets.dart';
import 'package:tm_app/core/theme/colors.dart';
import 'package:tm_app/core/utils/size_config.dart';
import 'package:tm_app/data/services/model/tender_approvals_data/tender_approvals_data.dart';
import 'package:tm_app/view_models/liked_tenders_view_model.dart';
import 'package:tm_app/views/liked_tenders/widgets/liked_tenders_list_item.dart';
@@ -84,6 +85,16 @@ class _LikedTendersDesktopPageState extends State<LikedTendersDesktopPage> {
itemCount: feedback.length,
itemBuilder: (context, index) {
final item = feedback[index];
TenderApprovalsData? approval;
bool hasApproval = viewModel
.hasTenderApprovalForTender(item.tenderId!);
if (hasApproval) {
approval = viewModel.getApprovalStatusForTender(
item.tenderId!,
);
} else {
approval = null;
}
return Padding(
padding: EdgeInsets.only(bottom: 20.0.h()),
child: Dismissible(
@@ -105,7 +116,10 @@ class _LikedTendersDesktopPageState extends State<LikedTendersDesktopPage> {
);
}
},
child: LikedListItem(tender: item.tender!),
child: LikedListItem(
tender: item.tender!,
approval: approval!,
),
),
);
},
@@ -4,6 +4,7 @@ import 'package:provider/provider.dart';
import 'package:tm_app/core/constants/assets.dart';
import 'package:tm_app/core/theme/colors.dart';
import 'package:tm_app/core/utils/size_config.dart';
import 'package:tm_app/data/services/model/tender_approvals_data/tender_approvals_data.dart';
import 'package:tm_app/view_models/liked_tenders_view_model.dart';
import 'package:tm_app/views/liked_tenders/strings/liked_tenders_strings.dart';
import 'package:tm_app/views/liked_tenders/widgets/liked_tenders_list_item.dart';
@@ -93,6 +94,18 @@ class _LikedTendersMobilePageState extends State<LikedTendersMobilePage> {
itemBuilder: (context, index) {
if (index < feedback.length) {
final item = feedback[index];
TenderApprovalsData? approval;
bool hasApproval = viewModel.hasTenderApprovalForTender(
item.tenderId!,
);
if (hasApproval) {
approval = viewModel.getApprovalStatusForTender(
item.tenderId!,
);
} else {
approval = null;
}
return Padding(
padding: EdgeInsets.only(bottom: 20.0.h()),
child: Dismissible(
@@ -110,7 +123,10 @@ class _LikedTendersMobilePageState extends State<LikedTendersMobilePage> {
viewModel.removeTenderById(item.tenderId!);
}
},
child: LikedListItem(tender: item.tender!),
child: LikedListItem(
tender: item.tender!,
approval: approval,
),
),
);
} else {
@@ -10,6 +10,7 @@ import 'package:tm_app/view_models/liked_tenders_view_model.dart';
import 'package:tm_app/views/liked_tenders/strings/liked_tenders_strings.dart';
import 'package:tm_app/views/liked_tenders/widgets/liked_tenders_list_item.dart';
import '../../../data/services/model/tender_approvals_data/tender_approvals_data.dart';
import '../../shared/tablet_navigation_widget.dart';
import '../../shared/tender_app_bar.dart';
@@ -91,6 +92,17 @@ class _LikedTendersTabletPageState extends State<LikedTendersTabletPage> {
itemCount: feedback.length,
itemBuilder: (context, index) {
final item = feedback[index];
TenderApprovalsData? approval;
bool hasApproval = viewModel
.hasTenderApprovalForTender(item.tenderId!);
if (hasApproval) {
approval = viewModel
.getApprovalStatusForTender(
item.tenderId!,
);
} else {
approval = null;
}
return Padding(
padding: EdgeInsets.only(bottom: 20.0.h()),
child: Dismissible(
@@ -112,7 +124,10 @@ class _LikedTendersTabletPageState extends State<LikedTendersTabletPage> {
);
}
},
child: LikedListItem(tender: item.tender!),
child: LikedListItem(
tender: item.tender!,
approval: approval!,
),
),
);
},
@@ -7,9 +7,12 @@ import 'package:tm_app/core/utils/size_config.dart';
import 'package:tm_app/data/services/model/tender_data/tender_data.dart';
import 'package:tm_app/views/home/strings/home_strings.dart';
import '../../../data/services/model/tender_approvals_data/tender_approvals_data.dart';
class LikedListItem extends StatelessWidget {
const LikedListItem({required this.tender, super.key});
const LikedListItem({required this.tender, this.approval, super.key});
final TenderData tender;
final TenderApprovalsData? approval;
@override
Widget build(BuildContext context) {
@@ -113,10 +116,23 @@ class LikedListItem extends StatelessWidget {
height: 32.0.w(),
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(color: AppColors.grey60, width: 1.5.w()),
border: Border.all(
color:
approval?.status == 'rejected'
? AppColors.errorColor
: AppColors.grey60,
width: 1.5.w(),
),
),
alignment: Alignment.center,
child: Icon(Icons.close, color: AppColors.grey60, size: 16),
child: Icon(
Icons.close,
color:
approval?.status == 'rejected'
? AppColors.errorColor
: AppColors.grey60,
size: 16,
),
),
SizedBox(width: 30.0.w()),
Container(
@@ -124,10 +140,23 @@ class LikedListItem extends StatelessWidget {
height: 32.0.w(),
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(color: AppColors.grey60, width: 1.5.w()),
border: Border.all(
color:
approval?.status == 'submitted'
? AppColors.successColor
: AppColors.grey60,
width: 1.5.w(),
),
),
alignment: Alignment.center,
child: Icon(Icons.check, color: AppColors.grey60, size: 16),
child: Icon(
Icons.check,
color:
approval?.status == 'submitted'
? AppColors.successColor
: AppColors.grey60,
size: 16,
),
),
],
),