detail refactor
This commit is contained in:
@@ -8,6 +8,7 @@ import 'package:tm_app/views/detail/widgets/tender_detail_action.dart';
|
||||
import 'package:tm_app/views/detail/widgets/tender_detail_card.dart';
|
||||
import 'package:tm_app/views/detail/widgets/tender_detail_header.dart';
|
||||
|
||||
import '../../../core/constants/strings.dart';
|
||||
import '../../../view_models/home_view_model.dart';
|
||||
import '../../../view_models/tenders_view_model.dart';
|
||||
import '../../shared/desktop_navigation_widget.dart';
|
||||
@@ -34,39 +35,39 @@ class _TenderDetailDesktopPageState extends State<TenderDetailDesktopPage> {
|
||||
if (viewModel.status.isNotEmpty &&
|
||||
viewModel.status == 'submitted' &&
|
||||
viewModel.approvalStatus == true) {
|
||||
ScaffoldMessenger.of(
|
||||
context,
|
||||
).showSnackBar(SnackBar(content: Text('tender submitted successfully!')));
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text(AppStrings.tenderSubmittedSuccessfully)),
|
||||
);
|
||||
}
|
||||
if (viewModel.status.isNotEmpty &&
|
||||
viewModel.status == 'unsubmitted' &&
|
||||
viewModel.approvalStatus == true) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('tender submitted removed sucessfully!')),
|
||||
SnackBar(content: Text(AppStrings.tenderUnsubmittedSuccessfully)),
|
||||
);
|
||||
}
|
||||
if (viewModel.status.isNotEmpty &&
|
||||
viewModel.status == 'rejected' &&
|
||||
viewModel.approvalStatus == true) {
|
||||
ScaffoldMessenger.of(
|
||||
context,
|
||||
).showSnackBar(SnackBar(content: Text('tender rejected sucessfully!')));
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text(AppStrings.tenderRejectedSuccessfully)),
|
||||
);
|
||||
}
|
||||
if (viewModel.status.isNotEmpty &&
|
||||
viewModel.status == 'unrejected' &&
|
||||
viewModel.approvalStatus == true) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('tender reject removed sucessfully!')),
|
||||
SnackBar(content: Text(AppStrings.tenderUnrejectedSuccessfully)),
|
||||
);
|
||||
}
|
||||
if (viewModel.approvalStatus != false && viewModel.errorMessage != null) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
backgroundColor: AppColors.errorColor,
|
||||
content: Text(viewModel.errorMessage!),
|
||||
),
|
||||
);
|
||||
}
|
||||
// if (viewModel.errorMessage != null) {
|
||||
// ScaffoldMessenger.of(context).showSnackBar(
|
||||
// SnackBar(
|
||||
// backgroundColor: AppColors.errorColor,
|
||||
// content: Text(viewModel.errorMessage!),
|
||||
// ),
|
||||
// );
|
||||
// }
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -99,7 +100,7 @@ class _TenderDetailDesktopPageState extends State<TenderDetailDesktopPage> {
|
||||
|
||||
final detail = tenderViewModel.tenderDetail;
|
||||
if (detail == null) {
|
||||
return const Center(child: Text('No tender details available'));
|
||||
return const Center(child: Text(AppStrings.tenderNoData));
|
||||
}
|
||||
|
||||
return Column(
|
||||
|
||||
@@ -30,39 +30,39 @@ class _TenderDetailMobilePageState extends State<TenderDetailMobilePage> {
|
||||
if (viewModel.status.isNotEmpty &&
|
||||
viewModel.status == 'submitted' &&
|
||||
viewModel.approvalStatus == true) {
|
||||
ScaffoldMessenger.of(
|
||||
context,
|
||||
).showSnackBar(SnackBar(content: Text('tender submitted successfully!')));
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text(AppStrings.tenderSubmittedSuccessfully)),
|
||||
);
|
||||
}
|
||||
if (viewModel.status.isNotEmpty &&
|
||||
viewModel.status == 'unsubmitted' &&
|
||||
viewModel.approvalStatus == true) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('tender submitted removed sucessfully!')),
|
||||
SnackBar(content: Text(AppStrings.tenderUnsubmittedSuccessfully)),
|
||||
);
|
||||
}
|
||||
if (viewModel.status.isNotEmpty &&
|
||||
viewModel.status == 'rejected' &&
|
||||
viewModel.approvalStatus == true) {
|
||||
ScaffoldMessenger.of(
|
||||
context,
|
||||
).showSnackBar(SnackBar(content: Text('tender rejected sucessfully!')));
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text(AppStrings.tenderRejectedSuccessfully)),
|
||||
);
|
||||
}
|
||||
if (viewModel.status.isNotEmpty &&
|
||||
viewModel.status == 'unrejected' &&
|
||||
viewModel.approvalStatus == true) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('tender reject removed sucessfully!')),
|
||||
SnackBar(content: Text(AppStrings.tenderUnrejectedSuccessfully)),
|
||||
);
|
||||
}
|
||||
if (viewModel.approvalStatus != false && viewModel.errorMessage != null) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
backgroundColor: AppColors.errorColor,
|
||||
content: Text(viewModel.errorMessage!),
|
||||
),
|
||||
);
|
||||
}
|
||||
// if (viewModel.errorMessage != null) {
|
||||
// ScaffoldMessenger.of(context).showSnackBar(
|
||||
// SnackBar(
|
||||
// backgroundColor: AppColors.errorColor,
|
||||
// content: Text(viewModel.errorMessage!),
|
||||
// ),
|
||||
// );
|
||||
// }
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -90,7 +90,7 @@ class _TenderDetailMobilePageState extends State<TenderDetailMobilePage> {
|
||||
|
||||
final detail = tenderViewModel.tenderDetail;
|
||||
if (detail == null) {
|
||||
return const Center(child: Text('No tender details available'));
|
||||
return const Center(child: Text(AppStrings.tenderNoData));
|
||||
}
|
||||
|
||||
return SingleChildScrollView(
|
||||
|
||||
@@ -12,6 +12,8 @@ import 'package:tm_app/views/detail/widgets/tender_detail_card.dart';
|
||||
import 'package:tm_app/views/detail/widgets/tender_detail_header.dart';
|
||||
import 'package:tm_app/views/shared/tablet_navigation_widget.dart';
|
||||
|
||||
import '../../../core/constants/strings.dart';
|
||||
|
||||
class TenderDetailTabletPage extends StatefulWidget {
|
||||
final String tenderId;
|
||||
const TenderDetailTabletPage({required this.tenderId, super.key});
|
||||
@@ -33,39 +35,39 @@ class _TenderDetailTabletPageState extends State<TenderDetailTabletPage> {
|
||||
if (viewModel.status.isNotEmpty &&
|
||||
viewModel.status == 'submitted' &&
|
||||
viewModel.approvalStatus == true) {
|
||||
ScaffoldMessenger.of(
|
||||
context,
|
||||
).showSnackBar(SnackBar(content: Text('tender submitted successfully!')));
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text(AppStrings.tenderSubmittedSuccessfully)),
|
||||
);
|
||||
}
|
||||
if (viewModel.status.isNotEmpty &&
|
||||
viewModel.status == 'unsubmitted' &&
|
||||
viewModel.approvalStatus == true) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('tender submitted removed sucessfully!')),
|
||||
SnackBar(content: Text(AppStrings.tenderUnsubmittedSuccessfully)),
|
||||
);
|
||||
}
|
||||
if (viewModel.status.isNotEmpty &&
|
||||
viewModel.status == 'rejected' &&
|
||||
viewModel.approvalStatus == true) {
|
||||
ScaffoldMessenger.of(
|
||||
context,
|
||||
).showSnackBar(SnackBar(content: Text('tender rejected sucessfully!')));
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text(AppStrings.tenderRejectedSuccessfully)),
|
||||
);
|
||||
}
|
||||
if (viewModel.status.isNotEmpty &&
|
||||
viewModel.status == 'unrejected' &&
|
||||
viewModel.approvalStatus == true) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('tender reject removed sucessfully!')),
|
||||
SnackBar(content: Text(AppStrings.tenderUnrejectedSuccessfully)),
|
||||
);
|
||||
}
|
||||
if (viewModel.approvalStatus != false && viewModel.errorMessage != null) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
backgroundColor: AppColors.errorColor,
|
||||
content: Text(viewModel.errorMessage!),
|
||||
),
|
||||
);
|
||||
}
|
||||
// if (viewModel.errorMessage != null) {
|
||||
// ScaffoldMessenger.of(context).showSnackBar(
|
||||
// SnackBar(
|
||||
// backgroundColor: AppColors.errorColor,
|
||||
// content: Text(viewModel.errorMessage!),
|
||||
// ),
|
||||
// );
|
||||
// }
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -138,7 +140,7 @@ class _TenderDetailTabletPageState extends State<TenderDetailTabletPage> {
|
||||
|
||||
final detail = tenderViewModel.tenderDetail;
|
||||
if (detail == null) {
|
||||
return const Center(child: Text('No tender details available'));
|
||||
return const Center(child: Text(AppStrings.tenderNoData));
|
||||
}
|
||||
return SingleChildScrollView(
|
||||
child: Center(
|
||||
|
||||
@@ -1,21 +1,18 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:tm_app/core/theme/colors.dart';
|
||||
import 'package:tm_app/core/utils/date_utils.dart';
|
||||
import 'package:tm_app/core/utils/size_config.dart';
|
||||
|
||||
import '../../../core/constants/strings.dart';
|
||||
import '../../../data/services/model/tender_data/tender_data.dart';
|
||||
|
||||
class DeadlineItem extends StatelessWidget {
|
||||
final String title;
|
||||
final String approvalText;
|
||||
final String approvalDate;
|
||||
final String submissionText;
|
||||
final String submissionDate;
|
||||
final TenderData detail;
|
||||
final bool isScreenBig;
|
||||
|
||||
const DeadlineItem({
|
||||
required this.title,
|
||||
required this.approvalText,
|
||||
required this.approvalDate,
|
||||
required this.submissionText,
|
||||
required this.submissionDate,
|
||||
required this.detail,
|
||||
|
||||
required this.isScreenBig,
|
||||
super.key,
|
||||
});
|
||||
@@ -31,7 +28,7 @@ class DeadlineItem extends StatelessWidget {
|
||||
SizedBox(
|
||||
height: 45.0.h(),
|
||||
child: Text(
|
||||
title,
|
||||
detail.title ?? '',
|
||||
style: TextStyle(
|
||||
color: AppColors.grey80,
|
||||
fontWeight: FontWeight.w600,
|
||||
@@ -47,7 +44,7 @@ class DeadlineItem extends StatelessWidget {
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
approvalText,
|
||||
AppStrings.tenderApprovalText,
|
||||
style: TextStyle(
|
||||
color: AppColors.grey70,
|
||||
fontWeight: FontWeight.w400,
|
||||
@@ -56,7 +53,7 @@ class DeadlineItem extends StatelessWidget {
|
||||
),
|
||||
SizedBox(height: 4.0.h()),
|
||||
Text(
|
||||
approvalDate,
|
||||
unixToDate(detail.submissionDeadline),
|
||||
style: TextStyle(
|
||||
color: AppColors.grey80,
|
||||
fontWeight: FontWeight.w400,
|
||||
@@ -76,7 +73,7 @@ class DeadlineItem extends StatelessWidget {
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
submissionText,
|
||||
AppStrings.tenderSubmissionText,
|
||||
style: TextStyle(
|
||||
color: AppColors.grey70,
|
||||
fontWeight: FontWeight.w400,
|
||||
@@ -85,7 +82,7 @@ class DeadlineItem extends StatelessWidget {
|
||||
),
|
||||
SizedBox(height: 4.0.h()),
|
||||
Text(
|
||||
submissionDate,
|
||||
unixToDate(detail.applicationDeadline),
|
||||
style: TextStyle(
|
||||
color: AppColors.grey80,
|
||||
fontWeight: FontWeight.w400,
|
||||
@@ -99,7 +96,7 @@ class DeadlineItem extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8.0.h()),
|
||||
Divider(color: AppColors.grey20,),
|
||||
Divider(color: AppColors.grey20),
|
||||
],
|
||||
),
|
||||
)
|
||||
@@ -111,7 +108,7 @@ class DeadlineItem extends StatelessWidget {
|
||||
SizedBox(
|
||||
height: 45.0.h(),
|
||||
child: Text(
|
||||
title,
|
||||
detail.title ?? '',
|
||||
style: TextStyle(
|
||||
color: AppColors.grey80,
|
||||
fontWeight: FontWeight.w600,
|
||||
@@ -123,7 +120,7 @@ class DeadlineItem extends StatelessWidget {
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
approvalText,
|
||||
AppStrings.tenderApprovalText,
|
||||
style: TextStyle(
|
||||
color: AppColors.grey70,
|
||||
fontWeight: FontWeight.w400,
|
||||
@@ -131,7 +128,7 @@ class DeadlineItem extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
Text(
|
||||
approvalDate,
|
||||
unixToDate(detail.submissionDeadline),
|
||||
style: TextStyle(
|
||||
color: AppColors.grey70,
|
||||
fontWeight: FontWeight.w400,
|
||||
@@ -145,7 +142,7 @@ class DeadlineItem extends StatelessWidget {
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
submissionText,
|
||||
AppStrings.tenderSubmissionText,
|
||||
style: TextStyle(
|
||||
color: AppColors.grey70,
|
||||
fontWeight: FontWeight.w400,
|
||||
@@ -153,7 +150,7 @@ class DeadlineItem extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
Text(
|
||||
submissionDate,
|
||||
unixToDate(detail.applicationDeadline),
|
||||
style: TextStyle(
|
||||
color: AppColors.grey70,
|
||||
fontWeight: FontWeight.w400,
|
||||
@@ -163,7 +160,7 @@ class DeadlineItem extends StatelessWidget {
|
||||
],
|
||||
),
|
||||
SizedBox(height: 8.0.h()),
|
||||
Divider(color: AppColors.grey20,),
|
||||
Divider(color: AppColors.grey20),
|
||||
],
|
||||
),
|
||||
);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:tm_app/core/theme/colors.dart';
|
||||
import 'package:tm_app/core/utils/date_utils.dart';
|
||||
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/detail/widgets/status_tag.dart';
|
||||
@@ -73,16 +73,3 @@ 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,5 +1,4 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:tm_app/core/constants/strings.dart';
|
||||
import 'package:tm_app/data/services/model/tender_data/tender_data.dart';
|
||||
import 'package:tm_app/views/detail/widgets/deadline_item.dart';
|
||||
@@ -21,14 +20,7 @@ class TenderDetailInfoSection extends StatelessWidget {
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
InfoItem(title: AppStrings.tenderIdLabel, value: detail.tenderId ?? ''),
|
||||
DeadlineItem(
|
||||
title: AppStrings.tenderDeadlineLabel,
|
||||
approvalText: AppStrings.tenderApprovalText,
|
||||
approvalDate: unixToDate(detail.submissionDeadline),
|
||||
submissionText: AppStrings.tenderSubmissionText,
|
||||
submissionDate: unixToDate(detail.applicationDeadline),
|
||||
isScreenBig: isScreenBig,
|
||||
),
|
||||
DeadlineItem(detail: detail, isScreenBig: isScreenBig),
|
||||
InfoItem(
|
||||
title: AppStrings.tenderClientLabel,
|
||||
value: detail.buyerOrganization!.name ?? '',
|
||||
@@ -49,16 +41,3 @@ class TenderDetailInfoSection 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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user