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
+13
View File
@@ -0,0 +1,13 @@
class CommonStrings {
CommonStrings._();
// Truly shared strings across multiple features
static const String noData = 'No data';
static const String confirm = 'Confirm';
static const String submit = 'Submit';
static const String cancel = 'Cancel';
static const String loading = 'Loading...';
static const String error = 'Error';
static const String success = 'Success';
static const String retry = 'Retry';
}
-116
View File
@@ -1,116 +0,0 @@
class AppStrings {
AppStrings._();
static const String noData = 'No data';
// App Titles
static const String appName = 'My Awesome App';
static const String loginTitle = 'Welcome Back';
// Labels and Buttons
static const String signupButton = 'Create Account';
static const String forgotPassword = 'Forgot Password?';
static const String emailHint = 'Email address';
static const String passwordHint = 'Password';
// Error Messages
static const String loginFailed =
'Login failed. Please check your credentials.';
static const String networkError = 'Network error. Please try again.';
//Login
static const signInTitle = 'Sign In';
static const signInSubtitle = 'Enter valid username & password to continue';
static const usernameLabel = 'User Name';
static const passwordLabel = 'Password';
static const loginButton = 'Login';
//forgot password
static const String forgotPasswordTitle = 'Forgot Password';
static const String forgotPasswordSubtitle =
'Enter your registered email and company ID and submit your request.';
static const String emailAddressHint = 'Email Address';
static const String backToSignInButton = 'Back to Sign In';
static const String resetLink = 'Reset Link';
//Home
static const String home = 'Home';
static const String partnership = 'Partnership';
static const String selfApply = 'Self-apply';
static const String contracting = 'Contracting';
static const String tenderSubmitted = 'Tenders submitted';
static const String approvedTenders = 'Approved tenders';
static const String tenderValue = 'Tender Value';
static const String thunderStatus = 'Thunder status';
static const String likedTenders = 'Liked Tenders';
static const String yourTenders = 'Your tenders';
static const String recommendation = 'Recommendation';
static const String welcome = 'Welcome';
static const String tenderDeadline = 'Deadline';
static const String recommendedTenders = 'Recommended Tenders';
//Tenders
static const String tendersTitle = 'Tenders';
static const String tenderSeeMore = 'See More';
static const String reject = 'Reject';
static const String submit = 'Submit';
static const String dislike = 'Dislike';
static const String like = 'Like';
//profile
static const String profile = 'Profile';
static const String settings = 'Settings';
static const String appTheme = 'App Theme';
static const String companyName = 'Company Name';
static const String nationalId = 'National ID';
static const String registrationNumber = 'Registration No.';
static const String businessType = 'Business Type';
static const String founded = 'Founded';
static const String logout = 'Logout';
//your tenders
static const String yourTendersTitle = 'Your tenders';
static const filter = 'Filter';
static const selectDateRange = 'Select date range';
static const status = 'Status';
static const all = 'All';
static const likeTenders = 'Like tenders';
static const dislikeTenders = 'Dislike tenders';
static const tendersSubmitted = 'Tenders submitted';
static const confirm = 'Confirm';
static const startDate = 'YYYY/MM/DD';
static const endDate = 'YYYY/MM/DD';
// Tender Detail Page
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';
}
@@ -2,9 +2,12 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:tm_app/core/constants/assets.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/theme/colors.dart';
import 'package:tm_app/core/utils/size_config.dart'; import 'package:tm_app/core/utils/size_config.dart';
import 'package:tm_app/views/profile/strings/profile_strings.dart';
import '../../../views/home/strings/home_strings.dart';
import '../../../views/tenders/strings/tenders_strings.dart';
class MobileShellPage extends StatelessWidget { class MobileShellPage extends StatelessWidget {
const MobileShellPage({ const MobileShellPage({
@@ -31,7 +34,7 @@ class MobileShellPage extends StatelessWidget {
children: [ children: [
_bottomNavigationItem( _bottomNavigationItem(
context: context, context: context,
text: AppStrings.home, text: HomeStrings.home,
isActive: navigationShell.currentIndex == 0, isActive: navigationShell.currentIndex == 0,
onTap: () => onTap(0), onTap: () => onTap(0),
iconPath: AssetsManager.home, iconPath: AssetsManager.home,
@@ -39,7 +42,7 @@ class MobileShellPage extends StatelessWidget {
), ),
_bottomNavigationItem( _bottomNavigationItem(
context: context, context: context,
text: AppStrings.tendersTitle, text: TendersStrings.tendersTitle,
isActive: navigationShell.currentIndex == 1, isActive: navigationShell.currentIndex == 1,
onTap: () => onTap(1), onTap: () => onTap(1),
iconPath: AssetsManager.tenders, iconPath: AssetsManager.tenders,
@@ -47,7 +50,7 @@ class MobileShellPage extends StatelessWidget {
), ),
_bottomNavigationItem( _bottomNavigationItem(
context: context, context: context,
text: AppStrings.profile, text: ProfileStrings.profileTitle,
isActive: navigationShell.currentIndex == 2, isActive: navigationShell.currentIndex == 2,
onTap: () => onTap(2), onTap: () => onTap(2),
iconPath: AssetsManager.profile, iconPath: AssetsManager.profile,
@@ -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_card.dart';
import 'package:tm_app/views/detail/widgets/tender_detail_header.dart'; import 'package:tm_app/views/detail/widgets/tender_detail_header.dart';
import '../../../core/constants/strings.dart';
import '../../../core/routes/app_routes.dart'; import '../../../core/routes/app_routes.dart';
import '../../shared/desktop_navigation_widget.dart'; import '../../shared/desktop_navigation_widget.dart';
import '../strings/tender_details_strings.dart';
class TenderDetailDesktopPage extends StatefulWidget { class TenderDetailDesktopPage extends StatefulWidget {
final String tenderId; final String tenderId;
@@ -34,28 +34,36 @@ class _TenderDetailDesktopPageState extends State<TenderDetailDesktopPage> {
viewModel.status == 'submitted' && viewModel.status == 'submitted' &&
viewModel.approvalStatus == true) { viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(AppStrings.tenderSubmittedSuccessfully)), SnackBar(
content: Text(TenderDetailsStrings.tenderSubmittedSuccessfully),
),
); );
} }
if (viewModel.status.isNotEmpty && if (viewModel.status.isNotEmpty &&
viewModel.status == 'unsubmitted' && viewModel.status == 'unsubmitted' &&
viewModel.approvalStatus == true) { viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(AppStrings.tenderUnsubmittedSuccessfully)), SnackBar(
content: Text(TenderDetailsStrings.tenderUnsubmittedSuccessfully),
),
); );
} }
if (viewModel.status.isNotEmpty && if (viewModel.status.isNotEmpty &&
viewModel.status == 'rejected' && viewModel.status == 'rejected' &&
viewModel.approvalStatus == true) { viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(AppStrings.tenderRejectedSuccessfully)), SnackBar(
content: Text(TenderDetailsStrings.tenderRejectedSuccessfully),
),
); );
} }
if (viewModel.status.isNotEmpty && if (viewModel.status.isNotEmpty &&
viewModel.status == 'unrejected' && viewModel.status == 'unrejected' &&
viewModel.approvalStatus == true) { viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(AppStrings.tenderUnrejectedSuccessfully)), SnackBar(
content: Text(TenderDetailsStrings.tenderUnrejectedSuccessfully),
),
); );
} }
if (viewModel.approvalStatus != false && viewModel.errorMessage != null) { if (viewModel.approvalStatus != false && viewModel.errorMessage != null) {
@@ -98,7 +106,9 @@ class _TenderDetailDesktopPageState extends State<TenderDetailDesktopPage> {
final detail = tenderViewModel.tenderDetail; final detail = tenderViewModel.tenderDetail;
if (detail == null) { if (detail == null) {
return const Center(child: Text(AppStrings.tenderNoData)); return const Center(
child: Text(TenderDetailsStrings.tenderNoData),
);
} }
return Column( return Column(
+20 -7
View File
@@ -1,10 +1,10 @@
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.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/theme/colors.dart';
import 'package:tm_app/core/utils/size_config.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/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_action.dart';
import 'package:tm_app/views/detail/widgets/tender_detail_card.dart'; 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/detail/widgets/tender_detail_header.dart';
@@ -32,28 +32,36 @@ class _TenderDetailMobilePageState extends State<TenderDetailMobilePage> {
viewModel.status == 'submitted' && viewModel.status == 'submitted' &&
viewModel.approvalStatus == true) { viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(AppStrings.tenderSubmittedSuccessfully)), SnackBar(
content: Text(TenderDetailsStrings.tenderSubmittedSuccessfully),
),
); );
} }
if (viewModel.status.isNotEmpty && if (viewModel.status.isNotEmpty &&
viewModel.status == 'unsubmitted' && viewModel.status == 'unsubmitted' &&
viewModel.approvalStatus == true) { viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(AppStrings.tenderUnsubmittedSuccessfully)), SnackBar(
content: Text(TenderDetailsStrings.tenderUnsubmittedSuccessfully),
),
); );
} }
if (viewModel.status.isNotEmpty && if (viewModel.status.isNotEmpty &&
viewModel.status == 'rejected' && viewModel.status == 'rejected' &&
viewModel.approvalStatus == true) { viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(AppStrings.tenderRejectedSuccessfully)), SnackBar(
content: Text(TenderDetailsStrings.tenderRejectedSuccessfully),
),
); );
} }
if (viewModel.status.isNotEmpty && if (viewModel.status.isNotEmpty &&
viewModel.status == 'unrejected' && viewModel.status == 'unrejected' &&
viewModel.approvalStatus == true) { viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(AppStrings.tenderUnrejectedSuccessfully)), SnackBar(
content: Text(TenderDetailsStrings.tenderUnrejectedSuccessfully),
),
); );
} }
if (viewModel.approvalStatus != false && viewModel.errorMessage != null) { if (viewModel.approvalStatus != false && viewModel.errorMessage != null) {
@@ -86,7 +94,10 @@ class _TenderDetailMobilePageState extends State<TenderDetailMobilePage> {
}, },
child: Scaffold( child: Scaffold(
backgroundColor: AppColors.backgroundColor, backgroundColor: AppColors.backgroundColor,
appBar: appBar(context: context, title: AppStrings.tenderDetailTitle), appBar: appBar(
context: context,
title: TenderDetailsStrings.tenderDetailTitle,
),
body: Consumer<TenderDetailViewModel>( body: Consumer<TenderDetailViewModel>(
builder: (context, tenderViewModel, child) { builder: (context, tenderViewModel, child) {
if (tenderViewModel.isLoading) { if (tenderViewModel.isLoading) {
@@ -101,7 +112,9 @@ class _TenderDetailMobilePageState extends State<TenderDetailMobilePage> {
final detail = tenderViewModel.tenderDetail; final detail = tenderViewModel.tenderDetail;
if (detail == null) { if (detail == null) {
return const Center(child: Text(AppStrings.tenderNoData)); return const Center(
child: Text(TenderDetailsStrings.tenderNoData),
);
} }
return SingleChildScrollView( 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/detail/widgets/tender_detail_header.dart';
import 'package:tm_app/views/shared/tablet_navigation_widget.dart'; import 'package:tm_app/views/shared/tablet_navigation_widget.dart';
import '../../../core/constants/strings.dart';
import '../../../core/routes/app_routes.dart'; import '../../../core/routes/app_routes.dart';
import '../strings/tender_details_strings.dart';
class TenderDetailTabletPage extends StatefulWidget { class TenderDetailTabletPage extends StatefulWidget {
final String tenderId; final String tenderId;
@@ -37,28 +37,36 @@ class _TenderDetailTabletPageState extends State<TenderDetailTabletPage> {
viewModel.status == 'submitted' && viewModel.status == 'submitted' &&
viewModel.approvalStatus == true) { viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(AppStrings.tenderSubmittedSuccessfully)), SnackBar(
content: Text(TenderDetailsStrings.tenderSubmittedSuccessfully),
),
); );
} }
if (viewModel.status.isNotEmpty && if (viewModel.status.isNotEmpty &&
viewModel.status == 'unsubmitted' && viewModel.status == 'unsubmitted' &&
viewModel.approvalStatus == true) { viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(AppStrings.tenderUnsubmittedSuccessfully)), SnackBar(
content: Text(TenderDetailsStrings.tenderUnsubmittedSuccessfully),
),
); );
} }
if (viewModel.status.isNotEmpty && if (viewModel.status.isNotEmpty &&
viewModel.status == 'rejected' && viewModel.status == 'rejected' &&
viewModel.approvalStatus == true) { viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(AppStrings.tenderRejectedSuccessfully)), SnackBar(
content: Text(TenderDetailsStrings.tenderRejectedSuccessfully),
),
); );
} }
if (viewModel.status.isNotEmpty && if (viewModel.status.isNotEmpty &&
viewModel.status == 'unrejected' && viewModel.status == 'unrejected' &&
viewModel.approvalStatus == true) { viewModel.approvalStatus == true) {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(AppStrings.tenderUnrejectedSuccessfully)), SnackBar(
content: Text(TenderDetailsStrings.tenderUnrejectedSuccessfully),
),
); );
} }
if (viewModel.approvalStatus != false && viewModel.errorMessage != null) { if (viewModel.approvalStatus != false && viewModel.errorMessage != null) {
@@ -149,7 +157,9 @@ class _TenderDetailTabletPageState extends State<TenderDetailTabletPage> {
final detail = tenderViewModel.tenderDetail; final detail = tenderViewModel.tenderDetail;
if (detail == null) { if (detail == null) {
return const Center(child: Text(AppStrings.tenderNoData)); return const Center(
child: Text(TenderDetailsStrings.tenderNoData),
);
} }
return SingleChildScrollView( return SingleChildScrollView(
child: Center( 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/theme/colors.dart';
import 'package:tm_app/core/utils/date_utils.dart'; import 'package:tm_app/core/utils/date_utils.dart';
import 'package:tm_app/core/utils/size_config.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'; import '../../../data/services/model/tender_data/tender_data.dart';
class DeadlineItem extends StatelessWidget { class DeadlineItem extends StatelessWidget {
@@ -44,7 +44,7 @@ class DeadlineItem extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Text( Text(
AppStrings.tenderApprovalText, TenderDetailsStrings.tenderApprovalText,
style: TextStyle( style: TextStyle(
color: AppColors.grey70, color: AppColors.grey70,
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
@@ -73,7 +73,7 @@ class DeadlineItem extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Text( Text(
AppStrings.tenderSubmissionText, TenderDetailsStrings.tenderSubmissionText,
style: TextStyle( style: TextStyle(
color: AppColors.grey70, color: AppColors.grey70,
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
@@ -120,7 +120,7 @@ class DeadlineItem extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Text( Text(
AppStrings.tenderApprovalText, TenderDetailsStrings.tenderApprovalText,
style: TextStyle( style: TextStyle(
color: AppColors.grey70, color: AppColors.grey70,
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
@@ -142,7 +142,7 @@ class DeadlineItem extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Text( Text(
AppStrings.tenderSubmissionText, TenderDetailsStrings.tenderSubmissionText,
style: TextStyle( style: TextStyle(
color: AppColors.grey70, color: AppColors.grey70,
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
@@ -1,6 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.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/theme/colors.dart';
import 'package:tm_app/core/utils/size_config.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/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 '../../../data/services/model/tender_data/tender_data.dart';
import '../../shared/select_submission_dialog.dart'; import '../../shared/select_submission_dialog.dart';
import '../strings/tender_details_strings.dart';
class TenderDetailActions extends StatelessWidget { class TenderDetailActions extends StatelessWidget {
final bool isScreenBig; final bool isScreenBig;
@@ -43,7 +43,7 @@ class TenderDetailActions extends StatelessWidget {
) )
: BaseButton( : BaseButton(
isEnabled: true, isEnabled: true,
text: AppStrings.tenderSubmitButton, text: TenderDetailsStrings.tenderSubmitButton,
backgroundColor: AppColors.primary30, backgroundColor: AppColors.primary30,
textColor: AppColors.mainBlue, textColor: AppColors.mainBlue,
onPressed: () { onPressed: () {
@@ -78,7 +78,7 @@ class TenderDetailActions extends StatelessWidget {
return viewModel.isRejectApprovalLoading return viewModel.isRejectApprovalLoading
? BaseButton( ? BaseButton(
isEnabled: true, isEnabled: true,
text: AppStrings.tenderRejectButton, text: TenderDetailsStrings.tenderRejectButton,
borderColor: AppColors.error, borderColor: AppColors.error,
textColor: AppColors.error, textColor: AppColors.error,
backgroundColor: AppColors.backgroundColor, backgroundColor: AppColors.backgroundColor,
@@ -87,7 +87,7 @@ class TenderDetailActions extends StatelessWidget {
) )
: BaseButton( : BaseButton(
isEnabled: true, isEnabled: true,
text: AppStrings.tenderRejectButton, text: TenderDetailsStrings.tenderRejectButton,
borderColor: AppColors.error, borderColor: AppColors.error,
textColor: AppColors.error, textColor: AppColors.error,
backgroundColor: AppColors.backgroundColor, backgroundColor: AppColors.backgroundColor,
@@ -115,7 +115,7 @@ class TenderDetailActions extends StatelessWidget {
return viewModel.isRejectApprovalLoading return viewModel.isRejectApprovalLoading
? BaseButton( ? BaseButton(
isEnabled: true, isEnabled: true,
text: AppStrings.tenderRejectButton, text: TenderDetailsStrings.tenderRejectButton,
textColor: AppColors.red10, textColor: AppColors.red10,
backgroundColor: AppColors.backgroundColor, backgroundColor: AppColors.backgroundColor,
borderWidth: 1, borderWidth: 1,
@@ -124,7 +124,7 @@ class TenderDetailActions extends StatelessWidget {
) )
: BaseButton( : BaseButton(
isEnabled: true, isEnabled: true,
text: AppStrings.tenderRejectButton, text: TenderDetailsStrings.tenderRejectButton,
textColor: AppColors.red10, textColor: AppColors.red10,
backgroundColor: AppColors.backgroundColor, backgroundColor: AppColors.backgroundColor,
borderWidth: 1, borderWidth: 1,
@@ -144,7 +144,7 @@ class TenderDetailActions extends StatelessWidget {
return viewModel.isSubmitApprovalLoading return viewModel.isSubmitApprovalLoading
? BaseButton( ? BaseButton(
isEnabled: true, isEnabled: true,
text: AppStrings.tenderSubmitButton, text: TenderDetailsStrings.tenderSubmitButton,
backgroundColor: AppColors.lightBlue, backgroundColor: AppColors.lightBlue,
textColor: AppColors.mainBlue, textColor: AppColors.mainBlue,
onPressed: () {}, onPressed: () {},
@@ -152,7 +152,7 @@ class TenderDetailActions extends StatelessWidget {
) )
: BaseButton( : BaseButton(
isEnabled: true, isEnabled: true,
text: AppStrings.tenderSubmitButton, text: TenderDetailsStrings.tenderSubmitButton,
backgroundColor: AppColors.lightBlue, backgroundColor: AppColors.lightBlue,
textColor: AppColors.mainBlue, textColor: AppColors.mainBlue,
onPressed: () { onPressed: () {
@@ -1,8 +1,8 @@
import 'package:flutter/material.dart'; 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/theme/colors.dart';
import 'package:tm_app/core/utils/size_config.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/data/services/model/tender_data/tender_data.dart';
import 'package:tm_app/views/detail/strings/tender_details_strings.dart';
class TenderDetailCard extends StatelessWidget { class TenderDetailCard extends StatelessWidget {
final TenderData detail; final TenderData detail;
@@ -25,7 +25,7 @@ class TenderDetailCard extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Text( Text(
AppStrings.tenderMatchProfile, TenderDetailsStrings.tenderMatchProfile,
style: TextStyle( style: TextStyle(
fontSize: 12.0.sp(), fontSize: 12.0.sp(),
color: AppColors.grey80, color: AppColors.grey80,
@@ -65,7 +65,7 @@ class TenderDetailCard extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Text( Text(
AppStrings.tenderIncompleteResume, TenderDetailsStrings.tenderIncompleteResume,
style: TextStyle( style: TextStyle(
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
fontSize: 16.0.sp(), fontSize: 16.0.sp(),
@@ -74,7 +74,7 @@ class TenderDetailCard extends StatelessWidget {
), ),
SizedBox(height: 4.0.h()), SizedBox(height: 4.0.h()),
Text( Text(
AppStrings.tenderNoExperience, TenderDetailsStrings.tenderNoExperience,
style: TextStyle( style: TextStyle(
fontSize: 14.0.sp(), fontSize: 14.0.sp(),
color: AppColors.grey70, color: AppColors.grey70,
@@ -1,6 +1,6 @@
import 'package:flutter/material.dart'; 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/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/deadline_item.dart';
import 'package:tm_app/views/detail/widgets/info_item.dart'; import 'package:tm_app/views/detail/widgets/info_item.dart';
@@ -19,22 +19,25 @@ class TenderDetailInfoSection extends StatelessWidget {
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
InfoItem(title: AppStrings.tenderIdLabel, value: detail.tenderId ?? ''), InfoItem(
title: TenderDetailsStrings.tenderIdLabel,
value: detail.tenderId ?? '',
),
DeadlineItem(detail: detail, isScreenBig: isScreenBig), DeadlineItem(detail: detail, isScreenBig: isScreenBig),
InfoItem( InfoItem(
title: AppStrings.tenderClientLabel, title: TenderDetailsStrings.tenderClientLabel,
value: detail.buyerOrganization!.name ?? '', value: detail.buyerOrganization!.name ?? '',
), ),
InfoItem( InfoItem(
title: AppStrings.estimatedValue, title: TenderDetailsStrings.estimatedValue,
value: '${detail.estimatedValue} ${detail.currency ?? ''}', value: '${detail.estimatedValue} ${detail.currency ?? ''}',
), ),
InfoItem( InfoItem(
title: AppStrings.duration, title: TenderDetailsStrings.duration,
value: '${detail.duration} ${detail.durationUnit ?? ''}', value: '${detail.duration} ${detail.durationUnit ?? ''}',
), ),
InfoItem( InfoItem(
title: AppStrings.tenderReferenceNumberLabel, title: TenderDetailsStrings.tenderReferenceNumberLabel,
value: detail.noticePublicationId ?? '', value: detail.noticePublicationId ?? '',
), ),
], ],
@@ -2,11 +2,11 @@ import 'package:country_flags/country_flags.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:tm_app/core/constants/assets.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/theme/colors.dart';
import 'package:tm_app/core/utils/size_config.dart'; import 'package:tm_app/core/utils/size_config.dart';
import '../../../data/services/model/tender_data/tender_data.dart'; import '../../../data/services/model/tender_data/tender_data.dart';
import '../strings/tender_details_strings.dart';
class TenderLocationSection extends StatelessWidget { class TenderLocationSection extends StatelessWidget {
final TenderData detail; final TenderData detail;
@@ -60,7 +60,7 @@ class TenderLocationSection extends StatelessWidget {
), ),
SizedBox(height: 8.0.h()), SizedBox(height: 8.0.h()),
Text( Text(
AppStrings.tenderLocationLabel, TenderDetailsStrings.tenderLocationLabel,
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16.0.sp()), style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16.0.sp()),
), ),
SizedBox(height: 8.0.h()), SizedBox(height: 8.0.h()),
@@ -5,11 +5,11 @@ import 'package:provider/provider.dart';
import 'package:tm_app/core/utils/size_config.dart'; import 'package:tm_app/core/utils/size_config.dart';
import '../../../core/constants/assets.dart'; import '../../../core/constants/assets.dart';
import '../../../core/constants/strings.dart';
import '../../../core/theme/colors.dart'; import '../../../core/theme/colors.dart';
import '../../../view_models/auth_view_model.dart'; import '../../../view_models/auth_view_model.dart';
import '../../login/widgets/login_textfield.dart'; import '../../login/widgets/login_textfield.dart';
import '../../shared/base_button.dart'; import '../../shared/base_button.dart';
import '../strings/forgot_password_strings.dart';
class DesktopForgotPasswordPage extends StatelessWidget { class DesktopForgotPasswordPage extends StatelessWidget {
const DesktopForgotPasswordPage({super.key}); const DesktopForgotPasswordPage({super.key});
@@ -41,7 +41,7 @@ class DesktopForgotPasswordPage extends StatelessWidget {
), ),
SizedBox(height: 72.0.h()), SizedBox(height: 72.0.h()),
Text( Text(
AppStrings.forgotPasswordTitle, ForgotPasswordStrings.forgotPasswordTitle,
style: TextStyle( style: TextStyle(
fontSize: 28.0.sp(), fontSize: 28.0.sp(),
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
@@ -50,7 +50,7 @@ class DesktopForgotPasswordPage extends StatelessWidget {
), ),
SizedBox(height: 16.0.h()), SizedBox(height: 16.0.h()),
Text( Text(
AppStrings.forgotPasswordSubtitle, ForgotPasswordStrings.forgotPasswordSubtitle,
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: TextStyle( style: TextStyle(
fontSize: 14.0.sp(), fontSize: 14.0.sp(),
@@ -62,13 +62,13 @@ class DesktopForgotPasswordPage extends StatelessWidget {
LoginTextField( LoginTextField(
controller: viewModel.emailController, controller: viewModel.emailController,
focusNode: viewModel.emailFocus, focusNode: viewModel.emailFocus,
label: AppStrings.emailAddressHint, label: ForgotPasswordStrings.emailAddressHint,
isPassword: false, isPassword: false,
), ),
SizedBox(height: 70.0.h()), SizedBox(height: 70.0.h()),
BaseButton( BaseButton(
isEnabled: false, isEnabled: false,
text: AppStrings.resetLink, text: ForgotPasswordStrings.resetLink,
onPressed: () async { onPressed: () async {
if (viewModel.isLoginEnabled) { if (viewModel.isLoginEnabled) {
await viewModel.login(); await viewModel.login();
@@ -81,7 +81,7 @@ class DesktopForgotPasswordPage extends StatelessWidget {
context.pop(); context.pop();
}, },
child: Text( child: Text(
AppStrings.backToSignInButton, ForgotPasswordStrings.backToSignInButton,
style: TextStyle( style: TextStyle(
fontSize: 14.0.sp(), fontSize: 14.0.sp(),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
@@ -5,11 +5,11 @@ import 'package:provider/provider.dart';
import 'package:tm_app/core/utils/size_config.dart'; import 'package:tm_app/core/utils/size_config.dart';
import '../../../core/constants/assets.dart'; import '../../../core/constants/assets.dart';
import '../../../core/constants/strings.dart';
import '../../../core/theme/colors.dart'; import '../../../core/theme/colors.dart';
import '../../../view_models/auth_view_model.dart'; import '../../../view_models/auth_view_model.dart';
import '../../login/widgets/login_textfield.dart'; import '../../login/widgets/login_textfield.dart';
import '../../shared/base_button.dart'; import '../../shared/base_button.dart';
import '../strings/forgot_password_strings.dart';
class MobileForgotPasswordPage extends StatelessWidget { class MobileForgotPasswordPage extends StatelessWidget {
const MobileForgotPasswordPage({super.key}); const MobileForgotPasswordPage({super.key});
@@ -36,7 +36,7 @@ class MobileForgotPasswordPage extends StatelessWidget {
), ),
SizedBox(height: 72.0.h()), SizedBox(height: 72.0.h()),
Text( Text(
AppStrings.forgotPasswordTitle, ForgotPasswordStrings.forgotPasswordTitle,
style: TextStyle( style: TextStyle(
fontSize: 28.0.sp(), fontSize: 28.0.sp(),
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
@@ -45,7 +45,7 @@ class MobileForgotPasswordPage extends StatelessWidget {
), ),
SizedBox(height: 16.0.h()), SizedBox(height: 16.0.h()),
Text( Text(
AppStrings.forgotPasswordSubtitle, ForgotPasswordStrings.forgotPasswordSubtitle,
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: TextStyle( style: TextStyle(
fontSize: 14.0.sp(), fontSize: 14.0.sp(),
@@ -57,13 +57,13 @@ class MobileForgotPasswordPage extends StatelessWidget {
LoginTextField( LoginTextField(
controller: viewModel.emailController, controller: viewModel.emailController,
focusNode: viewModel.emailFocus, focusNode: viewModel.emailFocus,
label: AppStrings.emailAddressHint, label: ForgotPasswordStrings.emailAddressHint,
isPassword: false, isPassword: false,
), ),
SizedBox(height: 70.0.h()), SizedBox(height: 70.0.h()),
BaseButton( BaseButton(
isEnabled: false, isEnabled: false,
text: AppStrings.resetLink, text: ForgotPasswordStrings.resetLink,
onPressed: () async { onPressed: () async {
if (viewModel.isLoginEnabled) { if (viewModel.isLoginEnabled) {
await viewModel.login(); await viewModel.login();
@@ -75,7 +75,7 @@ class MobileForgotPasswordPage extends StatelessWidget {
context.pop(); context.pop();
}, },
child: Text( child: Text(
AppStrings.backToSignInButton, ForgotPasswordStrings.backToSignInButton,
style: TextStyle( style: TextStyle(
fontSize: 14.0.sp(), fontSize: 14.0.sp(),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
@@ -5,11 +5,11 @@ import 'package:provider/provider.dart';
import 'package:tm_app/core/utils/size_config.dart'; import 'package:tm_app/core/utils/size_config.dart';
import '../../../core/constants/assets.dart'; import '../../../core/constants/assets.dart';
import '../../../core/constants/strings.dart';
import '../../../core/theme/colors.dart'; import '../../../core/theme/colors.dart';
import '../../../view_models/auth_view_model.dart'; import '../../../view_models/auth_view_model.dart';
import '../../login/widgets/login_textfield.dart'; import '../../login/widgets/login_textfield.dart';
import '../../shared/base_button.dart'; import '../../shared/base_button.dart';
import '../strings/forgot_password_strings.dart';
class TabletForgotPasswordPage extends StatelessWidget { class TabletForgotPasswordPage extends StatelessWidget {
const TabletForgotPasswordPage({super.key}); const TabletForgotPasswordPage({super.key});
@@ -35,7 +35,7 @@ class TabletForgotPasswordPage extends StatelessWidget {
), ),
SizedBox(height: 72.0.h()), SizedBox(height: 72.0.h()),
Text( Text(
AppStrings.forgotPasswordTitle, ForgotPasswordStrings.forgotPasswordTitle,
style: TextStyle( style: TextStyle(
fontSize: 28.0.sp(), fontSize: 28.0.sp(),
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
@@ -44,7 +44,7 @@ class TabletForgotPasswordPage extends StatelessWidget {
), ),
SizedBox(height: 16.0.h()), SizedBox(height: 16.0.h()),
Text( Text(
AppStrings.forgotPasswordSubtitle, ForgotPasswordStrings.forgotPasswordSubtitle,
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: TextStyle( style: TextStyle(
fontSize: 14.0.sp(), fontSize: 14.0.sp(),
@@ -56,13 +56,13 @@ class TabletForgotPasswordPage extends StatelessWidget {
LoginTextField( LoginTextField(
controller: viewModel.emailController, controller: viewModel.emailController,
focusNode: viewModel.emailFocus, focusNode: viewModel.emailFocus,
label: AppStrings.emailAddressHint, label: ForgotPasswordStrings.emailAddressHint,
isPassword: false, isPassword: false,
), ),
SizedBox(height: 70.0.h()), SizedBox(height: 70.0.h()),
BaseButton( BaseButton(
isEnabled: false, isEnabled: false,
text: AppStrings.resetLink, text: ForgotPasswordStrings.resetLink,
onPressed: () async { onPressed: () async {
if (viewModel.isLoginEnabled) { if (viewModel.isLoginEnabled) {
await viewModel.login(); await viewModel.login();
@@ -75,7 +75,7 @@ class TabletForgotPasswordPage extends StatelessWidget {
context.pop(); context.pop();
}, },
child: Text( child: Text(
AppStrings.backToSignInButton, ForgotPasswordStrings.backToSignInButton,
style: TextStyle( style: TextStyle(
fontSize: 14.0.sp(), fontSize: 14.0.sp(),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
@@ -0,0 +1,11 @@
class ForgotPasswordStrings {
ForgotPasswordStrings._();
static const String forgotPassword = 'Forgot Password?';
static const String forgotPasswordTitle = 'Forgot Password';
static const String forgotPasswordSubtitle =
'Enter your registered email and company ID and submit your request.';
static const String emailAddressHint = 'Email Address';
static const String backToSignInButton = 'Back to Sign In';
static const String resetLink = 'Reset Link';
}
+9 -9
View File
@@ -1,13 +1,13 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:tm_app/core/constants/assets.dart'; import 'package:tm_app/core/constants/assets.dart';
import 'package:tm_app/core/constants/strings.dart';
import 'package:tm_app/core/routes/app_routes.dart'; import 'package:tm_app/core/routes/app_routes.dart';
import 'package:tm_app/core/theme/colors.dart'; import 'package:tm_app/core/theme/colors.dart';
import 'package:tm_app/core/utils/size_config.dart'; import 'package:tm_app/core/utils/size_config.dart';
import 'package:tm_app/view_models/home_view_model.dart'; import 'package:tm_app/view_models/home_view_model.dart';
import 'package:tm_app/views/shared/desktop_navigation_widget.dart'; import 'package:tm_app/views/shared/desktop_navigation_widget.dart';
import '../strings/home_strings.dart';
import '../widgets.dart'; import '../widgets.dart';
class DesktopHomePage extends StatelessWidget { class DesktopHomePage extends StatelessWidget {
@@ -107,7 +107,7 @@ class DesktopHomePage extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
ProgressBarColumn( ProgressBarColumn(
text: AppStrings.partnership, text: HomeStrings.partnership,
value: homeViewModel.partnershipPercent, value: homeViewModel.partnershipPercent,
amount: homeViewModel.partnershipPercent.toString(), amount: homeViewModel.partnershipPercent.toString(),
circularProgressIndicatorWidth: 176, circularProgressIndicatorWidth: 176,
@@ -115,7 +115,7 @@ class DesktopHomePage extends StatelessWidget {
), ),
SizedBox(width: 106), SizedBox(width: 106),
ProgressBarColumn( ProgressBarColumn(
text: AppStrings.selfApply, text: HomeStrings.selfApply,
value: homeViewModel.selfApplyPercent, value: homeViewModel.selfApplyPercent,
amount: homeViewModel.selfApplyPercent.toString(), amount: homeViewModel.selfApplyPercent.toString(),
circularProgressIndicatorWidth: 176, circularProgressIndicatorWidth: 176,
@@ -136,7 +136,7 @@ class DesktopHomePage extends StatelessWidget {
child: TenderCard( child: TenderCard(
backgroundColor: AppColors.primary20, backgroundColor: AppColors.primary20,
iconPath: AssetsManager.arrows, iconPath: AssetsManager.arrows,
title: AppStrings.tenderSubmitted, title: HomeStrings.tenderSubmitted,
amount: amount:
homeViewModel homeViewModel
.tenderApprovalsStateResponse! .tenderApprovalsStateResponse!
@@ -158,7 +158,7 @@ class DesktopHomePage extends StatelessWidget {
child: TenderCard( child: TenderCard(
backgroundColor: AppColors.primary10, backgroundColor: AppColors.primary10,
iconPath: AssetsManager.approve, iconPath: AssetsManager.approve,
title: AppStrings.approvedTenders, title: HomeStrings.approvedTenders,
amount: '0', amount: '0',
textColor: AppColors.jellyBean, textColor: AppColors.jellyBean,
enableTap: true, enableTap: true,
@@ -173,7 +173,7 @@ class DesktopHomePage extends StatelessWidget {
TenderCard( TenderCard(
backgroundColor: AppColors.orange10, backgroundColor: AppColors.orange10,
iconPath: AssetsManager.shield, iconPath: AssetsManager.shield,
title: AppStrings.tenderValue, title: HomeStrings.tenderValue,
amount: '3', amount: '3',
textColor: AppColors.orange, textColor: AppColors.orange,
enableTap: true, enableTap: true,
@@ -185,7 +185,7 @@ class DesktopHomePage extends StatelessWidget {
TenderCard( TenderCard(
backgroundColor: AppColors.grey10, backgroundColor: AppColors.grey10,
iconPath: AssetsManager.thumbLike, iconPath: AssetsManager.thumbLike,
title: AppStrings.likedTenders, title: HomeStrings.likedTenders,
amount: homeViewModel.feedbackStats?.totalLikes.toString() ?? '0', amount: homeViewModel.feedbackStats?.totalLikes.toString() ?? '0',
textColor: AppColors.grey80, textColor: AppColors.grey80,
enableTap: false, enableTap: false,
@@ -205,8 +205,8 @@ class DesktopHomePage extends StatelessWidget {
alignment: Alignment.centerLeft, alignment: Alignment.centerLeft,
child: Text( child: Text(
isYourTenders isYourTenders
? AppStrings.yourTenders ? HomeStrings.yourTenders
: AppStrings.recommendedTenders, : HomeStrings.recommendedTenders,
style: TextStyle( style: TextStyle(
fontSize: 18.0.sp(), fontSize: 18.0.sp(),
fontWeight: FontWeight.w700, fontWeight: FontWeight.w700,
+11 -9
View File
@@ -1,7 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:tm_app/core/constants/assets.dart'; import 'package:tm_app/core/constants/assets.dart';
import 'package:tm_app/core/constants/strings.dart';
import 'package:tm_app/core/routes/app_routes.dart'; import 'package:tm_app/core/routes/app_routes.dart';
import 'package:tm_app/core/theme/colors.dart'; import 'package:tm_app/core/theme/colors.dart';
import 'package:tm_app/core/utils/size_config.dart'; import 'package:tm_app/core/utils/size_config.dart';
@@ -9,6 +8,7 @@ import 'package:tm_app/data/services/model/tender_approvals_state_response/tende
import 'package:tm_app/view_models/home_view_model.dart'; import 'package:tm_app/view_models/home_view_model.dart';
import 'package:tm_app/views/shared/tender_app_bar.dart'; import 'package:tm_app/views/shared/tender_app_bar.dart';
import '../strings/home_strings.dart';
import '../widgets.dart'; import '../widgets.dart';
class MobileHomePage extends StatelessWidget { class MobileHomePage extends StatelessWidget {
@@ -17,7 +17,7 @@ class MobileHomePage extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: tenderMobileAppBar(title: AppStrings.home), appBar: tenderMobileAppBar(title: HomeStrings.home),
body: Consumer<HomeViewModel>( body: Consumer<HomeViewModel>(
builder: (context, homeViewModel, child) { builder: (context, homeViewModel, child) {
if (homeViewModel.isLoading) { if (homeViewModel.isLoading) {
@@ -71,13 +71,13 @@ class MobileHomePage extends StatelessWidget {
Spacer(), Spacer(),
SizedBox(width: 20.0.w()), SizedBox(width: 20.0.w()),
ProgressBarColumn( ProgressBarColumn(
text: AppStrings.partnership, text: HomeStrings.partnership,
value: homeViewModel.partnershipPercent, value: homeViewModel.partnershipPercent,
amount: homeViewModel.partnershipPercent.toString(), amount: homeViewModel.partnershipPercent.toString(),
), ),
Spacer(), Spacer(),
ProgressBarColumn( ProgressBarColumn(
text: AppStrings.selfApply, text: HomeStrings.selfApply,
value: homeViewModel.selfApplyPercent, value: homeViewModel.selfApplyPercent,
amount: homeViewModel.selfApplyPercent.toString(), amount: homeViewModel.selfApplyPercent.toString(),
), ),
@@ -100,7 +100,7 @@ class MobileHomePage extends StatelessWidget {
TenderCard( TenderCard(
backgroundColor: AppColors.primary20, backgroundColor: AppColors.primary20,
iconPath: AssetsManager.arrows, iconPath: AssetsManager.arrows,
title: AppStrings.tenderSubmitted, title: HomeStrings.tenderSubmitted,
amount: amount:
tenderApprovalsStateResponse.data!.submittedTenders.toString(), tenderApprovalsStateResponse.data!.submittedTenders.toString(),
textColor: AppColors.mainBlue, textColor: AppColors.mainBlue,
@@ -112,7 +112,7 @@ class MobileHomePage extends StatelessWidget {
TenderCard( TenderCard(
backgroundColor: AppColors.primary10, backgroundColor: AppColors.primary10,
iconPath: AssetsManager.approve, iconPath: AssetsManager.approve,
title: AppStrings.approvedTenders, title: HomeStrings.approvedTenders,
amount: '0', amount: '0',
textColor: AppColors.jellyBean, textColor: AppColors.jellyBean,
@@ -136,7 +136,7 @@ class MobileHomePage extends StatelessWidget {
TenderCard( TenderCard(
backgroundColor: AppColors.orange10, backgroundColor: AppColors.orange10,
iconPath: AssetsManager.shield, iconPath: AssetsManager.shield,
title: AppStrings.tenderValue, title: HomeStrings.tenderValue,
amount: '3', amount: '3',
textColor: AppColors.orange, textColor: AppColors.orange,
enableTap: true, enableTap: true,
@@ -145,7 +145,7 @@ class MobileHomePage extends StatelessWidget {
TenderCard( TenderCard(
backgroundColor: AppColors.grey10, backgroundColor: AppColors.grey10,
iconPath: AssetsManager.thumbLike, iconPath: AssetsManager.thumbLike,
title: AppStrings.likedTenders, title: HomeStrings.likedTenders,
amount: homeViewModel.feedbackStats?.totalLikes.toString() ?? '0', amount: homeViewModel.feedbackStats?.totalLikes.toString() ?? '0',
textColor: AppColors.grey80, textColor: AppColors.grey80,
enableTap: false, enableTap: false,
@@ -161,7 +161,9 @@ class MobileHomePage extends StatelessWidget {
return Padding( return Padding(
padding: EdgeInsets.symmetric(horizontal: 24.0.w()), padding: EdgeInsets.symmetric(horizontal: 24.0.w()),
child: Text( child: Text(
isYourTenders ? AppStrings.yourTenders : AppStrings.recommendedTenders, isYourTenders
? HomeStrings.yourTenders
: HomeStrings.recommendedTenders,
style: TextStyle( style: TextStyle(
fontSize: 18.0.sp(), fontSize: 18.0.sp(),
fontWeight: FontWeight.w700, fontWeight: FontWeight.w700,
+8 -8
View File
@@ -2,7 +2,6 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:tm_app/core/constants/strings.dart';
import 'package:tm_app/core/routes/app_routes.dart'; import 'package:tm_app/core/routes/app_routes.dart';
import 'package:tm_app/core/theme/colors.dart'; import 'package:tm_app/core/theme/colors.dart';
import 'package:tm_app/core/utils/size_config.dart'; import 'package:tm_app/core/utils/size_config.dart';
@@ -11,6 +10,7 @@ import 'package:tm_app/view_models/home_view_model.dart';
import 'package:tm_app/views/shared/tablet_navigation_widget.dart'; import 'package:tm_app/views/shared/tablet_navigation_widget.dart';
import '../../../core/constants/assets.dart'; import '../../../core/constants/assets.dart';
import '../strings/home_strings.dart';
import '../widgets.dart'; import '../widgets.dart';
class TabletHomePage extends StatelessWidget { class TabletHomePage extends StatelessWidget {
@@ -128,7 +128,7 @@ class TabletHomePage extends StatelessWidget {
Spacer(), Spacer(),
SizedBox(width: 20.0.w()), SizedBox(width: 20.0.w()),
ProgressBarColumn( ProgressBarColumn(
text: AppStrings.partnership, text: HomeStrings.partnership,
value: homeViewModel.partnershipPercent, value: homeViewModel.partnershipPercent,
amount: homeViewModel.partnershipPercent.toString(), amount: homeViewModel.partnershipPercent.toString(),
circularProgressIndicatorWidth: 176.0, circularProgressIndicatorWidth: 176.0,
@@ -137,7 +137,7 @@ class TabletHomePage extends StatelessWidget {
), ),
Spacer(), Spacer(),
ProgressBarColumn( ProgressBarColumn(
text: AppStrings.selfApply, text: HomeStrings.selfApply,
value: homeViewModel.selfApplyPercent, value: homeViewModel.selfApplyPercent,
amount: homeViewModel.selfApplyPercent.toString(), amount: homeViewModel.selfApplyPercent.toString(),
circularProgressIndicatorWidth: 176.0, circularProgressIndicatorWidth: 176.0,
@@ -161,7 +161,7 @@ class TabletHomePage extends StatelessWidget {
child: TenderCard( child: TenderCard(
backgroundColor: AppColors.primary20, backgroundColor: AppColors.primary20,
iconPath: AssetsManager.arrows, iconPath: AssetsManager.arrows,
title: AppStrings.tenderSubmitted, title: HomeStrings.tenderSubmitted,
amount: amount:
tenderApprovalsStateResponse.data!.submittedTenders.toString(), tenderApprovalsStateResponse.data!.submittedTenders.toString(),
@@ -179,7 +179,7 @@ class TabletHomePage extends StatelessWidget {
child: TenderCard( child: TenderCard(
backgroundColor: AppColors.primary10, backgroundColor: AppColors.primary10,
iconPath: AssetsManager.approve, iconPath: AssetsManager.approve,
title: AppStrings.approvedTenders, title: HomeStrings.approvedTenders,
amount: '0', amount: '0',
textColor: AppColors.jellyBean, textColor: AppColors.jellyBean,
@@ -204,7 +204,7 @@ class TabletHomePage extends StatelessWidget {
child: TenderCard( child: TenderCard(
backgroundColor: AppColors.orange10, backgroundColor: AppColors.orange10,
iconPath: AssetsManager.shield, iconPath: AssetsManager.shield,
title: AppStrings.tenderValue, title: HomeStrings.tenderValue,
amount: '3', amount: '3',
textColor: AppColors.orange, textColor: AppColors.orange,
enableTap: true, enableTap: true,
@@ -218,7 +218,7 @@ class TabletHomePage extends StatelessWidget {
child: TenderCard( child: TenderCard(
backgroundColor: AppColors.grey10, backgroundColor: AppColors.grey10,
iconPath: AssetsManager.thumbLike, iconPath: AssetsManager.thumbLike,
title: AppStrings.likedTenders, title: HomeStrings.likedTenders,
amount: homeViewModel.feedbackStats?.totalLikes.toString() ?? '0', amount: homeViewModel.feedbackStats?.totalLikes.toString() ?? '0',
textColor: AppColors.grey80, textColor: AppColors.grey80,
enableTap: false, enableTap: false,
@@ -234,7 +234,7 @@ class TabletHomePage extends StatelessWidget {
Widget _yourTenderText(HomeViewModel homeViewModel) { Widget _yourTenderText(HomeViewModel homeViewModel) {
final isYourTenders = homeViewModel.data?.data?.isNotEmpty ?? false; final isYourTenders = homeViewModel.data?.data?.isNotEmpty ?? false;
return Text( return Text(
isYourTenders ? AppStrings.yourTenders : AppStrings.recommendedTenders, isYourTenders ? HomeStrings.yourTenders : HomeStrings.recommendedTenders,
style: TextStyle( style: TextStyle(
fontSize: 18.0.sp(), fontSize: 18.0.sp(),
fontWeight: FontWeight.w700, fontWeight: FontWeight.w700,
+19
View File
@@ -0,0 +1,19 @@
class HomeStrings {
HomeStrings._();
static const String home = 'Home';
static const String partnership = 'Partnership';
static const String selfApply = 'Self-apply';
static const String contracting = 'Contracting';
static const String tenderSubmitted = 'Tenders submitted';
static const String approvedTenders = 'Approved tenders';
static const String tenderValue = 'Tender Value';
static const String thunderStatus = 'Thunder status';
static const String likedTenders = 'Liked Tenders';
static const String yourTenders = 'Your tenders';
static const String recommendation = 'Recommendation';
static const String welcome = 'Welcome';
static const String tenderDeadline = 'Deadline';
static const String recommendedTenders = 'Recommended Tenders';
static const String tenderMatchProfile = 'Match with your profile';
}
+2 -2
View File
@@ -1,8 +1,8 @@
import 'package:country_flags/country_flags.dart'; import 'package:country_flags/country_flags.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.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/data/services/model/tender_data/tender_data.dart';
import 'package:tm_app/views/home/strings/home_strings.dart';
import 'package:tm_app/views/home/widgets/tender_card_progress_bar.dart'; import 'package:tm_app/views/home/widgets/tender_card_progress_bar.dart';
import '../../core/constants/assets.dart'; import '../../core/constants/assets.dart';
@@ -53,7 +53,7 @@ class TendersListItem extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Text( Text(
'${AppStrings.tenderDeadline} :', '${HomeStrings.tenderDeadline} :',
style: TextStyle( style: TextStyle(
fontSize: 15.0.sp(), fontSize: 15.0.sp(),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
@@ -1,10 +1,11 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:tm_app/core/constants/assets.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/theme/colors.dart';
import 'package:tm_app/core/utils/size_config.dart'; import 'package:tm_app/core/utils/size_config.dart';
import '../strings/home_strings.dart';
class NotificationCard extends StatelessWidget { class NotificationCard extends StatelessWidget {
const NotificationCard({super.key}); const NotificationCard({super.key});
@@ -26,7 +27,7 @@ class NotificationCard extends StatelessWidget {
SvgPicture.asset(AssetsManager.notification), SvgPicture.asset(AssetsManager.notification),
SizedBox(width: 8.0.w()), SizedBox(width: 8.0.w()),
Text( Text(
AppStrings.welcome, HomeStrings.welcome,
style: TextStyle( style: TextStyle(
fontSize: 16.0.sp(), fontSize: 16.0.sp(),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
@@ -1,7 +1,7 @@
import 'package:flutter/material.dart'; 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/theme/colors.dart';
import 'package:tm_app/core/utils/size_config.dart'; import 'package:tm_app/core/utils/size_config.dart';
import 'package:tm_app/views/home/strings/home_strings.dart';
class TenderCardProgressBar extends StatelessWidget { class TenderCardProgressBar extends StatelessWidget {
const TenderCardProgressBar({super.key}); const TenderCardProgressBar({super.key});
@@ -15,7 +15,7 @@ class TenderCardProgressBar extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Text( Text(
AppStrings.tenderMatchProfile, HomeStrings.tenderMatchProfile,
style: TextStyle( style: TextStyle(
fontSize: 12.0.sp(), fontSize: 12.0.sp(),
color: AppColors.grey80, color: AppColors.grey80,
@@ -6,10 +6,10 @@ import 'package:provider/provider.dart';
import 'package:tm_app/core/theme/colors.dart'; import 'package:tm_app/core/theme/colors.dart';
import '../../../core/constants/assets.dart'; import '../../../core/constants/assets.dart';
import '../../../core/constants/strings.dart';
import '../../../core/routes/app_routes.dart'; import '../../../core/routes/app_routes.dart';
import '../../../core/utils/size_config.dart'; import '../../../core/utils/size_config.dart';
import '../../../view_models/auth_view_model.dart'; import '../../../view_models/auth_view_model.dart';
import '../strings/login_strings.dart';
import '../widgets/widgets.dart'; import '../widgets/widgets.dart';
class LoginDesktopPage extends StatefulWidget { class LoginDesktopPage extends StatefulWidget {
@@ -73,7 +73,7 @@ class _LoginDesktopPageState extends State<LoginDesktopPage> {
LoginTextField( LoginTextField(
controller: viewModel.usernameController, controller: viewModel.usernameController,
focusNode: viewModel.usernameFocus, focusNode: viewModel.usernameFocus,
label: AppStrings.usernameLabel, label: LoginStrings.usernameLabel,
iconPath: AssetsManager.userIcon, iconPath: AssetsManager.userIcon,
fieldHeight: 60.0.h(), fieldHeight: 60.0.h(),
borderRedus: 12, borderRedus: 12,
@@ -83,7 +83,7 @@ class _LoginDesktopPageState extends State<LoginDesktopPage> {
LoginTextField( LoginTextField(
controller: viewModel.passwordController, controller: viewModel.passwordController,
focusNode: viewModel.passwordFocus, focusNode: viewModel.passwordFocus,
label: AppStrings.passwordLabel, label: LoginStrings.passwordLabel,
iconPath: AssetsManager.passwordIcon, iconPath: AssetsManager.passwordIcon,
prefixIconPadding: 7.0.w(), prefixIconPadding: 7.0.w(),
isPassword: true, isPassword: true,
@@ -114,7 +114,7 @@ class _LoginDesktopPageState extends State<LoginDesktopPage> {
ForgotPasswordRouteData().push(context); ForgotPasswordRouteData().push(context);
}, },
child: Text( child: Text(
AppStrings.forgotPassword, LoginStrings.forgotPassword,
style: TextStyle( style: TextStyle(
fontSize: 14.0.sp(), fontSize: 14.0.sp(),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
+4 -4
View File
@@ -6,9 +6,9 @@ import 'package:tm_app/core/routes/app_routes.dart';
import 'package:tm_app/core/theme/colors.dart'; import 'package:tm_app/core/theme/colors.dart';
import '../../../core/constants/assets.dart'; import '../../../core/constants/assets.dart';
import '../../../core/constants/strings.dart';
import '../../../core/utils/size_config.dart'; import '../../../core/utils/size_config.dart';
import '../../../view_models/auth_view_model.dart'; import '../../../view_models/auth_view_model.dart';
import '../strings/login_strings.dart';
import '../widgets/widgets.dart'; import '../widgets/widgets.dart';
class LoginMobilePage extends StatefulWidget { class LoginMobilePage extends StatefulWidget {
@@ -72,7 +72,7 @@ class _LoginMobilePageState extends State<LoginMobilePage> {
LoginTextField( LoginTextField(
controller: viewModel.usernameController, controller: viewModel.usernameController,
focusNode: viewModel.usernameFocus, focusNode: viewModel.usernameFocus,
label: AppStrings.usernameLabel, label: LoginStrings.usernameLabel,
iconPath: AssetsManager.userIcon, iconPath: AssetsManager.userIcon,
), ),
SizedBox(height: 16.0.h()), SizedBox(height: 16.0.h()),
@@ -80,7 +80,7 @@ class _LoginMobilePageState extends State<LoginMobilePage> {
LoginTextField( LoginTextField(
controller: viewModel.passwordController, controller: viewModel.passwordController,
focusNode: viewModel.passwordFocus, focusNode: viewModel.passwordFocus,
label: AppStrings.passwordLabel, label: LoginStrings.passwordLabel,
iconPath: AssetsManager.passwordIcon, iconPath: AssetsManager.passwordIcon,
isPassword: true, isPassword: true,
obscureText: viewModel.obscurePassword, obscureText: viewModel.obscurePassword,
@@ -110,7 +110,7 @@ class _LoginMobilePageState extends State<LoginMobilePage> {
ForgotPasswordRouteData().push(context); ForgotPasswordRouteData().push(context);
}, },
child: Text( child: Text(
AppStrings.forgotPassword, LoginStrings.forgotPassword,
style: TextStyle( style: TextStyle(
fontSize: 14.0.sp(), fontSize: 14.0.sp(),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
+4 -4
View File
@@ -4,10 +4,10 @@ import 'package:provider/provider.dart';
import 'package:tm_app/core/theme/colors.dart'; import 'package:tm_app/core/theme/colors.dart';
import '../../../core/constants/assets.dart'; import '../../../core/constants/assets.dart';
import '../../../core/constants/strings.dart';
import '../../../core/routes/app_routes.dart'; import '../../../core/routes/app_routes.dart';
import '../../../core/utils/size_config.dart'; import '../../../core/utils/size_config.dart';
import '../../../view_models/auth_view_model.dart'; import '../../../view_models/auth_view_model.dart';
import '../strings/login_strings.dart';
import '../widgets/widgets.dart'; import '../widgets/widgets.dart';
class LoginTabletPage extends StatefulWidget { class LoginTabletPage extends StatefulWidget {
@@ -65,7 +65,7 @@ class _LoginTabletPageState extends State<LoginTabletPage> {
LoginTextField( LoginTextField(
controller: viewModel.usernameController, controller: viewModel.usernameController,
focusNode: viewModel.usernameFocus, focusNode: viewModel.usernameFocus,
label: AppStrings.usernameLabel, label: LoginStrings.usernameLabel,
iconPath: AssetsManager.userIcon, iconPath: AssetsManager.userIcon,
fieldHeight: 60.0.h(), fieldHeight: 60.0.h(),
borderRedus: 12, borderRedus: 12,
@@ -75,7 +75,7 @@ class _LoginTabletPageState extends State<LoginTabletPage> {
LoginTextField( LoginTextField(
controller: viewModel.passwordController, controller: viewModel.passwordController,
focusNode: viewModel.passwordFocus, focusNode: viewModel.passwordFocus,
label: AppStrings.passwordLabel, label: LoginStrings.passwordLabel,
iconPath: AssetsManager.passwordIcon, iconPath: AssetsManager.passwordIcon,
prefixIconPadding: 4.0.w(), prefixIconPadding: 4.0.w(),
isPassword: true, isPassword: true,
@@ -107,7 +107,7 @@ class _LoginTabletPageState extends State<LoginTabletPage> {
ForgotPasswordRouteData().push(context); ForgotPasswordRouteData().push(context);
}, },
child: Text( child: Text(
AppStrings.forgotPassword, LoginStrings.forgotPassword,
style: TextStyle( style: TextStyle(
fontSize: 14.0.sp(), fontSize: 14.0.sp(),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
@@ -0,0 +1,8 @@
class LoginStrings {
static const signInTitle = 'Sign In';
static const signInSubtitle = 'Enter valid username & password to continue';
static const usernameLabel = 'User Name';
static const passwordLabel = 'Password';
static const loginButton = 'Login';
static const forgotPassword = 'Forgot Password?';
}
+3 -3
View File
@@ -1,8 +1,8 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:tm_app/core/theme/colors.dart'; import 'package:tm_app/core/theme/colors.dart';
import '../../../core/constants/strings.dart';
import '../../../core/utils/size_config.dart'; import '../../../core/utils/size_config.dart';
import '../strings/login_strings.dart';
class LoginTitle extends StatelessWidget { class LoginTitle extends StatelessWidget {
const LoginTitle({super.key}); const LoginTitle({super.key});
@@ -12,12 +12,12 @@ class LoginTitle extends StatelessWidget {
return Column( return Column(
children: [ children: [
Text( Text(
AppStrings.signInTitle, LoginStrings.signInTitle,
style: TextStyle(fontSize: 28.0.sp(), fontWeight: FontWeight.w700), style: TextStyle(fontSize: 28.0.sp(), fontWeight: FontWeight.w700),
), ),
SizedBox(height: 8.0.h()), SizedBox(height: 8.0.h()),
Text( Text(
AppStrings.signInSubtitle, LoginStrings.signInSubtitle,
style: TextStyle( style: TextStyle(
fontSize: 14.0.sp(), fontSize: 14.0.sp(),
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
+11 -10
View File
@@ -5,10 +5,11 @@ import 'package:tm_app/core/routes/app_routes.dart';
import 'package:tm_app/view_models/profile_view_model.dart'; import 'package:tm_app/view_models/profile_view_model.dart';
import '../../../core/constants/assets.dart'; import '../../../core/constants/assets.dart';
import '../../../core/constants/strings.dart'; import '../../../core/constants/common_strings.dart';
import '../../../core/theme/colors.dart'; import '../../../core/theme/colors.dart';
import '../../../core/utils/size_config.dart'; import '../../../core/utils/size_config.dart';
import '../../shared/desktop_navigation_widget.dart'; import '../../shared/desktop_navigation_widget.dart';
import '../strings/profile_strings.dart';
import '../widgets/theme_toggle.dart'; import '../widgets/theme_toggle.dart';
import '../widgets/title_description.dart'; import '../widgets/title_description.dart';
@@ -64,7 +65,7 @@ class _DesktopProfilePageState extends State<DesktopProfilePage> {
} }
if (viewModel.companyProfileData == null) { if (viewModel.companyProfileData == null) {
return Center(child: Text(AppStrings.noData)); return Center(child: Text(CommonStrings.noData));
} }
return Column( return Column(
@@ -100,24 +101,24 @@ class _DesktopProfilePageState extends State<DesktopProfilePage> {
children: [ children: [
SizedBox(height: 36.0.h()), SizedBox(height: 36.0.h()),
TitleDescription( TitleDescription(
title: AppStrings.companyName, title: ProfileStrings.companyName,
description: viewModel.companyProfileData!.name!, description: viewModel.companyProfileData!.name!,
), ),
TitleDescription( TitleDescription(
title: AppStrings.nationalId, title: ProfileStrings.nationalId,
description: viewModel.companyProfileData!.id!, description: viewModel.companyProfileData!.id!,
), ),
TitleDescription( TitleDescription(
title: AppStrings.registrationNumber, title: ProfileStrings.registrationNumber,
description: description:
viewModel.companyProfileData!.registrationNumber!, viewModel.companyProfileData!.registrationNumber!,
), ),
TitleDescription( TitleDescription(
title: AppStrings.businessType, title: ProfileStrings.businessType,
description: '-', description: '-',
), ),
TitleDescription( TitleDescription(
title: AppStrings.founded, title: ProfileStrings.founded,
description: description:
viewModel.companyProfileData!.foundedYear!.toString(), viewModel.companyProfileData!.foundedYear!.toString(),
), ),
@@ -126,7 +127,7 @@ class _DesktopProfilePageState extends State<DesktopProfilePage> {
Align( Align(
alignment: AlignmentDirectional.centerStart, alignment: AlignmentDirectional.centerStart,
child: Text( child: Text(
AppStrings.settings, ProfileStrings.settings,
style: TextStyle( style: TextStyle(
fontSize: 20.0.sp(), fontSize: 20.0.sp(),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
@@ -140,7 +141,7 @@ class _DesktopProfilePageState extends State<DesktopProfilePage> {
child: Row( child: Row(
children: [ children: [
Text( Text(
AppStrings.appTheme, ProfileStrings.appTheme,
style: TextStyle( style: TextStyle(
fontSize: 16.0.sp(), fontSize: 16.0.sp(),
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
@@ -178,7 +179,7 @@ class _DesktopProfilePageState extends State<DesktopProfilePage> {
), ),
alignment: Alignment.center, alignment: Alignment.center,
child: Text( child: Text(
AppStrings.logout, ProfileStrings.logout,
style: TextStyle( style: TextStyle(
fontSize: 14.0.sp(), fontSize: 14.0.sp(),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
+12 -11
View File
@@ -7,9 +7,10 @@ import 'package:tm_app/views/profile/widgets/theme_toggle.dart';
import 'package:tm_app/views/shared/tender_app_bar.dart'; import 'package:tm_app/views/shared/tender_app_bar.dart';
import '../../../core/constants/assets.dart'; import '../../../core/constants/assets.dart';
import '../../../core/constants/strings.dart'; import '../../../core/constants/common_strings.dart';
import '../../../core/theme/colors.dart'; import '../../../core/theme/colors.dart';
import '../../../core/utils/size_config.dart'; import '../../../core/utils/size_config.dart';
import '../strings/profile_strings.dart';
import '../widgets/title_description.dart'; import '../widgets/title_description.dart';
class MobileProfilePage extends StatefulWidget { class MobileProfilePage extends StatefulWidget {
@@ -52,7 +53,7 @@ class _MobileProfilePageState extends State<MobileProfilePage> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
backgroundColor: AppColors.backgroundColor, backgroundColor: AppColors.backgroundColor,
appBar: tenderMobileAppBar(title: AppStrings.profile), appBar: tenderMobileAppBar(title: ProfileStrings.profileTitle),
body: Consumer<ProfileViewModel>( body: Consumer<ProfileViewModel>(
builder: (context, viewModel, child) { builder: (context, viewModel, child) {
if (viewModel.isLoading) { if (viewModel.isLoading) {
@@ -66,7 +67,7 @@ class _MobileProfilePageState extends State<MobileProfilePage> {
} }
if (viewModel.companyProfileData == null) { if (viewModel.companyProfileData == null) {
return Center(child: Text(AppStrings.noData)); return Center(child: Text(CommonStrings.noData));
} }
return Padding( return Padding(
@@ -78,24 +79,24 @@ class _MobileProfilePageState extends State<MobileProfilePage> {
children: [ children: [
SizedBox(height: 36.0.h()), SizedBox(height: 36.0.h()),
TitleDescription( TitleDescription(
title: AppStrings.companyName, title: ProfileStrings.companyName,
description: viewModel.companyProfileData!.name!, description: viewModel.companyProfileData!.name!,
), ),
TitleDescription( TitleDescription(
title: AppStrings.nationalId, title: ProfileStrings.nationalId,
description: viewModel.companyProfileData!.id!, description: viewModel.companyProfileData!.id!,
), ),
TitleDescription( TitleDescription(
title: AppStrings.registrationNumber, title: ProfileStrings.registrationNumber,
description: description:
viewModel.companyProfileData!.registrationNumber!, viewModel.companyProfileData!.registrationNumber!,
), ),
TitleDescription( TitleDescription(
title: AppStrings.businessType, title: ProfileStrings.businessType,
description: '-', description: '-',
), ),
TitleDescription( TitleDescription(
title: AppStrings.founded, title: ProfileStrings.founded,
description: description:
viewModel.companyProfileData!.foundedYear!.toString(), viewModel.companyProfileData!.foundedYear!.toString(),
), ),
@@ -103,7 +104,7 @@ class _MobileProfilePageState extends State<MobileProfilePage> {
Align( Align(
alignment: AlignmentDirectional.centerStart, alignment: AlignmentDirectional.centerStart,
child: Text( child: Text(
AppStrings.settings, ProfileStrings.settings,
style: TextStyle( style: TextStyle(
fontSize: 20.0.sp(), fontSize: 20.0.sp(),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
@@ -117,7 +118,7 @@ class _MobileProfilePageState extends State<MobileProfilePage> {
child: Row( child: Row(
children: [ children: [
Text( Text(
AppStrings.appTheme, ProfileStrings.appTheme,
style: TextStyle( style: TextStyle(
fontSize: 16.0.sp(), fontSize: 16.0.sp(),
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
@@ -153,7 +154,7 @@ class _MobileProfilePageState extends State<MobileProfilePage> {
), ),
alignment: Alignment.center, alignment: Alignment.center,
child: Text( child: Text(
AppStrings.logout, ProfileStrings.logout,
style: TextStyle( style: TextStyle(
fontSize: 14.0.sp(), fontSize: 14.0.sp(),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
+11 -10
View File
@@ -3,13 +3,14 @@ import 'package:flutter_svg/svg.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:tm_app/core/constants/assets.dart'; import 'package:tm_app/core/constants/assets.dart';
import 'package:tm_app/core/constants/strings.dart'; import 'package:tm_app/core/constants/common_strings.dart';
import 'package:tm_app/core/routes/app_routes.dart'; import 'package:tm_app/core/routes/app_routes.dart';
import 'package:tm_app/view_models/profile_view_model.dart'; import 'package:tm_app/view_models/profile_view_model.dart';
import '../../../core/theme/colors.dart'; import '../../../core/theme/colors.dart';
import '../../../core/utils/size_config.dart'; import '../../../core/utils/size_config.dart';
import '../../shared/tablet_navigation_widget.dart'; import '../../shared/tablet_navigation_widget.dart';
import '../strings/profile_strings.dart';
import '../widgets/theme_toggle.dart'; import '../widgets/theme_toggle.dart';
import '../widgets/title_description.dart'; import '../widgets/title_description.dart';
@@ -64,7 +65,7 @@ class _TabletProfilePageState extends State<TabletProfilePage> {
} }
if (viewModel.companyProfileData == null) { if (viewModel.companyProfileData == null) {
return Center(child: Text(AppStrings.noData)); return Center(child: Text(CommonStrings.noData));
} }
return SafeArea( return SafeArea(
@@ -124,24 +125,24 @@ class _TabletProfilePageState extends State<TabletProfilePage> {
children: [ children: [
SizedBox(height: 128.0.h()), SizedBox(height: 128.0.h()),
TitleDescription( TitleDescription(
title: AppStrings.companyName, title: ProfileStrings.companyName,
description: viewModel.companyProfileData!.name!, description: viewModel.companyProfileData!.name!,
), ),
TitleDescription( TitleDescription(
title: AppStrings.nationalId, title: ProfileStrings.nationalId,
description: viewModel.companyProfileData!.id!, description: viewModel.companyProfileData!.id!,
), ),
TitleDescription( TitleDescription(
title: AppStrings.registrationNumber, title: ProfileStrings.registrationNumber,
description: description:
viewModel.companyProfileData!.registrationNumber!, viewModel.companyProfileData!.registrationNumber!,
), ),
TitleDescription( TitleDescription(
title: AppStrings.businessType, title: ProfileStrings.businessType,
description: '-', description: '-',
), ),
TitleDescription( TitleDescription(
title: AppStrings.founded, title: ProfileStrings.founded,
description: description:
viewModel.companyProfileData!.foundedYear!.toString(), viewModel.companyProfileData!.foundedYear!.toString(),
), ),
@@ -150,7 +151,7 @@ class _TabletProfilePageState extends State<TabletProfilePage> {
Align( Align(
alignment: AlignmentDirectional.centerStart, alignment: AlignmentDirectional.centerStart,
child: Text( child: Text(
AppStrings.settings, ProfileStrings.settings,
style: TextStyle( style: TextStyle(
fontSize: 20.0.sp(), fontSize: 20.0.sp(),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
@@ -164,7 +165,7 @@ class _TabletProfilePageState extends State<TabletProfilePage> {
child: Row( child: Row(
children: [ children: [
Text( Text(
AppStrings.appTheme, ProfileStrings.appTheme,
style: TextStyle( style: TextStyle(
fontSize: 16.0.sp(), fontSize: 16.0.sp(),
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
@@ -202,7 +203,7 @@ class _TabletProfilePageState extends State<TabletProfilePage> {
), ),
alignment: Alignment.center, alignment: Alignment.center,
child: Text( child: Text(
AppStrings.logout, ProfileStrings.logout,
style: TextStyle( style: TextStyle(
fontSize: 14.0.sp(), fontSize: 14.0.sp(),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
@@ -0,0 +1,14 @@
class ProfileStrings {
ProfileStrings._();
static const String profile = 'Profile';
static const String profileTitle = 'Profile';
static const String settings = 'Settings';
static const String appTheme = 'App Theme';
static const String companyName = 'Company Name';
static const String nationalId = 'National ID';
static const String registrationNumber = 'Registration No.';
static const String businessType = 'Business Type';
static const String founded = 'Founded';
static const String logout = 'Logout';
}
+2 -2
View File
@@ -1,8 +1,8 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../../core/constants/strings.dart';
import '../../core/theme/colors.dart'; import '../../core/theme/colors.dart';
import '../../core/utils/size_config.dart'; import '../../core/utils/size_config.dart';
import '../login/strings/login_strings.dart';
class BaseButton extends StatelessWidget { class BaseButton extends StatelessWidget {
final bool isEnabled; final bool isEnabled;
@@ -73,7 +73,7 @@ class BaseButton extends StatelessWidget {
), ),
), ),
child: Text( child: Text(
text ?? AppStrings.loginButton, text ?? LoginStrings.loginButton,
style: TextStyle( style: TextStyle(
fontSize: 16.0.sp(), fontSize: 16.0.sp(),
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
@@ -1,9 +1,11 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:tm_app/core/constants/assets.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/theme/colors.dart';
import 'package:tm_app/core/utils/size_config.dart'; import 'package:tm_app/core/utils/size_config.dart';
import 'package:tm_app/views/home/strings/home_strings.dart';
import 'package:tm_app/views/profile/strings/profile_strings.dart';
import 'package:tm_app/views/tenders/strings/tenders_strings.dart';
class DesktopNavigationWidget extends StatelessWidget { class DesktopNavigationWidget extends StatelessWidget {
const DesktopNavigationWidget({ const DesktopNavigationWidget({
@@ -32,7 +34,7 @@ class DesktopNavigationWidget extends StatelessWidget {
Spacer(), Spacer(),
_navigationItem( _navigationItem(
context: context, context: context,
text: AppStrings.home, text: HomeStrings.home,
isActive: currentIndex == 0, isActive: currentIndex == 0,
onTap: () => onTabChanged(0), onTap: () => onTabChanged(0),
iconPath: AssetsManager.home, iconPath: AssetsManager.home,
@@ -41,7 +43,7 @@ class DesktopNavigationWidget extends StatelessWidget {
SizedBox(width: 24), SizedBox(width: 24),
_navigationItem( _navigationItem(
context: context, context: context,
text: AppStrings.tendersTitle, text: TendersStrings.tendersTitle,
isActive: currentIndex == 1, isActive: currentIndex == 1,
onTap: () => onTabChanged(1), onTap: () => onTabChanged(1),
iconPath: AssetsManager.tenders, iconPath: AssetsManager.tenders,
@@ -50,7 +52,7 @@ class DesktopNavigationWidget extends StatelessWidget {
SizedBox(width: 24), SizedBox(width: 24),
_navigationItem( _navigationItem(
context: context, context: context,
text: AppStrings.profile, text: ProfileStrings.profileTitle,
isActive: currentIndex == 2, isActive: currentIndex == 2,
onTap: () => onTabChanged(2), onTap: () => onTabChanged(2),
iconPath: AssetsManager.profile, iconPath: AssetsManager.profile,
@@ -1,9 +1,11 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:tm_app/core/constants/assets.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/theme/colors.dart';
import 'package:tm_app/core/utils/size_config.dart'; import 'package:tm_app/core/utils/size_config.dart';
import 'package:tm_app/views/home/strings/home_strings.dart';
import 'package:tm_app/views/profile/strings/profile_strings.dart';
import 'package:tm_app/views/tenders/strings/tenders_strings.dart';
class TabletNavigationWidget extends StatelessWidget { class TabletNavigationWidget extends StatelessWidget {
const TabletNavigationWidget({ const TabletNavigationWidget({
@@ -26,7 +28,7 @@ class TabletNavigationWidget extends StatelessWidget {
SizedBox(height: 48.0.h()), SizedBox(height: 48.0.h()),
_navigationItem( _navigationItem(
context: context, context: context,
text: AppStrings.home, text: HomeStrings.home,
isActive: currentIndex == 0, isActive: currentIndex == 0,
onTap: () => onTabChanged(0), onTap: () => onTabChanged(0),
iconPath: AssetsManager.home, iconPath: AssetsManager.home,
@@ -34,7 +36,7 @@ class TabletNavigationWidget extends StatelessWidget {
), ),
_navigationItem( _navigationItem(
context: context, context: context,
text: AppStrings.tendersTitle, text: TendersStrings.tendersTitle,
isActive: currentIndex == 1, isActive: currentIndex == 1,
onTap: () => onTabChanged(1), onTap: () => onTabChanged(1),
iconPath: AssetsManager.tenders, iconPath: AssetsManager.tenders,
@@ -42,7 +44,7 @@ class TabletNavigationWidget extends StatelessWidget {
), ),
_navigationItem( _navigationItem(
context: context, context: context,
text: AppStrings.profile, text: ProfileStrings.profileTitle,
isActive: currentIndex == 2, isActive: currentIndex == 2,
onTap: () => onTabChanged(2), onTap: () => onTabChanged(2),
iconPath: AssetsManager.profile, iconPath: AssetsManager.profile,
+2 -2
View File
@@ -6,7 +6,7 @@ import 'package:tm_app/view_models/tenders_view_model.dart';
import 'package:tm_app/views/shared/desktop_navigation_widget.dart'; import 'package:tm_app/views/shared/desktop_navigation_widget.dart';
import 'package:tm_app/views/tenders/widgets/main_tenders_slider.dart'; import 'package:tm_app/views/tenders/widgets/main_tenders_slider.dart';
import '../../../core/constants/strings.dart'; import '../../../core/constants/common_strings.dart';
import '../../../core/routes/app_routes.dart'; import '../../../core/routes/app_routes.dart';
class DesktopTendersPage extends StatefulWidget { class DesktopTendersPage extends StatefulWidget {
@@ -93,7 +93,7 @@ class _DesktopTendersPageState extends State<DesktopTendersPage> {
} }
if (viewModel.tendersResponse?.data?.tenders == null || if (viewModel.tendersResponse?.data?.tenders == null ||
viewModel.tendersResponse!.data!.tenders!.isEmpty) { viewModel.tendersResponse!.data!.tenders!.isEmpty) {
return Center(child: Text(AppStrings.noData)); return Center(child: Text(CommonStrings.noData));
} }
return SizedBox( return SizedBox(
width: 740, width: 740,
+4 -3
View File
@@ -3,9 +3,10 @@ import 'package:provider/provider.dart';
import 'package:tm_app/core/utils/size_config.dart'; import 'package:tm_app/core/utils/size_config.dart';
import 'package:tm_app/view_models/tenders_view_model.dart'; import 'package:tm_app/view_models/tenders_view_model.dart';
import '../../../core/constants/strings.dart'; import '../../../core/constants/common_strings.dart';
import '../../../core/theme/colors.dart'; import '../../../core/theme/colors.dart';
import '../../shared/tender_app_bar.dart'; import '../../shared/tender_app_bar.dart';
import '../strings/tenders_strings.dart';
import '../widgets/main_tenders_slider.dart'; import '../widgets/main_tenders_slider.dart';
class MobileTendersPage extends StatefulWidget { class MobileTendersPage extends StatefulWidget {
@@ -53,7 +54,7 @@ class _MobileTendersPageState extends State<MobileTendersPage> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
backgroundColor: AppColors.backgroundColor, backgroundColor: AppColors.backgroundColor,
appBar: tenderMobileAppBar(title: AppStrings.tendersTitle), appBar: tenderMobileAppBar(title: TendersStrings.tendersTitle),
body: Consumer<TendersViewModel>( body: Consumer<TendersViewModel>(
builder: (context, viewModel, child) { builder: (context, viewModel, child) {
if (viewModel.isLoading) { if (viewModel.isLoading) {
@@ -67,7 +68,7 @@ class _MobileTendersPageState extends State<MobileTendersPage> {
if (viewModel.tendersResponse?.data?.tenders == null || if (viewModel.tendersResponse?.data?.tenders == null ||
viewModel.tendersResponse!.data!.tenders!.isEmpty) { viewModel.tendersResponse!.data!.tenders!.isEmpty) {
return Center(child: Text(AppStrings.noData)); return Center(child: Text(CommonStrings.noData));
} }
return Padding( return Padding(
+2 -2
View File
@@ -9,7 +9,7 @@ import 'package:tm_app/views/shared/tablet_navigation_widget.dart';
import 'package:tm_app/views/tenders/widgets/main_tenders_slider.dart'; import 'package:tm_app/views/tenders/widgets/main_tenders_slider.dart';
import '../../../core/constants/assets.dart'; import '../../../core/constants/assets.dart';
import '../../../core/constants/strings.dart'; import '../../../core/constants/common_strings.dart';
import '../../../core/routes/app_routes.dart'; import '../../../core/routes/app_routes.dart';
class TabletTendersPage extends StatefulWidget { class TabletTendersPage extends StatefulWidget {
@@ -89,7 +89,7 @@ class _TabletTendersPageState extends State<TabletTendersPage> {
} }
if (viewModel.tendersResponse?.data?.tenders == null || if (viewModel.tendersResponse?.data?.tenders == null ||
viewModel.tendersResponse!.data!.tenders!.isEmpty) { viewModel.tendersResponse!.data!.tenders!.isEmpty) {
return Center(child: Text(AppStrings.noData)); return Center(child: Text(CommonStrings.noData));
} }
return Padding( return Padding(
padding: EdgeInsets.only(right: 24.0.w(), top: 128.0.h()), padding: EdgeInsets.only(right: 24.0.w(), top: 128.0.h()),
@@ -0,0 +1,11 @@
class TendersStrings {
TendersStrings._();
static const String tendersTitle = 'Tenders';
static const String tenderSeeMore = 'See More';
static const String reject = 'Reject';
static const String submit = 'Submit';
static const String dislike = 'Dislike';
static const String like = 'Like';
static const String tenderDeadlineLabel = 'Deadline';
}
@@ -1,7 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.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/data/services/model/tender_data/tender_data.dart';
import 'package:tm_app/view_models/tenders_view_model.dart'; import 'package:tm_app/view_models/tenders_view_model.dart';
@@ -10,6 +9,7 @@ import '../../../core/theme/colors.dart';
import '../../../core/utils/size_config.dart'; import '../../../core/utils/size_config.dart';
import '../../shared/select_submission_bottom_sheet.dart'; import '../../shared/select_submission_bottom_sheet.dart';
import '../../shared/select_submission_dialog.dart'; import '../../shared/select_submission_dialog.dart';
import '../strings/tenders_strings.dart';
class TenderActionButtonsRow extends StatelessWidget { class TenderActionButtonsRow extends StatelessWidget {
final TenderData tender; final TenderData tender;
@@ -57,7 +57,7 @@ class TenderActionButtonsRow extends StatelessWidget {
final isRejected = approval?.status == 'rejected'; final isRejected = approval?.status == 'rejected';
return Tooltip( return Tooltip(
message: AppStrings.reject, message: TendersStrings.reject,
child: InkWell( child: InkWell(
splashColor: Colors.transparent, splashColor: Colors.transparent,
onTap: () { onTap: () {
@@ -89,7 +89,7 @@ class TenderActionButtonsRow extends StatelessWidget {
SizedBox(height: 8.0.h()), SizedBox(height: 8.0.h()),
if (!isDesktop) if (!isDesktop)
Text( Text(
AppStrings.reject, TendersStrings.reject,
style: TextStyle( style: TextStyle(
fontSize: 12.0.sp(), fontSize: 12.0.sp(),
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
@@ -112,7 +112,7 @@ class TenderActionButtonsRow extends StatelessWidget {
final isApproved = approval?.status == 'submitted'; final isApproved = approval?.status == 'submitted';
return Tooltip( return Tooltip(
message: AppStrings.submit, message: TendersStrings.submit,
child: InkWell( child: InkWell(
splashColor: Colors.transparent, splashColor: Colors.transparent,
onTap: () { onTap: () {
@@ -180,7 +180,7 @@ class TenderActionButtonsRow extends StatelessWidget {
SizedBox(height: 8.0.h()), SizedBox(height: 8.0.h()),
if (!isDesktop) if (!isDesktop)
Text( Text(
AppStrings.submit, TendersStrings.submit,
style: TextStyle( style: TextStyle(
fontSize: 12.0.sp(), fontSize: 12.0.sp(),
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
@@ -203,7 +203,7 @@ class TenderActionButtonsRow extends StatelessWidget {
final isDisliked = feedback?.feedbackType == 'dislike'; final isDisliked = feedback?.feedbackType == 'dislike';
return Tooltip( return Tooltip(
message: AppStrings.dislike, message: TendersStrings.dislike,
child: InkWell( child: InkWell(
splashColor: Colors.transparent, splashColor: Colors.transparent,
onTap: () { onTap: () {
@@ -227,7 +227,7 @@ class TenderActionButtonsRow extends StatelessWidget {
SizedBox(height: 8.0.h()), SizedBox(height: 8.0.h()),
if (!isDesktop) if (!isDesktop)
Text( Text(
AppStrings.dislike, TendersStrings.dislike,
style: TextStyle( style: TextStyle(
fontSize: 12.0.sp(), fontSize: 12.0.sp(),
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
@@ -250,7 +250,7 @@ class TenderActionButtonsRow extends StatelessWidget {
final isLiked = feedback?.feedbackType == 'like'; final isLiked = feedback?.feedbackType == 'like';
return Tooltip( return Tooltip(
message: AppStrings.like, message: TendersStrings.like,
child: InkWell( child: InkWell(
splashColor: Colors.transparent, splashColor: Colors.transparent,
onTap: () { onTap: () {
@@ -271,7 +271,7 @@ class TenderActionButtonsRow extends StatelessWidget {
SizedBox(height: 8.0.h()), SizedBox(height: 8.0.h()),
if (!isDesktop) if (!isDesktop)
Text( Text(
AppStrings.like, TendersStrings.like,
style: TextStyle( style: TextStyle(
fontSize: 12.0.sp(), fontSize: 12.0.sp(),
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
+5 -4
View File
@@ -2,7 +2,6 @@ import 'package:country_flags/country_flags.dart';
import 'package:flutter/material.dart' hide DateUtils; import 'package:flutter/material.dart' hide DateUtils;
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:tm_app/core/constants/strings.dart';
import 'package:tm_app/core/routes/app_routes.dart'; import 'package:tm_app/core/routes/app_routes.dart';
import 'package:tm_app/data/services/model/tender_data/tender_data.dart'; import 'package:tm_app/data/services/model/tender_data/tender_data.dart';
@@ -11,6 +10,8 @@ import '../../../core/theme/colors.dart';
import '../../../core/utils/date_utils.dart'; import '../../../core/utils/date_utils.dart';
import '../../../core/utils/size_config.dart'; import '../../../core/utils/size_config.dart';
import '../../../view_models/tenders_view_model.dart'; import '../../../view_models/tenders_view_model.dart';
import '../../detail/strings/tender_details_strings.dart';
import '../strings/tenders_strings.dart';
import 'tender_action_buttons_row.dart'; import 'tender_action_buttons_row.dart';
class TenderCard extends StatelessWidget { class TenderCard extends StatelessWidget {
@@ -134,7 +135,7 @@ class TenderCard extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Text( Text(
AppStrings.tenderDeadlineLabel, TendersStrings.tenderDeadlineLabel,
style: TextStyle( style: TextStyle(
color: AppColors.textBlue, color: AppColors.textBlue,
fontSize: 14.0.sp(), fontSize: 14.0.sp(),
@@ -194,7 +195,7 @@ class TenderCard extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Text( Text(
AppStrings.tenderMatchProfile, TenderDetailsStrings.tenderMatchProfile,
style: TextStyle( style: TextStyle(
color: AppColors.grey80, color: AppColors.grey80,
fontSize: 14.0.sp(), fontSize: 14.0.sp(),
@@ -286,7 +287,7 @@ class TenderCard extends StatelessWidget {
borderRadius: BorderRadius.circular(100), borderRadius: BorderRadius.circular(100),
), ),
child: Text( child: Text(
AppStrings.tenderSeeMore, TendersStrings.tenderSeeMore,
style: TextStyle( style: TextStyle(
color: AppColors.mainBlue, color: AppColors.mainBlue,
fontSize: 14.0.sp(), fontSize: 14.0.sp(),
@@ -1,5 +1,4 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:tm_app/core/theme/colors.dart'; import 'package:tm_app/core/theme/colors.dart';
import 'package:tm_app/view_models/your_tenders_view_model.dart'; import 'package:tm_app/view_models/your_tenders_view_model.dart';
@@ -7,6 +6,7 @@ import 'package:tm_app/views/your_tenders/widgets/filter_button.dart';
import 'package:tm_app/views/your_tenders/widgets/tablet_desktop_appbar.dart'; import 'package:tm_app/views/your_tenders/widgets/tablet_desktop_appbar.dart';
import 'package:tm_app/views/your_tenders/widgets/tenders_submitted.dart'; import 'package:tm_app/views/your_tenders/widgets/tenders_submitted.dart';
import '../../../core/routes/app_routes.dart';
import '../../shared/desktop_navigation_widget.dart'; import '../../shared/desktop_navigation_widget.dart';
class YourTendersDesktopPage extends StatefulWidget { class YourTendersDesktopPage extends StatefulWidget {
@@ -50,15 +50,14 @@ class _YourTendersDesktopPageState extends State<YourTendersDesktopPage>
switch (index) { switch (index) {
case 0: case 0:
// Navigate to home // Navigate to home
Router.neglect(context, () => context.go('/home')); Router.neglect(context, () => HomeRouteData().go(context));
break; break;
case 1: case 1:
// Already on tenders // Already on tenders
break; break;
case 2: case 2:
// Navigate to profile // Navigate to profile
// context.go('/profile'); Router.neglect(context, () => ProfileRouteData().go(context));
Router.neglect(context, () => context.go('/profile'));
break; break;
} }
}, },
@@ -1,9 +1,9 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.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/theme/colors.dart';
import 'package:tm_app/view_models/your_tenders_view_model.dart'; import 'package:tm_app/view_models/your_tenders_view_model.dart';
import 'package:tm_app/views/shared/tender_app_bar.dart'; import 'package:tm_app/views/shared/tender_app_bar.dart';
import 'package:tm_app/views/your_tenders/strings/your_tenders_strings.dart';
import 'package:tm_app/views/your_tenders/widgets/filter_button.dart'; import 'package:tm_app/views/your_tenders/widgets/filter_button.dart';
import 'package:tm_app/views/your_tenders/widgets/tenders_submitted.dart'; import 'package:tm_app/views/your_tenders/widgets/tenders_submitted.dart';
@@ -14,7 +14,7 @@ class YourTendersMobilePage extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
backgroundColor: AppColors.backgroundColor, backgroundColor: AppColors.backgroundColor,
appBar: appBar(context: context, title: AppStrings.yourTenders), appBar: appBar(context: context, title: YourTendersStrings.yourTenders),
body: Column( body: Column(
children: [ children: [
FilterButton(platformType: PlatformType.mobile), FilterButton(platformType: PlatformType.mobile),
@@ -0,0 +1,16 @@
class YourTendersStrings {
YourTendersStrings._();
static const String yourTenders = 'Your tenders';
static const String yourTendersTitle = 'Your tenders';
static const filter = 'Filter';
static const selectDateRange = 'Select date range';
static const status = 'Status';
static const all = 'All';
static const likeTenders = 'Like tenders';
static const dislikeTenders = 'Dislike tenders';
static const tendersSubmitted = 'Tenders submitted';
static const confirm = 'Confirm';
static const startDate = 'YYYY/MM/DD';
static const endDate = 'YYYY/MM/DD';
}
@@ -4,8 +4,8 @@ import 'package:go_router/go_router.dart';
import 'package:tm_app/core/utils/size_config.dart'; import 'package:tm_app/core/utils/size_config.dart';
import '../../../core/constants/assets.dart'; import '../../../core/constants/assets.dart';
import '../../../core/constants/strings.dart';
import '../../../core/theme/colors.dart'; import '../../../core/theme/colors.dart';
import '../strings/your_tenders_strings.dart';
class TabletDesktopAppbar extends StatelessWidget { class TabletDesktopAppbar extends StatelessWidget {
const TabletDesktopAppbar({super.key}); const TabletDesktopAppbar({super.key});
@@ -20,7 +20,7 @@ class TabletDesktopAppbar extends StatelessWidget {
), ),
SizedBox(width: 8.0.w()), SizedBox(width: 8.0.w()),
Text( Text(
AppStrings.yourTendersTitle, YourTendersStrings.yourTendersTitle,
style: TextStyle( style: TextStyle(
fontSize: 20, fontSize: 20,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,