added string for every screen and removed from app strings

This commit is contained in:
amirrezaghabeli
2025-09-01 17:50:51 +03:30
parent bc69fff0ca
commit cab78c8f4d
45 changed files with 358 additions and 298 deletions
@@ -7,9 +7,9 @@ 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 '../../../core/routes/app_routes.dart';
import '../../shared/desktop_navigation_widget.dart';
import '../strings/tender_details_strings.dart';
class TenderDetailDesktopPage extends StatefulWidget {
final String tenderId;
@@ -34,28 +34,36 @@ class _TenderDetailDesktopPageState extends State<TenderDetailDesktopPage> {
viewModel.status == 'submitted' &&
viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(AppStrings.tenderSubmittedSuccessfully)),
SnackBar(
content: Text(TenderDetailsStrings.tenderSubmittedSuccessfully),
),
);
}
if (viewModel.status.isNotEmpty &&
viewModel.status == 'unsubmitted' &&
viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(AppStrings.tenderUnsubmittedSuccessfully)),
SnackBar(
content: Text(TenderDetailsStrings.tenderUnsubmittedSuccessfully),
),
);
}
if (viewModel.status.isNotEmpty &&
viewModel.status == 'rejected' &&
viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(AppStrings.tenderRejectedSuccessfully)),
SnackBar(
content: Text(TenderDetailsStrings.tenderRejectedSuccessfully),
),
);
}
if (viewModel.status.isNotEmpty &&
viewModel.status == 'unrejected' &&
viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(AppStrings.tenderUnrejectedSuccessfully)),
SnackBar(
content: Text(TenderDetailsStrings.tenderUnrejectedSuccessfully),
),
);
}
if (viewModel.approvalStatus != false && viewModel.errorMessage != null) {
@@ -98,7 +106,9 @@ class _TenderDetailDesktopPageState extends State<TenderDetailDesktopPage> {
final detail = tenderViewModel.tenderDetail;
if (detail == null) {
return const Center(child: Text(AppStrings.tenderNoData));
return const Center(
child: Text(TenderDetailsStrings.tenderNoData),
);
}
return Column(
+20 -7
View File
@@ -1,10 +1,10 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.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/view_models/tender_detail_view_model.dart';
import 'package:tm_app/views/detail/strings/tender_details_strings.dart';
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';
@@ -32,28 +32,36 @@ class _TenderDetailMobilePageState extends State<TenderDetailMobilePage> {
viewModel.status == 'submitted' &&
viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(AppStrings.tenderSubmittedSuccessfully)),
SnackBar(
content: Text(TenderDetailsStrings.tenderSubmittedSuccessfully),
),
);
}
if (viewModel.status.isNotEmpty &&
viewModel.status == 'unsubmitted' &&
viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(AppStrings.tenderUnsubmittedSuccessfully)),
SnackBar(
content: Text(TenderDetailsStrings.tenderUnsubmittedSuccessfully),
),
);
}
if (viewModel.status.isNotEmpty &&
viewModel.status == 'rejected' &&
viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(AppStrings.tenderRejectedSuccessfully)),
SnackBar(
content: Text(TenderDetailsStrings.tenderRejectedSuccessfully),
),
);
}
if (viewModel.status.isNotEmpty &&
viewModel.status == 'unrejected' &&
viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(AppStrings.tenderUnrejectedSuccessfully)),
SnackBar(
content: Text(TenderDetailsStrings.tenderUnrejectedSuccessfully),
),
);
}
if (viewModel.approvalStatus != false && viewModel.errorMessage != null) {
@@ -86,7 +94,10 @@ class _TenderDetailMobilePageState extends State<TenderDetailMobilePage> {
},
child: Scaffold(
backgroundColor: AppColors.backgroundColor,
appBar: appBar(context: context, title: AppStrings.tenderDetailTitle),
appBar: appBar(
context: context,
title: TenderDetailsStrings.tenderDetailTitle,
),
body: Consumer<TenderDetailViewModel>(
builder: (context, tenderViewModel, child) {
if (tenderViewModel.isLoading) {
@@ -101,7 +112,9 @@ class _TenderDetailMobilePageState extends State<TenderDetailMobilePage> {
final detail = tenderViewModel.tenderDetail;
if (detail == null) {
return const Center(child: Text(AppStrings.tenderNoData));
return const Center(
child: Text(TenderDetailsStrings.tenderNoData),
);
}
return SingleChildScrollView(
+16 -6
View File
@@ -12,8 +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';
import '../../../core/routes/app_routes.dart';
import '../strings/tender_details_strings.dart';
class TenderDetailTabletPage extends StatefulWidget {
final String tenderId;
@@ -37,28 +37,36 @@ class _TenderDetailTabletPageState extends State<TenderDetailTabletPage> {
viewModel.status == 'submitted' &&
viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(AppStrings.tenderSubmittedSuccessfully)),
SnackBar(
content: Text(TenderDetailsStrings.tenderSubmittedSuccessfully),
),
);
}
if (viewModel.status.isNotEmpty &&
viewModel.status == 'unsubmitted' &&
viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(AppStrings.tenderUnsubmittedSuccessfully)),
SnackBar(
content: Text(TenderDetailsStrings.tenderUnsubmittedSuccessfully),
),
);
}
if (viewModel.status.isNotEmpty &&
viewModel.status == 'rejected' &&
viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(AppStrings.tenderRejectedSuccessfully)),
SnackBar(
content: Text(TenderDetailsStrings.tenderRejectedSuccessfully),
),
);
}
if (viewModel.status.isNotEmpty &&
viewModel.status == 'unrejected' &&
viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(AppStrings.tenderUnrejectedSuccessfully)),
SnackBar(
content: Text(TenderDetailsStrings.tenderUnrejectedSuccessfully),
),
);
}
if (viewModel.approvalStatus != false && viewModel.errorMessage != null) {
@@ -149,7 +157,9 @@ class _TenderDetailTabletPageState extends State<TenderDetailTabletPage> {
final detail = tenderViewModel.tenderDetail;
if (detail == null) {
return const Center(child: Text(AppStrings.tenderNoData));
return const Center(
child: Text(TenderDetailsStrings.tenderNoData),
);
}
return SingleChildScrollView(
child: Center(
@@ -0,0 +1,34 @@
class TenderDetailsStrings {
TenderDetailsStrings._();
static const String tenderDetailTitle = 'Tender Detail';
static const String tenderStatusOpen = 'Open';
static const String tenderIdLabel = 'ID';
static const String tenderDeadlineLabel = 'Deadline';
static const String tenderApprovalText = 'For approval';
static const String tenderSubmissionText = 'For submission';
static const String tenderClientLabel = 'Client';
static const String tenderDeliveryLocationsLabel = 'Delivery Locations';
static const String tenderReferenceNumberLabel = 'Reference Number';
static const String tenderLocationLabel = 'Locations';
static const String tenderPdfDocument = 'PDF , Document';
static const String tenderMatchProfile = 'Match with your profile';
static const String tenderIncompleteResume = 'Incomplete Resume Information';
static const String tenderNoExperience =
'No experience in e-platform development';
static const String tenderSubmitButton = 'Submit';
static const String tenderRejectButton = 'Reject';
static const String tenderClientExample =
'Procurement Notice Procurement Notice';
static const String estimatedValue = 'Estimated Value ';
static const String duration = 'Duration';
static const String tenderSubmittedSuccessfully =
'tender submitted successfully!';
static const String tenderRejectedSuccessfully =
'tender rejected successfully!';
static const String tenderUnrejectedSuccessfully =
'tender unrejected successfully!';
static const String tenderUnsubmittedSuccessfully =
'tender unsubmitted successfully!';
static const String tenderNoData = 'No tender details available';
}
+5 -5
View File
@@ -2,8 +2,8 @@ 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 'package:tm_app/views/detail/strings/tender_details_strings.dart';
import '../../../core/constants/strings.dart';
import '../../../data/services/model/tender_data/tender_data.dart';
class DeadlineItem extends StatelessWidget {
@@ -44,7 +44,7 @@ class DeadlineItem extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
AppStrings.tenderApprovalText,
TenderDetailsStrings.tenderApprovalText,
style: TextStyle(
color: AppColors.grey70,
fontWeight: FontWeight.w400,
@@ -73,7 +73,7 @@ class DeadlineItem extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
AppStrings.tenderSubmissionText,
TenderDetailsStrings.tenderSubmissionText,
style: TextStyle(
color: AppColors.grey70,
fontWeight: FontWeight.w400,
@@ -120,7 +120,7 @@ class DeadlineItem extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
AppStrings.tenderApprovalText,
TenderDetailsStrings.tenderApprovalText,
style: TextStyle(
color: AppColors.grey70,
fontWeight: FontWeight.w400,
@@ -142,7 +142,7 @@ class DeadlineItem extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
AppStrings.tenderSubmissionText,
TenderDetailsStrings.tenderSubmissionText,
style: TextStyle(
color: AppColors.grey70,
fontWeight: FontWeight.w400,
@@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.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/view_models/tender_detail_view_model.dart';
@@ -9,6 +8,7 @@ import 'package:tm_app/views/shared/select_submission_bottom_sheet.dart';
import '../../../data/services/model/tender_data/tender_data.dart';
import '../../shared/select_submission_dialog.dart';
import '../strings/tender_details_strings.dart';
class TenderDetailActions extends StatelessWidget {
final bool isScreenBig;
@@ -43,7 +43,7 @@ class TenderDetailActions extends StatelessWidget {
)
: BaseButton(
isEnabled: true,
text: AppStrings.tenderSubmitButton,
text: TenderDetailsStrings.tenderSubmitButton,
backgroundColor: AppColors.primary30,
textColor: AppColors.mainBlue,
onPressed: () {
@@ -78,7 +78,7 @@ class TenderDetailActions extends StatelessWidget {
return viewModel.isRejectApprovalLoading
? BaseButton(
isEnabled: true,
text: AppStrings.tenderRejectButton,
text: TenderDetailsStrings.tenderRejectButton,
borderColor: AppColors.error,
textColor: AppColors.error,
backgroundColor: AppColors.backgroundColor,
@@ -87,7 +87,7 @@ class TenderDetailActions extends StatelessWidget {
)
: BaseButton(
isEnabled: true,
text: AppStrings.tenderRejectButton,
text: TenderDetailsStrings.tenderRejectButton,
borderColor: AppColors.error,
textColor: AppColors.error,
backgroundColor: AppColors.backgroundColor,
@@ -115,7 +115,7 @@ class TenderDetailActions extends StatelessWidget {
return viewModel.isRejectApprovalLoading
? BaseButton(
isEnabled: true,
text: AppStrings.tenderRejectButton,
text: TenderDetailsStrings.tenderRejectButton,
textColor: AppColors.red10,
backgroundColor: AppColors.backgroundColor,
borderWidth: 1,
@@ -124,7 +124,7 @@ class TenderDetailActions extends StatelessWidget {
)
: BaseButton(
isEnabled: true,
text: AppStrings.tenderRejectButton,
text: TenderDetailsStrings.tenderRejectButton,
textColor: AppColors.red10,
backgroundColor: AppColors.backgroundColor,
borderWidth: 1,
@@ -144,7 +144,7 @@ class TenderDetailActions extends StatelessWidget {
return viewModel.isSubmitApprovalLoading
? BaseButton(
isEnabled: true,
text: AppStrings.tenderSubmitButton,
text: TenderDetailsStrings.tenderSubmitButton,
backgroundColor: AppColors.lightBlue,
textColor: AppColors.mainBlue,
onPressed: () {},
@@ -152,7 +152,7 @@ class TenderDetailActions extends StatelessWidget {
)
: BaseButton(
isEnabled: true,
text: AppStrings.tenderSubmitButton,
text: TenderDetailsStrings.tenderSubmitButton,
backgroundColor: AppColors.lightBlue,
textColor: AppColors.mainBlue,
onPressed: () {
@@ -1,8 +1,8 @@
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_data/tender_data.dart';
import 'package:tm_app/views/detail/strings/tender_details_strings.dart';
class TenderDetailCard extends StatelessWidget {
final TenderData detail;
@@ -25,7 +25,7 @@ class TenderDetailCard extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
AppStrings.tenderMatchProfile,
TenderDetailsStrings.tenderMatchProfile,
style: TextStyle(
fontSize: 12.0.sp(),
color: AppColors.grey80,
@@ -65,7 +65,7 @@ class TenderDetailCard extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
AppStrings.tenderIncompleteResume,
TenderDetailsStrings.tenderIncompleteResume,
style: TextStyle(
fontWeight: FontWeight.w600,
fontSize: 16.0.sp(),
@@ -74,7 +74,7 @@ class TenderDetailCard extends StatelessWidget {
),
SizedBox(height: 4.0.h()),
Text(
AppStrings.tenderNoExperience,
TenderDetailsStrings.tenderNoExperience,
style: TextStyle(
fontSize: 14.0.sp(),
color: AppColors.grey70,
@@ -1,6 +1,6 @@
import 'package:flutter/material.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/strings/tender_details_strings.dart';
import 'package:tm_app/views/detail/widgets/deadline_item.dart';
import 'package:tm_app/views/detail/widgets/info_item.dart';
@@ -19,22 +19,25 @@ class TenderDetailInfoSection extends StatelessWidget {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
InfoItem(title: AppStrings.tenderIdLabel, value: detail.tenderId ?? ''),
InfoItem(
title: TenderDetailsStrings.tenderIdLabel,
value: detail.tenderId ?? '',
),
DeadlineItem(detail: detail, isScreenBig: isScreenBig),
InfoItem(
title: AppStrings.tenderClientLabel,
title: TenderDetailsStrings.tenderClientLabel,
value: detail.buyerOrganization!.name ?? '',
),
InfoItem(
title: AppStrings.estimatedValue,
title: TenderDetailsStrings.estimatedValue,
value: '${detail.estimatedValue} ${detail.currency ?? ''}',
),
InfoItem(
title: AppStrings.duration,
title: TenderDetailsStrings.duration,
value: '${detail.duration} ${detail.durationUnit ?? ''}',
),
InfoItem(
title: AppStrings.tenderReferenceNumberLabel,
title: TenderDetailsStrings.tenderReferenceNumberLabel,
value: detail.noticePublicationId ?? '',
),
],
@@ -2,11 +2,11 @@ import 'package:country_flags/country_flags.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
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 '../../../data/services/model/tender_data/tender_data.dart';
import '../strings/tender_details_strings.dart';
class TenderLocationSection extends StatelessWidget {
final TenderData detail;
@@ -60,7 +60,7 @@ class TenderLocationSection extends StatelessWidget {
),
SizedBox(height: 8.0.h()),
Text(
AppStrings.tenderLocationLabel,
TenderDetailsStrings.tenderLocationLabel,
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16.0.sp()),
),
SizedBox(height: 8.0.h()),