added string for every screen and removed from app strings
This commit is contained in:
@@ -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';
|
||||||
|
}
|
||||||
@@ -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(
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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';
|
||||||
|
}
|
||||||
@@ -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';
|
||||||
|
}
|
||||||
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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';
|
||||||
|
}
|
||||||
@@ -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,
|
||||||
|
|||||||
@@ -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,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?';
|
||||||
|
}
|
||||||
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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';
|
||||||
|
}
|
||||||
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user