merge branches
This commit is contained in:
@@ -1,20 +1,39 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:tm_app/core/utils/size_config.dart';
|
||||
import 'package:tm_app/view_models/tender_detail_view_model.dart';
|
||||
import 'package:tm_app/views/detail/pages/detail_desktop_page.dart';
|
||||
import 'package:tm_app/views/detail/pages/detail_mobile_page.dart';
|
||||
import 'package:tm_app/views/detail/pages/detail_tablet_page.dart';
|
||||
import 'package:tm_app/views/shared/responsive_builder.dart';
|
||||
|
||||
class TenderDetailScreen extends StatelessWidget {
|
||||
const TenderDetailScreen({super.key});
|
||||
class TenderDetailScreen extends StatefulWidget {
|
||||
const TenderDetailScreen({required this.tenderId, super.key});
|
||||
|
||||
final String tenderId;
|
||||
|
||||
@override
|
||||
State<TenderDetailScreen> createState() => _TenderDetailScreenState();
|
||||
}
|
||||
|
||||
class _TenderDetailScreenState extends State<TenderDetailScreen> {
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
context.read<TenderDetailViewModel>().getTenderDetail(
|
||||
id: widget.tenderId,
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
SizeConfig.init(context);
|
||||
return ResponsiveBuilder(
|
||||
mobile: TenderDetailMobilePage(tenderId: 'JNDFKMDV-100JF'),
|
||||
tablet: TenderDetailTabletPage(tenderId: 'JNDFKMDV-100JF'),
|
||||
desktop: TenderDetailDesktopPage(tenderId: 'JNDFKMDV-100JF'),
|
||||
mobile: TenderDetailMobilePage(tenderId: widget.tenderId),
|
||||
tablet: TenderDetailTabletPage(tenderId: widget.tenderId),
|
||||
desktop: TenderDetailDesktopPage(tenderId: widget.tenderId),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,10 +2,10 @@ import 'package:flutter/material.dart';
|
||||
import 'package:tm_app/core/constants/strings.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_detail_response/tender_detail_response_model.dart';
|
||||
import 'package:tm_app/data/services/model/tender_data/tender_data.dart';
|
||||
|
||||
class TenderDetailCard extends StatelessWidget {
|
||||
final TenderDetailResponseModel detail;
|
||||
final TenderData detail;
|
||||
|
||||
const TenderDetailCard({required this.detail, super.key});
|
||||
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:intl/intl.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_detail_response/tender_detail_response_model.dart';
|
||||
import 'package:tm_app/data/services/model/tender_data/tender_data.dart';
|
||||
import 'package:tm_app/views/detail/widgets/status_tag.dart';
|
||||
import 'package:tm_app/views/detail/widgets/tender_detail_info_section.dart';
|
||||
import 'package:tm_app/views/detail/widgets/tender_document_section.dart';
|
||||
@@ -9,9 +10,13 @@ import 'package:tm_app/views/detail/widgets/tender_location_section.dart';
|
||||
|
||||
class TenderDetailHeader extends StatelessWidget {
|
||||
final bool isScreenBig;
|
||||
final TenderDetailResponseModel detail;
|
||||
final TenderData detail;
|
||||
|
||||
const TenderDetailHeader({required this.isScreenBig, required this.detail, super.key});
|
||||
const TenderDetailHeader({
|
||||
required this.isScreenBig,
|
||||
required this.detail,
|
||||
super.key,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -29,7 +34,7 @@ class TenderDetailHeader extends StatelessWidget {
|
||||
SizedBox(height: 12.0.h()),
|
||||
_buildTitle(),
|
||||
SizedBox(height: 10.0.h()),
|
||||
Divider(color: AppColors.grey20,),
|
||||
Divider(color: AppColors.grey20),
|
||||
SizedBox(height: 5.0.h()),
|
||||
TenderDetailInfoSection(isScreenBig: isScreenBig, detail: detail),
|
||||
TenderLocationSection(detail: detail),
|
||||
@@ -44,7 +49,7 @@ class TenderDetailHeader extends StatelessWidget {
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
detail.date ?? '',
|
||||
unixToDate(detail.publicationDate),
|
||||
style: TextStyle(
|
||||
color: AppColors.grey60,
|
||||
fontWeight: FontWeight.w400,
|
||||
@@ -68,3 +73,14 @@ class TenderDetailHeader extends StatelessWidget {
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
String unixToDate(int? unixTimestamp, {String format = 'yyyy-MM-dd'}) {
|
||||
if (unixTimestamp == null) return '';
|
||||
|
||||
// Convert seconds to milliseconds if needed
|
||||
int timestampInMs =
|
||||
unixTimestamp > 1000000000000 ? unixTimestamp : unixTimestamp * 1000;
|
||||
|
||||
final DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(timestampInMs);
|
||||
return DateFormat(format).format(dateTime);
|
||||
}
|
||||
|
||||
@@ -1,43 +1,44 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:tm_app/core/constants/strings.dart';
|
||||
import 'package:tm_app/data/services/model/tender_detail_response/tender_detail_response_model.dart';
|
||||
import 'package:tm_app/data/services/model/tender_data/tender_data.dart';
|
||||
import 'package:tm_app/views/detail/widgets/deadline_item.dart';
|
||||
import 'package:tm_app/views/detail/widgets/info_item.dart';
|
||||
|
||||
class TenderDetailInfoSection extends StatelessWidget {
|
||||
final bool isScreenBig;
|
||||
final TenderDetailResponseModel detail;
|
||||
final TenderData detail;
|
||||
|
||||
const TenderDetailInfoSection({required this.isScreenBig, required this.detail, super.key});
|
||||
const TenderDetailInfoSection({
|
||||
required this.isScreenBig,
|
||||
required this.detail,
|
||||
super.key,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
InfoItem(
|
||||
title: AppStrings.tenderIdLabel,
|
||||
value: detail.id ?? '',
|
||||
),
|
||||
InfoItem(title: AppStrings.tenderIdLabel, value: detail.id ?? ''),
|
||||
DeadlineItem(
|
||||
title: AppStrings.tenderDeadlineLabel,
|
||||
approvalText: AppStrings.tenderApprovalText,
|
||||
approvalDate: detail.approvalDate ?? '',
|
||||
approvalDate: '',
|
||||
submissionText: AppStrings.tenderSubmissionText,
|
||||
submissionDate: detail.submissionDate ?? '',
|
||||
submissionDate: '',
|
||||
isScreenBig: isScreenBig,
|
||||
),
|
||||
InfoItem(
|
||||
title: AppStrings.tenderClientLabel,
|
||||
value: detail.client ?? '',
|
||||
value: detail.buyerOrganization!.name ?? '',
|
||||
),
|
||||
InfoItem(
|
||||
title: AppStrings.tenderDeliveryLocationsLabel,
|
||||
value: detail.deliveryLocation ?? '',
|
||||
value: detail.countryCode ?? '',
|
||||
),
|
||||
InfoItem(
|
||||
title: AppStrings.tenderReferenceNumberLabel,
|
||||
value: detail.referenceNumber ?? '',
|
||||
value: detail.noticePublicationId ?? '',
|
||||
),
|
||||
],
|
||||
);
|
||||
|
||||
@@ -3,27 +3,24 @@ import 'package:flutter_svg/flutter_svg.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_detail_response/tender_detail_response_model.dart';
|
||||
class TenderDocumentSection extends StatelessWidget {
|
||||
final TenderDetailResponseModel detail;
|
||||
import 'package:tm_app/data/services/model/tender_data/tender_data.dart';
|
||||
|
||||
const TenderDocumentSection({super.key, required this.detail});
|
||||
class TenderDocumentSection extends StatelessWidget {
|
||||
final TenderData detail;
|
||||
|
||||
const TenderDocumentSection({required this.detail, super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
if (detail.documentUrl != null) {
|
||||
//launchUrl(Uri.parse(detail.documentUrl!));
|
||||
}
|
||||
},
|
||||
onTap: () {},
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
SvgPicture.asset(AssetsManager.export),
|
||||
SizedBox(height: 6.0.h()),
|
||||
Text(
|
||||
detail.documentName ?? '',
|
||||
'',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w400,
|
||||
fontSize: 16.0.sp(),
|
||||
|
||||
@@ -4,10 +4,11 @@ import 'package:tm_app/core/constants/assets.dart';
|
||||
import 'package:tm_app/core/constants/strings.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_detail_response/tender_detail_response_model.dart';
|
||||
|
||||
import '../../../data/services/model/tender_data/tender_data.dart';
|
||||
|
||||
class TenderLocationSection extends StatelessWidget {
|
||||
final TenderDetailResponseModel detail;
|
||||
final TenderData detail;
|
||||
|
||||
const TenderLocationSection({required this.detail, super.key});
|
||||
|
||||
@@ -21,7 +22,7 @@ class TenderLocationSection extends StatelessWidget {
|
||||
SizedBox(
|
||||
height: 45.0.h(),
|
||||
child: Text(
|
||||
detail.locationTitle ?? '',
|
||||
'',
|
||||
style: TextStyle(
|
||||
color: AppColors.grey80,
|
||||
fontWeight: FontWeight.w600,
|
||||
@@ -38,7 +39,7 @@ class TenderLocationSection extends StatelessWidget {
|
||||
),
|
||||
SizedBox(width: 4.0.w()),
|
||||
Text(
|
||||
detail.country ?? '',
|
||||
detail.countryCode ?? '',
|
||||
style: TextStyle(
|
||||
color: AppColors.grey70,
|
||||
fontSize: 14.0.sp(),
|
||||
@@ -47,7 +48,7 @@ class TenderLocationSection extends StatelessWidget {
|
||||
),
|
||||
SizedBox(width: 4.0.w()),
|
||||
Image.asset(
|
||||
detail.flagAsset ?? AssetsManager.seFlag,
|
||||
AssetsManager.seFlag,
|
||||
height: 20.0.h(),
|
||||
width: 20.0.w(),
|
||||
),
|
||||
@@ -60,7 +61,7 @@ class TenderLocationSection extends StatelessWidget {
|
||||
),
|
||||
SizedBox(height: 8.0.h()),
|
||||
Text(
|
||||
detail.locationDescription ?? '',
|
||||
detail.description ?? '',
|
||||
style: TextStyle(fontWeight: FontWeight.w400, fontSize: 14.0.sp()),
|
||||
),
|
||||
SizedBox(height: 16.0.h()),
|
||||
|
||||
@@ -100,7 +100,7 @@ class DesktopHomePage extends StatelessWidget {
|
||||
width: 178,
|
||||
height: 148,
|
||||
onTap: () {
|
||||
YourTendersRouteData().push(context);
|
||||
// YourTendersRouteData().push(context);
|
||||
},
|
||||
),
|
||||
SizedBox(width: 10),
|
||||
|
||||
@@ -27,6 +27,7 @@ class TendersListItem extends StatelessWidget {
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
<<<<<<< HEAD
|
||||
SizedBox(
|
||||
width: double.infinity,
|
||||
child: Text(
|
||||
@@ -53,6 +54,30 @@ class TendersListItem extends StatelessWidget {
|
||||
children: [
|
||||
Text(
|
||||
'${AppStrings.tenderDeadline} :',
|
||||
=======
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
// tender.createdTime ?? '',
|
||||
'',
|
||||
style: TextStyle(
|
||||
fontSize: 12.0.sp(),
|
||||
fontWeight: FontWeight.w400,
|
||||
color: AppColors.grey60,
|
||||
),
|
||||
),
|
||||
Container(
|
||||
width: 91.0.w(),
|
||||
height: 24.0.h(),
|
||||
decoration: BoxDecoration(
|
||||
color: AppColors.green20,
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
alignment: Alignment.center,
|
||||
child: Text(
|
||||
'',
|
||||
>>>>>>> tender_tender_detail
|
||||
style: TextStyle(
|
||||
fontSize: 15.0.sp(),
|
||||
fontWeight: FontWeight.w500,
|
||||
@@ -72,7 +97,11 @@ class TendersListItem extends StatelessWidget {
|
||||
),
|
||||
SizedBox(height: 12.0.h()),
|
||||
Text(
|
||||
<<<<<<< HEAD
|
||||
tender.title!,
|
||||
=======
|
||||
'',
|
||||
>>>>>>> tender_tender_detail
|
||||
style: TextStyle(
|
||||
overflow: TextOverflow.ellipsis,
|
||||
fontSize: 16.0.sp(),
|
||||
@@ -81,6 +110,7 @@ class TendersListItem extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8.0.h()),
|
||||
<<<<<<< HEAD
|
||||
SizedBox(
|
||||
width: double.infinity,
|
||||
child: Text(
|
||||
@@ -93,6 +123,16 @@ class TendersListItem extends StatelessWidget {
|
||||
fontWeight: FontWeight.w400,
|
||||
color: AppColors.grey70,
|
||||
),
|
||||
=======
|
||||
Text(
|
||||
'',
|
||||
maxLines: 3,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
fontSize: 14.0.sp(),
|
||||
fontWeight: FontWeight.w400,
|
||||
color: AppColors.grey70,
|
||||
>>>>>>> tender_tender_detail
|
||||
),
|
||||
),
|
||||
SizedBox(height: 18.0.h()),
|
||||
@@ -104,7 +144,11 @@ class TendersListItem extends StatelessWidget {
|
||||
SvgPicture.asset(AssetsManager.location),
|
||||
SizedBox(width: 1.0.w()),
|
||||
Text(
|
||||
<<<<<<< HEAD
|
||||
tender.countryCode!,
|
||||
=======
|
||||
'',
|
||||
>>>>>>> tender_tender_detail
|
||||
style: TextStyle(
|
||||
fontSize: 12.0.sp(),
|
||||
fontWeight: FontWeight.w400,
|
||||
@@ -118,6 +162,7 @@ class TendersListItem extends StatelessWidget {
|
||||
child: Image.asset(AssetsManager.seFlag, fit: BoxFit.cover),
|
||||
),
|
||||
Spacer(),
|
||||
<<<<<<< HEAD
|
||||
// Container(
|
||||
// width: 96.0.w(),
|
||||
// height: 24.0.h(),
|
||||
@@ -135,6 +180,25 @@ class TendersListItem extends StatelessWidget {
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
=======
|
||||
Container(
|
||||
width: 96.0.w(),
|
||||
height: 24.0.h(),
|
||||
decoration: BoxDecoration(
|
||||
color: AppColors.grey30,
|
||||
borderRadius: BorderRadius.circular(88),
|
||||
),
|
||||
alignment: Alignment.center,
|
||||
child: Text(
|
||||
'',
|
||||
style: TextStyle(
|
||||
fontSize: 12.0.sp(),
|
||||
fontWeight: FontWeight.w500,
|
||||
color: AppColors.grey60,
|
||||
),
|
||||
),
|
||||
),
|
||||
>>>>>>> tender_tender_detail
|
||||
],
|
||||
),
|
||||
],
|
||||
|
||||
@@ -33,7 +33,7 @@ class DesktopTendersPage extends StatelessWidget {
|
||||
child: Padding(
|
||||
padding: EdgeInsets.symmetric(vertical: 24.0.h()),
|
||||
child: MainTendersSlider(
|
||||
tenders: viewModel.tendersResponse?.tenders ?? [],
|
||||
tenders: viewModel.tendersResponse?.data?.tenders ?? [],
|
||||
isDesktop: true,
|
||||
),
|
||||
),
|
||||
|
||||
@@ -30,7 +30,7 @@ class MobileTendersPage extends StatelessWidget {
|
||||
return Padding(
|
||||
padding: EdgeInsets.symmetric(vertical: 24.0.h()),
|
||||
child: MainTendersSlider(
|
||||
tenders: viewModel.tendersResponse?.tenders ?? [],
|
||||
tenders: viewModel.tendersResponse?.data?.tenders ?? [],
|
||||
),
|
||||
);
|
||||
},
|
||||
|
||||
@@ -28,7 +28,7 @@ class TabletTendersPage extends StatelessWidget {
|
||||
return Padding(
|
||||
padding: EdgeInsets.only(right: 24.0.w(), top: 128.0.h()),
|
||||
child: MainTendersSlider(
|
||||
tenders: viewModel.tendersResponse?.tenders ?? [],
|
||||
tenders: viewModel.tendersResponse?.data?.tenders ?? [],
|
||||
),
|
||||
);
|
||||
},
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/svg.dart';
|
||||
import 'package:tm_app/core/theme/colors.dart';
|
||||
import 'package:tm_app/data/services/model/tender/tender_model.dart';
|
||||
import 'package:tm_app/data/services/model/tender_data/tender_data.dart';
|
||||
|
||||
import '../../../core/constants/assets.dart';
|
||||
import '../../../core/utils/size_config.dart';
|
||||
@@ -14,7 +14,7 @@ class MainTendersSlider extends StatefulWidget {
|
||||
this.isDesktop = false,
|
||||
});
|
||||
final bool isDesktop;
|
||||
final List<TenderModel> tenders;
|
||||
final List<TenderData> tenders;
|
||||
|
||||
@override
|
||||
State<MainTendersSlider> createState() => _MainTendersSliderState();
|
||||
|
||||
@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/svg.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:tm_app/core/constants/strings.dart';
|
||||
import 'package:tm_app/data/services/model/tender/tender_model.dart';
|
||||
import 'package:tm_app/data/services/model/tender_data/tender_data.dart';
|
||||
import 'package:tm_app/view_models/tenders_view_model.dart';
|
||||
|
||||
import '../../../core/constants/assets.dart';
|
||||
@@ -10,7 +10,7 @@ import '../../../core/theme/colors.dart';
|
||||
import '../../../core/utils/size_config.dart';
|
||||
|
||||
class TenderActionButtonsRow extends StatelessWidget {
|
||||
final TenderModel tender;
|
||||
final TenderData tender;
|
||||
final bool isDesktop;
|
||||
|
||||
const TenderActionButtonsRow({
|
||||
@@ -48,7 +48,7 @@ class TenderActionButtonsRow extends StatelessWidget {
|
||||
child: InkWell(
|
||||
splashColor: Colors.transparent,
|
||||
onTap: () {
|
||||
viewModel.toggleReject(tender);
|
||||
// viewModel.toggleReject(tender);
|
||||
},
|
||||
child: Column(
|
||||
children: [
|
||||
@@ -59,9 +59,10 @@ class TenderActionButtonsRow extends StatelessWidget {
|
||||
shape: BoxShape.circle,
|
||||
border: Border.all(
|
||||
color:
|
||||
tender.rejected ?? false
|
||||
? AppColors.errorColor
|
||||
: AppColors.grey60,
|
||||
// tender.rejected ?? false
|
||||
// ? AppColors.errorColor
|
||||
// :
|
||||
AppColors.grey60,
|
||||
width: 1.5.w(),
|
||||
),
|
||||
),
|
||||
@@ -69,9 +70,10 @@ class TenderActionButtonsRow extends StatelessWidget {
|
||||
child: Icon(
|
||||
Icons.close,
|
||||
color:
|
||||
tender.rejected ?? false
|
||||
? AppColors.errorColor
|
||||
: AppColors.grey60,
|
||||
// tender.rejected ?? false
|
||||
// ? AppColors.errorColor
|
||||
// :
|
||||
AppColors.grey60,
|
||||
size: 16,
|
||||
),
|
||||
),
|
||||
@@ -83,9 +85,10 @@ class TenderActionButtonsRow extends StatelessWidget {
|
||||
fontSize: 12.0.sp(),
|
||||
fontWeight: FontWeight.w400,
|
||||
color:
|
||||
tender.rejected ?? false
|
||||
? AppColors.errorColor
|
||||
: AppColors.grey60,
|
||||
// tender.rejected ?? false
|
||||
// ? AppColors.errorColor
|
||||
// :
|
||||
AppColors.grey60,
|
||||
),
|
||||
),
|
||||
],
|
||||
@@ -100,7 +103,7 @@ class TenderActionButtonsRow extends StatelessWidget {
|
||||
child: InkWell(
|
||||
splashColor: Colors.transparent,
|
||||
onTap: () {
|
||||
viewModel.toggleSubmit(tender);
|
||||
// viewModel.toggleSubmit(tender);
|
||||
},
|
||||
child: Column(
|
||||
children: [
|
||||
@@ -111,9 +114,10 @@ class TenderActionButtonsRow extends StatelessWidget {
|
||||
shape: BoxShape.circle,
|
||||
border: Border.all(
|
||||
color:
|
||||
tender.submitted ?? false
|
||||
? AppColors.successColor
|
||||
: AppColors.grey60,
|
||||
// tender.submitted ?? false
|
||||
// ? AppColors.successColor
|
||||
// :
|
||||
AppColors.grey60,
|
||||
width: 1.5.w(),
|
||||
),
|
||||
),
|
||||
@@ -121,9 +125,10 @@ class TenderActionButtonsRow extends StatelessWidget {
|
||||
child: SvgPicture.asset(
|
||||
AssetsManager.tick,
|
||||
colorFilter: ColorFilter.mode(
|
||||
tender.submitted ?? false
|
||||
? AppColors.successColor
|
||||
: AppColors.grey60,
|
||||
// tender.submitted ?? false
|
||||
// ? AppColors.successColor
|
||||
// :
|
||||
AppColors.grey60,
|
||||
BlendMode.srcATop,
|
||||
),
|
||||
),
|
||||
@@ -136,9 +141,10 @@ class TenderActionButtonsRow extends StatelessWidget {
|
||||
fontSize: 12.0.sp(),
|
||||
fontWeight: FontWeight.w400,
|
||||
color:
|
||||
tender.submitted ?? false
|
||||
? AppColors.successColor
|
||||
: AppColors.grey60,
|
||||
// tender.submitted ?? false
|
||||
// ? AppColors.successColor
|
||||
// :
|
||||
AppColors.grey60,
|
||||
),
|
||||
),
|
||||
],
|
||||
@@ -153,7 +159,7 @@ class TenderActionButtonsRow extends StatelessWidget {
|
||||
child: InkWell(
|
||||
splashColor: Colors.transparent,
|
||||
onTap: () {
|
||||
viewModel.toggleDislike(tender);
|
||||
// viewModel.toggleDislike(tender);
|
||||
},
|
||||
child: Column(
|
||||
children: [
|
||||
@@ -163,9 +169,10 @@ class TenderActionButtonsRow extends StatelessWidget {
|
||||
fit: BoxFit.cover,
|
||||
AssetsManager.dislike,
|
||||
colorFilter: ColorFilter.mode(
|
||||
tender.disliked ?? false
|
||||
? AppColors.errorColor
|
||||
: AppColors.grey50,
|
||||
// tender.disliked ?? false
|
||||
// ? AppColors.errorColor
|
||||
// :
|
||||
AppColors.grey50,
|
||||
BlendMode.srcATop,
|
||||
),
|
||||
),
|
||||
@@ -177,9 +184,10 @@ class TenderActionButtonsRow extends StatelessWidget {
|
||||
fontSize: 12.0.sp(),
|
||||
fontWeight: FontWeight.w400,
|
||||
color:
|
||||
tender.disliked ?? false
|
||||
? AppColors.errorColor
|
||||
: AppColors.grey50,
|
||||
// tender.disliked ?? false
|
||||
// ? AppColors.errorColor
|
||||
// :
|
||||
AppColors.grey50,
|
||||
),
|
||||
),
|
||||
],
|
||||
@@ -194,7 +202,7 @@ class TenderActionButtonsRow extends StatelessWidget {
|
||||
child: InkWell(
|
||||
splashColor: Colors.transparent,
|
||||
onTap: () {
|
||||
viewModel.toggleLike(tender);
|
||||
// viewModel.toggleLike(tender);
|
||||
},
|
||||
child: Column(
|
||||
children: [
|
||||
@@ -204,9 +212,10 @@ class TenderActionButtonsRow extends StatelessWidget {
|
||||
fit: BoxFit.cover,
|
||||
AssetsManager.like,
|
||||
colorFilter: ColorFilter.mode(
|
||||
tender.liked ?? false
|
||||
? AppColors.successColor
|
||||
: AppColors.grey50,
|
||||
// tender.liked ?? false
|
||||
// ? AppColors.successColor
|
||||
// :
|
||||
AppColors.grey50,
|
||||
BlendMode.srcATop,
|
||||
),
|
||||
),
|
||||
@@ -218,9 +227,10 @@ class TenderActionButtonsRow extends StatelessWidget {
|
||||
fontSize: 12.0.sp(),
|
||||
fontWeight: FontWeight.w400,
|
||||
color:
|
||||
tender.liked ?? false
|
||||
? AppColors.successColor
|
||||
: AppColors.grey50,
|
||||
// tender.liked ?? false
|
||||
// ? AppColors.successColor
|
||||
// :
|
||||
AppColors.grey50,
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/material.dart' hide DateUtils;
|
||||
import 'package:flutter_svg/svg.dart';
|
||||
import 'package:tm_app/core/constants/strings.dart';
|
||||
import 'package:tm_app/core/routes/app_routes.dart';
|
||||
import 'package:tm_app/data/services/model/tender/tender_model.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/date_utils.dart';
|
||||
import '../../../core/utils/size_config.dart';
|
||||
import 'tender_action_buttons_row.dart';
|
||||
|
||||
class TenderCard extends StatelessWidget {
|
||||
final TenderModel tender;
|
||||
final TenderData tender;
|
||||
final bool isDesktop;
|
||||
const TenderCard({required this.tender, super.key, this.isDesktop = false});
|
||||
|
||||
@@ -104,7 +105,7 @@ class TenderCard extends StatelessWidget {
|
||||
|
||||
Widget _dateText() {
|
||||
return Text(
|
||||
tender.createdTime ?? '',
|
||||
DateUtils.unixToDate(tender.publicationDate ?? 0),
|
||||
style: TextStyle(
|
||||
color: AppColors.grey60,
|
||||
fontSize: 12.0.sp(),
|
||||
@@ -134,7 +135,7 @@ class TenderCard extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
Text(
|
||||
tender.deadline ?? '',
|
||||
DateUtils.unixToDate(tender.tenderDeadline ?? 0),
|
||||
style: TextStyle(
|
||||
color: AppColors.grey80,
|
||||
fontSize: 14.0.sp(),
|
||||
@@ -171,7 +172,7 @@ class TenderCard extends StatelessWidget {
|
||||
|
||||
Widget _idText() {
|
||||
return Text(
|
||||
tender.tenderId ?? '',
|
||||
tender.id ?? '',
|
||||
style: TextStyle(
|
||||
color: AppColors.grey,
|
||||
fontSize: 14.0.sp(),
|
||||
@@ -193,7 +194,7 @@ class TenderCard extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
Text(
|
||||
'${tender.profileMatch ?? 0}%',
|
||||
'${45}%',
|
||||
style: TextStyle(
|
||||
color: AppColors.secondaryTextColor,
|
||||
fontSize: 16.0.sp(),
|
||||
@@ -214,7 +215,7 @@ class TenderCard extends StatelessWidget {
|
||||
),
|
||||
child: FractionallySizedBox(
|
||||
alignment: Alignment.centerLeft,
|
||||
widthFactor: (tender.profileMatch ?? 0) / 100,
|
||||
widthFactor: (45) / 100,
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
color: AppColors.secondary50,
|
||||
@@ -232,7 +233,7 @@ class TenderCard extends StatelessWidget {
|
||||
SvgPicture.asset(AssetsManager.location),
|
||||
SizedBox(width: 4.0.w()),
|
||||
Text(
|
||||
tender.location ?? '',
|
||||
tender.countryCode ?? '',
|
||||
style: TextStyle(
|
||||
color: AppColors.grey80,
|
||||
fontSize: 14.0.sp(),
|
||||
@@ -250,7 +251,7 @@ class TenderCard extends StatelessWidget {
|
||||
Widget _seeMoreButton(BuildContext context) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
TenderDetailRouteData().push(context);
|
||||
TenderDetailRouteData(tenderId: tender.id!).push(context);
|
||||
},
|
||||
child: Container(
|
||||
width: 108.0.w(),
|
||||
|
||||
@@ -1,101 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class TenderModel {
|
||||
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;
|
||||
|
||||
TenderModel({
|
||||
required this.date,
|
||||
required this.title,
|
||||
required this.description,
|
||||
required this.location,
|
||||
required this.countryFlag,
|
||||
required this.status,
|
||||
required this.projectStatus,
|
||||
this.backgroundColor,
|
||||
this.borderColor,
|
||||
this.statusIcon,
|
||||
this.statusCardColor,
|
||||
});
|
||||
}
|
||||
|
||||
List<TenderModel> approvedTenders = [
|
||||
TenderModel(
|
||||
date: '2025-01-01',
|
||||
title:
|
||||
'Lorem ipsum dolor sit amet consectetur. Sed mi tortor eu purus senectus.',
|
||||
description:
|
||||
'Lorem ipsum dolor sit amet consectetur. Volutpat velit tincidunt amet diam. Placerat congue ut Sed facilisis faucibus porttitor. Proin suspendisse eu euismod sit lorem quis. ',
|
||||
location: 'Stockholm, Sweden',
|
||||
countryFlag: 'assets/icons/SE.png',
|
||||
status: 'Completed',
|
||||
projectStatus: 'Self Control',
|
||||
),
|
||||
TenderModel(
|
||||
date: '2025-01-01',
|
||||
title:
|
||||
'Lorem ipsum dolor sit amet consectetur. Sed mi tortor eu purus senectus.',
|
||||
description:
|
||||
'Lorem ipsum dolor sit amet consectetur. Volutpat velit tincidunt amet diam. Placerat congue ut Sed facilisis faucibus porttitor. Proin suspendisse eu euismod sit lorem quis. ',
|
||||
location: 'Stockholm, Sweden',
|
||||
countryFlag: 'assets/icons/SE.png',
|
||||
status: 'Completed',
|
||||
projectStatus: 'Patner Ship',
|
||||
),
|
||||
TenderModel(
|
||||
date: '2025-01-01',
|
||||
title:
|
||||
'Lorem ipsum dolor sit amet consectetur. Sed mi tortor eu purus senectus.',
|
||||
description:
|
||||
'Lorem ipsum dolor sit amet consectetur. Volutpat velit tincidunt amet diam. Placerat congue ut Sed facilisis faucibus porttitor. Proin suspendisse eu euismod sit lorem quis. ',
|
||||
location: 'Stockholm, Sweden',
|
||||
countryFlag: 'assets/icons/SE.png',
|
||||
status: 'Completed',
|
||||
projectStatus: 'Self Control',
|
||||
),
|
||||
];
|
||||
|
||||
List<TenderModel> tendersSubmitted = [
|
||||
TenderModel(
|
||||
date: '2025-01-01',
|
||||
title:
|
||||
'Lorem ipsum dolor sit amet consectetur. Sed mi tortor eu purus senectus.',
|
||||
description:
|
||||
'Lorem ipsum dolor sit amet consectetur. Volutpat velit tincidunt amet diam. Placerat congue ut Sed facilisis faucibus porttitor. Proin suspendisse eu euismod sit lorem quis. ',
|
||||
location: 'Stockholm, Sweden',
|
||||
countryFlag: 'assets/icons/SE.png',
|
||||
status: 'Won',
|
||||
projectStatus: 'Self Control',
|
||||
),
|
||||
TenderModel(
|
||||
date: '2025-01-01',
|
||||
title:
|
||||
'Lorem ipsum dolor sit amet consectetur. Sed mi tortor eu purus senectus.',
|
||||
description:
|
||||
'Lorem ipsum dolor sit amet consectetur. Volutpat velit tincidunt amet diam. Placerat congue ut Sed facilisis faucibus porttitor. Proin suspendisse eu euismod sit lorem quis. ',
|
||||
location: 'Stockholm, Sweden',
|
||||
countryFlag: 'assets/icons/SE.png',
|
||||
status: 'Reject',
|
||||
projectStatus: 'Patner Ship',
|
||||
),
|
||||
TenderModel(
|
||||
date: '2025-01-01',
|
||||
title:
|
||||
'Lorem ipsum dolor sit amet consectetur. Sed mi tortor eu purus senectus.',
|
||||
description:
|
||||
'Lorem ipsum dolor sit amet consectetur. Volutpat velit tincidunt amet diam. Placerat congue ut Sed facilisis faucibus porttitor. Proin suspendisse eu euismod sit lorem quis. ',
|
||||
location: 'Stockholm, Sweden',
|
||||
countryFlag: 'assets/icons/SE.png',
|
||||
status: 'Won',
|
||||
projectStatus: 'Self Control',
|
||||
),
|
||||
];
|
||||
Reference in New Issue
Block a user