fixed your tenders filters and service and home your tneders use your tenders service

This commit is contained in:
amirrezaghabeli
2025-09-08 09:53:21 +03:30
parent 326f2deeec
commit 9a1ec0b34e
23 changed files with 180 additions and 1279 deletions
@@ -7,6 +7,8 @@ import 'package:tm_app/views/your_tenders/pages/your_tenders_desktop_page.dart';
import 'package:tm_app/views/your_tenders/pages/your_tenders_mobile_page.dart';
import 'package:tm_app/views/your_tenders/pages/your_tenders_tablet_page.dart';
import '../../../data/services/model/request_models/get_tenders_request_model/get_tenders_request_model.dart';
class YourTendersScreen extends StatefulWidget {
const YourTendersScreen({super.key});
@@ -21,12 +23,8 @@ class _YourTendersScreenState extends State<YourTendersScreen> {
super.initState();
viewModel = context.read<YourTendersViewModel>();
WidgetsBinding.instance.addPostFrameCallback((_) {
viewModel.getTenders(
limit: 10,
offset: 0,
createdFrom: '',
createdTo: '',
);
final requestModel = GetTendersRequestModel();
viewModel.getTenders(requestModel: requestModel);
});
}
@@ -1,65 +0,0 @@
import 'package:flutter/material.dart';
import 'package:tm_app/core/constants/assets.dart';
import 'package:tm_app/core/theme/colors.dart';
import 'package:tm_app/views/your_tenders/widgets/tender_card.dart';
import '../../../data/services/model/your_tender_model/your_tender_model.dart';
class ApprovedTenders extends StatelessWidget {
const ApprovedTenders({required this.tendersSubmitted,required this.isDesktop, super.key});
final List<YourTenderModel> tendersSubmitted;
final bool isDesktop;
@override
Widget build(BuildContext context) {
return ListView.builder(
padding: const EdgeInsets.only(top: 20),
itemCount: tendersSubmitted.length,
itemBuilder: (context, index) {
final tender = tendersSubmitted[index];
return TenderCard(
date: tender.date,
title: tender.title,
description: tender.description,
location: tender.location,
countryFlag: tender.countryFlag,
status: tender.status,
countryCode: '',
projectStatus: tender.projectStatus,
isDesktop: isDesktop,
backgroundColor:
tender.status == 'Won'
? AppColors.green0
: tender.status == 'Completed'
? AppColors.grey0
: AppColors.red0,
borderColor:
tender.status == 'Won'
? AppColors.green10
: tender.status == 'Completed'
? AppColors.grey30
: AppColors.red10,
statusIcon:
tender.status == 'Won'
? AssetsManager.tickCircle
: tender.status == 'Completed'
? null
: AssetsManager.closeCircle,
statusCardColor:
tender.status == 'Won'
? AppColors.green20
: tender.status == 'Completed'
? AppColors.blue0
: AppColors.red10,
statusTextColor:
tender.status == 'Won'
? AppColors.green30
: tender.status == 'Completed'
? AppColors.cyanTeal
: AppColors.red20,
);
},
);
}
}
@@ -80,13 +80,7 @@ class _LikedDislikedTendersListState extends State<LikedDislikedTendersList> {
return Padding(
padding: EdgeInsets.only(bottom: 16.0.h()),
child: TenderCard(
date: feedback.tender!.publicationDate?.toString() ?? '',
title: feedback.tender!.title ?? '',
description: feedback.tender!.description ?? '',
location: feedback.tender!.countryCode ?? '',
countryCode: feedback.tender!.countryCode ?? '',
status: feedback.tender!.status ?? '',
projectStatus: feedback.tender!.procurementTypeCode!,
tender: feedback.tender!,
isDesktop: widget.isDesctop,
),
);
+43 -43
View File
@@ -2,47 +2,47 @@ import 'package:country_flags/country_flags.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:tm_app/core/utils/date_utils.dart';
import 'package:tm_app/data/services/model/tender_data/tender_data.dart';
import '../../../core/constants/assets.dart';
import '../../../core/theme/colors.dart';
import '../../../core/utils/size_config.dart';
class TenderCard extends StatelessWidget {
final String date;
final String title;
final String description;
final String location;
final String countryFlag;
final String status;
final String projectStatus;
final Color? backgroundColor;
final Color? borderColor;
final String? statusIcon;
final Color? statusCardColor;
final Color? statusTextColor;
final String countryCode;
final bool isDesktop;
final TenderData tender;
const TenderCard({
required this.date,
required this.title,
required this.description,
required this.location,
required this.countryCode,
required this.isDesktop,
this.countryFlag = 'assets/icons/SE.png',
this.status = 'Completed',
this.projectStatus = 'Self Control',
this.backgroundColor,
this.borderColor,
this.statusIcon,
this.statusCardColor,
this.statusTextColor,
super.key,
});
const TenderCard({required this.isDesktop, required this.tender, super.key});
@override
Widget build(BuildContext context) {
// Determine styling based on tender status
Color backgroundColor;
Color borderColor;
String? statusIcon;
Color statusCardColor;
Color statusTextColor;
if (tender.status == 'Won') {
backgroundColor = AppColors.green0;
borderColor = AppColors.green10;
statusIcon = AssetsManager.tickCircle;
statusCardColor = AppColors.green20;
statusTextColor = AppColors.green30;
} else if (tender.status == 'submitted') {
backgroundColor = AppColors.grey0;
borderColor = AppColors.grey30;
statusIcon = null;
statusCardColor = AppColors.green20;
statusTextColor = AppColors.green30;
} else {
backgroundColor = AppColors.red0.withValues(alpha: 0.2);
borderColor = AppColors.red0;
statusIcon = AssetsManager.closeCircle;
statusCardColor = AppColors.red0;
statusTextColor = AppColors.red10;
}
return Container(
height: isDesktop ? 182.0.h() : 240.0.h(),
width: double.infinity,
@@ -52,9 +52,9 @@ class TenderCard extends StatelessWidget {
bottom: 24.0.h(),
),
decoration: BoxDecoration(
color: backgroundColor ?? AppColors.grey0,
color: backgroundColor,
borderRadius: BorderRadius.circular(12),
border: Border.all(color: borderColor ?? AppColors.borderColor),
border: Border.all(color: borderColor),
),
child: Padding(
padding: EdgeInsets.all(16.0.w()),
@@ -67,7 +67,7 @@ class TenderCard extends StatelessWidget {
children: [
// Date
Text(
unixToDate(int.parse(date)),
unixToDate(int.parse(tender.publicationDate!.toString())),
style: TextStyle(
color: AppColors.grey60,
fontSize: 12.0.sp(),
@@ -81,26 +81,26 @@ class TenderCard extends StatelessWidget {
vertical: 4.0.h(),
),
decoration: BoxDecoration(
color: statusCardColor ?? AppColors.green20,
color: statusCardColor,
borderRadius: BorderRadius.circular(8),
),
child: Row(
children: [
if (statusIcon != null)
SvgPicture.asset(
statusIcon!,
statusIcon,
width: 16.0.w(),
height: 16.0.h(),
colorFilter: ColorFilter.mode(
statusTextColor ?? AppColors.green30,
statusTextColor,
BlendMode.srcIn,
),
),
SizedBox(width: 4.0.w()),
Text(
status,
tender.status!,
style: TextStyle(
color: statusTextColor ?? AppColors.green30,
color: statusTextColor,
fontSize: 12.0.sp(),
fontWeight: FontWeight.w500,
),
@@ -114,7 +114,7 @@ class TenderCard extends StatelessWidget {
// Title
Text(
title,
tender.title!,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
@@ -128,7 +128,7 @@ class TenderCard extends StatelessWidget {
// Description
Text(
description,
tender.description!,
maxLines: isDesktop ? 2 : 3,
style: TextStyle(
color: AppColors.grey70,
@@ -154,7 +154,7 @@ class TenderCard extends StatelessWidget {
),
SizedBox(width: 4.0.w()),
Text(
location,
tender.countryCode!,
style: TextStyle(
color: AppColors.grey80,
fontSize: 12.0.sp(),
@@ -167,7 +167,7 @@ class TenderCard extends StatelessWidget {
width: 32.0.w(),
height: 21.0.h(),
child: CountryFlag.fromCountryCode(
countryCode,
tender.countryCode!,
shape: RoundedRectangle(4),
),
),
@@ -187,7 +187,7 @@ class TenderCard extends StatelessWidget {
border: Border.all(color: AppColors.grey40),
),
child: Text(
projectStatus,
tender.procurementTypeCode!,
style: TextStyle(
color: AppColors.grey60,
fontSize: 12.0.sp(),
@@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
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/view_models/your_tenders_view_model.dart';
@@ -78,45 +77,8 @@ class _TendersSubmittedState extends State<TendersSubmitted> {
if (index < tenders.length) {
final tender = tenders[index];
return TenderCard(
date: tender.createdAt!.toString(),
title: tender.tender!.title!,
description: tender.tender!.description!,
location: tender.tender!.countryCode!,
countryFlag: AssetsManager.seFlag,
status: tender.status,
countryCode: tender.tender!.countryCode!,
projectStatus: tender.tender!.status!,
tender: tender.tender!,
isDesktop: widget.isDesktop,
backgroundColor:
tender.status == 'Won'
? AppColors.green0
: tender.status == 'submitted'
? AppColors.grey0
: AppColors.red0.withValues(alpha: 0.2),
borderColor:
tender.status == 'Won'
? AppColors.green10
: tender.status == 'submitted'
? AppColors.grey30
: AppColors.red0,
statusIcon:
tender.status == 'Won'
? AssetsManager.tickCircle
: tender.status == 'submitted'
? null
: AssetsManager.closeCircle,
statusCardColor:
tender.status == 'Won'
? AppColors.green20
: tender.status == 'submitted'
? AppColors.green20
: AppColors.red0,
statusTextColor:
tender.status == 'Won'
? AppColors.green30
: tender.status == 'submitted'
? AppColors.green30
: AppColors.red10,
);
} else {
return Padding(