import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import '../../../core/constants/assets.dart'; import '../../../core/theme/colors.dart'; import '../../../core/utils/size_config.dart'; import 'tender_action_buttons.dart'; class TenderCard extends StatelessWidget { final String date; final String deadline; final String title; final String description; final String tenderId; final String location; final String country; final double matchPercentage; final VoidCallback? onApply; final VoidCallback? onLike; final VoidCallback? onDislike; final VoidCallback? onClose; final bool isLiked; final bool isDisliked; const TenderCard({ required this.date, required this.deadline, required this.title, required this.description, required this.tenderId, required this.location, required this.country, required this.matchPercentage, this.onApply, this.onLike, this.onDislike, this.onClose, this.isLiked = false, this.isDisliked = false, super.key, }); @override Widget build(BuildContext context) { return Column( children: [ Container( width: 364.0.w(), height: 587.0.h(), decoration: BoxDecoration( color: AppColors.grey0, borderRadius: BorderRadius.circular(12), border: Border.all(color: AppColors.grey30), ), child: Column( children: [ // Main content Padding( padding: EdgeInsets.all(16.0.w()), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // Date Text( date, style: TextStyle( color: AppColors.grey60, fontSize: 12.0.sp(), fontWeight: FontWeight.w400, ), ), SizedBox(height: 12.0.h()), // Deadline badge Container( width: double.infinity, height: 24.0.h(), padding: EdgeInsets.symmetric(horizontal: 8.0.w()), decoration: BoxDecoration( color: AppColors.primary2, borderRadius: BorderRadius.circular(4), ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( 'Deadline:', style: TextStyle( color: AppColors.textBlue, fontSize: 14.0.sp(), fontWeight: FontWeight.w500, ), ), Text( deadline, style: TextStyle( color: AppColors.grey80, fontSize: 14.0.sp(), fontWeight: FontWeight.w500, ), ), ], ), ), SizedBox(height: 12.0.h()), // Title Text( title, style: TextStyle( color: AppColors.grey80, fontSize: 16.0.sp(), fontWeight: FontWeight.w600, ), ), SizedBox(height: 8.0.h()), // Description Text( description, style: TextStyle( color: AppColors.grey70, fontSize: 16.0.sp(), fontWeight: FontWeight.w400, height: 1.5, ), ), SizedBox(height: 12.0.h()), // Tender ID Text( tenderId, style: TextStyle( color: AppColors.grey, fontSize: 14.0.sp(), fontWeight: FontWeight.w400, ), ), ], ), ), Spacer(), // Bottom section with progress and actions Padding( padding: EdgeInsets.all(16.0.w()), child: Column( children: [ // Match percentage Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( 'Match with your profile', style: TextStyle( color: AppColors.grey80, fontSize: 14.0.sp(), fontWeight: FontWeight.w500, ), ), Text( '${matchPercentage.toInt()}%', style: TextStyle( color: AppColors.secondaryTextColor, fontSize: 16.0.sp(), fontWeight: FontWeight.w600, ), ), ], ), SizedBox(height: 8.0.h()), // Progress bar Container( width: double.infinity, height: 4.0.h(), decoration: BoxDecoration( color: AppColors.grey20, borderRadius: BorderRadius.circular(2), ), child: FractionallySizedBox( alignment: Alignment.centerLeft, widthFactor: matchPercentage / 100, child: Container( decoration: BoxDecoration( color: AppColors.secondary50, borderRadius: BorderRadius.circular(2), ), ), ), ), SizedBox(height: 16.0.h()), // Location and apply button Row( children: [ // Location info Expanded( child: Row( children: [ SvgPicture.asset(AssetsManager.location), SizedBox(width: 4.0.w()), Text( location, style: TextStyle( color: AppColors.grey80, fontSize: 14.0.sp(), fontWeight: FontWeight.w500, ), ), SizedBox(width: 8.0.w()), // Country flag placeholder Image.asset( AssetsManager.seFlag, width: 32.0.w(), height: 21.0.h(), ), ], ), ), // See More button GestureDetector( onTap: onApply, child: Container( width: 108.0.w(), height: 40.0.h(), alignment: Alignment.center, decoration: BoxDecoration( color: AppColors.primary2, borderRadius: BorderRadius.circular(100), ), child: Text( 'See More', style: TextStyle( color: AppColors.mainBlue, fontSize: 14.0.sp(), fontWeight: FontWeight.w500, ), ), ), ), ], ), ], ), ), ], ), ), SizedBox(height: 72.0.h()), TenderActionButtons( isDisliked: isDisliked, isLiked: isLiked, onDislike: onDislike, onLike: onLike, onClose: onClose, ), ], ); } }