strings check
This commit is contained in:
@@ -3,11 +3,8 @@ class CommonStrings {
|
||||
|
||||
// Truly shared strings across multiple features
|
||||
static const String noData = 'No data';
|
||||
static const String selectSubmission = 'Select Submission';
|
||||
static const String selfApply = 'Self-apply';
|
||||
static const String partnership = 'Partnership';
|
||||
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';
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import 'package:tm_app/views/shared/base_button.dart';
|
||||
import 'package:tm_app/views/shared/select_submission_bottom_sheet.dart';
|
||||
|
||||
import '../../../core/constants/tender_approval_status.dart';
|
||||
import '../../../core/constants/tender_submision_mode.dart';
|
||||
import '../../../data/services/model/tender_data/tender_data.dart';
|
||||
import '../../shared/select_submission_dialog.dart';
|
||||
import '../strings/tender_details_strings.dart';
|
||||
@@ -52,7 +53,8 @@ class TenderDetailActions extends StatelessWidget {
|
||||
TenderApprovalStatus.submitted.value) {
|
||||
viewModel.submitTenderApproval(
|
||||
tenderId: detail.id!,
|
||||
submissionMode: 'self-apply',
|
||||
submissionMode:
|
||||
TenderSubmissionMode.selfApply.value,
|
||||
);
|
||||
} else {
|
||||
showModalBottomSheet(
|
||||
@@ -97,7 +99,7 @@ class TenderDetailActions extends StatelessWidget {
|
||||
onPressed: () {
|
||||
viewModel.rejectTenderApproval(
|
||||
tenderId: detail.id!,
|
||||
submissionMode: 'self-apply',
|
||||
submissionMode: TenderSubmissionMode.selfApply.value,
|
||||
);
|
||||
},
|
||||
);
|
||||
@@ -133,7 +135,7 @@ class TenderDetailActions extends StatelessWidget {
|
||||
onPressed: () {
|
||||
viewModel.rejectTenderApproval(
|
||||
tenderId: detail.id!,
|
||||
submissionMode: 'self-apply',
|
||||
submissionMode: TenderSubmissionMode.selfApply.value,
|
||||
);
|
||||
},
|
||||
width: 120.0.w(),
|
||||
@@ -162,7 +164,7 @@ class TenderDetailActions extends StatelessWidget {
|
||||
TenderApprovalStatus.submitted.value) {
|
||||
viewModel.submitTenderApproval(
|
||||
tenderId: detail.id!,
|
||||
submissionMode: 'self-apply',
|
||||
submissionMode: TenderSubmissionMode.selfApply.value,
|
||||
);
|
||||
} else {
|
||||
(MediaQuery.sizeOf(context).width > 600)
|
||||
|
||||
@@ -150,7 +150,7 @@ class _LikedTendersDesktopPageState extends State<LikedTendersDesktopPage> {
|
||||
children: [
|
||||
const Spacer(),
|
||||
Text(
|
||||
'Page',
|
||||
LikedTendersStrings.page,
|
||||
style: TextStyle(
|
||||
fontSize: 13.0.sp(),
|
||||
fontWeight: FontWeight.w300,
|
||||
@@ -165,7 +165,9 @@ class _LikedTendersDesktopPageState extends State<LikedTendersDesktopPage> {
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return AlertDialog(
|
||||
title: const Text('Select Page'),
|
||||
title: const Text(
|
||||
LikedTendersStrings.selectPage,
|
||||
),
|
||||
content: SizedBox(
|
||||
width: 200,
|
||||
height: 300,
|
||||
@@ -174,7 +176,9 @@ class _LikedTendersDesktopPageState extends State<LikedTendersDesktopPage> {
|
||||
itemBuilder: (context, index) {
|
||||
final pageNumber = index + 1;
|
||||
return ListTile(
|
||||
title: Text('Page $pageNumber'),
|
||||
title: Text(
|
||||
'${LikedTendersStrings.page} $pageNumber',
|
||||
),
|
||||
onTap:
|
||||
() => Navigator.pop(
|
||||
context,
|
||||
@@ -223,7 +227,7 @@ class _LikedTendersDesktopPageState extends State<LikedTendersDesktopPage> {
|
||||
|
||||
SizedBox(width: 5.0.w()),
|
||||
Text(
|
||||
'Of',
|
||||
LikedTendersStrings.of,
|
||||
style: TextStyle(
|
||||
fontSize: 14.0.sp(),
|
||||
fontWeight: FontWeight.w400,
|
||||
|
||||
@@ -160,7 +160,7 @@ class _LikedTendersTabletPageState extends State<LikedTendersTabletPage> {
|
||||
children: [
|
||||
const Spacer(),
|
||||
Text(
|
||||
'Page',
|
||||
LikedTendersStrings.page,
|
||||
style: TextStyle(
|
||||
fontSize: 13.0.sp(),
|
||||
fontWeight: FontWeight.w300,
|
||||
@@ -175,7 +175,9 @@ class _LikedTendersTabletPageState extends State<LikedTendersTabletPage> {
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return AlertDialog(
|
||||
title: const Text('Select Page'),
|
||||
title: const Text(
|
||||
LikedTendersStrings.selectPage,
|
||||
),
|
||||
content: SizedBox(
|
||||
width: 200,
|
||||
height: 300,
|
||||
@@ -184,7 +186,9 @@ class _LikedTendersTabletPageState extends State<LikedTendersTabletPage> {
|
||||
itemBuilder: (context, index) {
|
||||
final pageNumber = index + 1;
|
||||
return ListTile(
|
||||
title: Text('Page $pageNumber'),
|
||||
title: Text(
|
||||
'${LikedTendersStrings.page} $pageNumber',
|
||||
),
|
||||
onTap:
|
||||
() => Navigator.pop(
|
||||
context,
|
||||
@@ -233,7 +237,7 @@ class _LikedTendersTabletPageState extends State<LikedTendersTabletPage> {
|
||||
|
||||
SizedBox(width: 5.0.w()),
|
||||
Text(
|
||||
'Of',
|
||||
LikedTendersStrings.of,
|
||||
style: TextStyle(
|
||||
fontSize: 14.0.sp(),
|
||||
fontWeight: FontWeight.w400,
|
||||
|
||||
@@ -12,5 +12,8 @@ class LikedTendersStrings {
|
||||
static const startDate = 'YYYY/MM/DD';
|
||||
static const endDate = 'YYYY/MM/DD';
|
||||
static const approvedTenders = 'Approved tenders';
|
||||
static const noLikedTenders = 'You haven’t liked any tenders yet.';
|
||||
static const noLikedTenders = 'You haven’t liked any tenders yet!';
|
||||
static const page = 'Page';
|
||||
static const selectPage = 'Select Page';
|
||||
static const of = 'Of';
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import 'package:tm_app/data/services/model/tender_data/tender_data.dart';
|
||||
import 'package:tm_app/view_models/liked_tenders_view_model.dart';
|
||||
import 'package:tm_app/views/home/strings/home_strings.dart';
|
||||
|
||||
import '../../../core/constants/tender_submision_mode.dart';
|
||||
import '../../../data/services/model/tender_approvals_data/tender_approvals_data.dart';
|
||||
import '../../shared/select_submission_bottom_sheet.dart';
|
||||
import '../../shared/select_submission_dialog.dart';
|
||||
@@ -178,7 +179,7 @@ class LikedListItem extends StatelessWidget {
|
||||
onTap: () {
|
||||
viewModel.rejectTenderApproval(
|
||||
tenderId: tender.id!,
|
||||
submissionMode: 'self-apply',
|
||||
submissionMode: TenderSubmissionMode.selfApply.value,
|
||||
);
|
||||
},
|
||||
child: Container(
|
||||
@@ -211,7 +212,7 @@ class LikedListItem extends StatelessWidget {
|
||||
if (viewModel.isTenderSubmitted(tender.id!)) {
|
||||
viewModel.submitTenderApproval(
|
||||
tenderId: tender.id!,
|
||||
submissionMode: 'self-apply',
|
||||
submissionMode: TenderSubmissionMode.selfApply.value,
|
||||
);
|
||||
} else {
|
||||
(kIsWeb && MediaQuery.sizeOf(context).width > 600)
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/svg.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:tm_app/core/theme/colors.dart';
|
||||
|
||||
import '../../../core/constants/assets.dart';
|
||||
import '../../../core/routes/app_routes.dart';
|
||||
import '../../../core/utils/app_toast.dart';
|
||||
import '../../../core/utils/size_config.dart';
|
||||
import '../../../view_models/auth_view_model.dart';
|
||||
@@ -31,7 +31,7 @@ class _LoginDesktopPageState extends State<LoginDesktopPage> {
|
||||
|
||||
void _viewModelListener() {
|
||||
if (viewModel.loggedInUser != null) {
|
||||
Router.neglect(context, () => context.go('/home'));
|
||||
Router.neglect(context, () => HomeRouteData().go(context));
|
||||
} else if (viewModel.errorMessage != null) {
|
||||
AppToast.error(context, viewModel.errorMessage!);
|
||||
}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/svg.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:tm_app/core/theme/colors.dart';
|
||||
|
||||
import '../../../core/constants/assets.dart';
|
||||
import '../../../core/routes/app_routes.dart';
|
||||
import '../../../core/utils/app_toast.dart';
|
||||
import '../../../core/utils/size_config.dart';
|
||||
import '../../../view_models/auth_view_model.dart';
|
||||
@@ -29,7 +29,7 @@ class _LoginMobilePageState extends State<LoginMobilePage> {
|
||||
|
||||
void _viewModelListener() {
|
||||
if (viewModel.loggedInUser != null) {
|
||||
Router.neglect(context, () => context.go('/home'));
|
||||
Router.neglect(context, () => HomeRouteData().go(context));
|
||||
}
|
||||
if (viewModel.errorMessage != null) {
|
||||
AppToast.error(context, viewModel.errorMessage!);
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:tm_app/core/theme/colors.dart';
|
||||
|
||||
import '../../../core/constants/assets.dart';
|
||||
import '../../../core/routes/app_routes.dart';
|
||||
import '../../../core/utils/app_toast.dart';
|
||||
import '../../../core/utils/size_config.dart';
|
||||
import '../../../view_models/auth_view_model.dart';
|
||||
@@ -29,7 +29,7 @@ class _LoginTabletPageState extends State<LoginTabletPage> {
|
||||
|
||||
void _viewModelListener() {
|
||||
if (viewModel.loggedInUser != null) {
|
||||
Router.neglect(context, () => context.go('/home'));
|
||||
Router.neglect(context, () => HomeRouteData().go(context));
|
||||
}
|
||||
if (viewModel.errorMessage != null) {
|
||||
AppToast.error(context, viewModel.errorMessage!);
|
||||
|
||||
@@ -1,98 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/svg.dart';
|
||||
import 'package:tm_app/core/constants/assets.dart';
|
||||
|
||||
import '../../core/utils/size_config.dart';
|
||||
|
||||
class TenderBottomNavigation extends StatefulWidget {
|
||||
const TenderBottomNavigation({super.key});
|
||||
|
||||
@override
|
||||
State<TenderBottomNavigation> createState() => _TenderBottomNavigationState();
|
||||
}
|
||||
|
||||
class _TenderBottomNavigationState extends State<TenderBottomNavigation> {
|
||||
int activeTab = 0;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
height: 72.0.h(),
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xFFE3E3E3),
|
||||
border: Border.fromBorderSide(BorderSide(color: Color(0xFFE3E3E3))),
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||
children: [
|
||||
_bottomNavigationItem(
|
||||
text: 'Home',
|
||||
isActive: activeTab == 0,
|
||||
onTap: () {
|
||||
setState(() {
|
||||
activeTab = 0;
|
||||
});
|
||||
},
|
||||
iconPath: 'assets/icons/home.svg',
|
||||
activeIconPath: AssetsManager.homeActive,
|
||||
),
|
||||
_bottomNavigationItem(
|
||||
text: 'Tenders',
|
||||
isActive: activeTab == 1,
|
||||
onTap: () {
|
||||
setState(() {
|
||||
activeTab = 1;
|
||||
});
|
||||
},
|
||||
iconPath: 'assets/icons/task_square.svg',
|
||||
activeIconPath: 'assets/icons/task-square_active.svg',
|
||||
),
|
||||
_bottomNavigationItem(
|
||||
text: 'Profile',
|
||||
isActive: activeTab == 2,
|
||||
onTap: () {
|
||||
setState(() {
|
||||
activeTab = 2;
|
||||
});
|
||||
},
|
||||
iconPath: 'assets/icons/profile-circle.svg',
|
||||
activeIconPath: 'assets/icons/profile-circle_active.svg',
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _bottomNavigationItem({
|
||||
required String text,
|
||||
required bool isActive,
|
||||
required VoidCallback onTap,
|
||||
required String iconPath,
|
||||
required String activeIconPath,
|
||||
}) {
|
||||
return InkWell(
|
||||
onTap: onTap,
|
||||
child: SizedBox(
|
||||
width: 64.0.w(),
|
||||
height: 72.0.h(),
|
||||
child: Padding(
|
||||
padding: EdgeInsets.only(top: 12.0.h(), bottom: 14.0.h()),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
SvgPicture.asset(isActive ? activeIconPath : iconPath),
|
||||
Text(
|
||||
text,
|
||||
style: TextStyle(
|
||||
fontSize: 12.0.sp(),
|
||||
fontWeight: FontWeight.w400,
|
||||
color: isActive ? Color(0xFF0164FF) : Color(0xFF777777),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:tm_app/core/utils/size_config.dart';
|
||||
|
||||
import '../../core/constants/common_strings.dart';
|
||||
import '../../core/constants/tender_submision_mode.dart';
|
||||
import '../../core/theme/colors.dart';
|
||||
|
||||
@@ -37,7 +38,7 @@ class _SelectSubmissionBottomSheetState
|
||||
child: Column(
|
||||
children: [
|
||||
Text(
|
||||
'Select Submission',
|
||||
CommonStrings.selectSubmission,
|
||||
style: TextStyle(
|
||||
fontSize: 20.0.sp(),
|
||||
fontWeight: FontWeight.w600,
|
||||
@@ -46,7 +47,7 @@ class _SelectSubmissionBottomSheetState
|
||||
),
|
||||
SizedBox(height: 8.0.h()),
|
||||
_submissionType(
|
||||
title: 'self-apply',
|
||||
title: CommonStrings.selfApply,
|
||||
isSelected: type == TenderSubmissionMode.selfApply.value,
|
||||
onTap: () {
|
||||
selectedType = 0;
|
||||
@@ -56,7 +57,7 @@ class _SelectSubmissionBottomSheetState
|
||||
),
|
||||
SizedBox(height: 8.0.h()),
|
||||
_submissionType(
|
||||
title: 'Partnership',
|
||||
title: CommonStrings.partnership,
|
||||
isSelected: type == TenderSubmissionMode.partnership.value,
|
||||
onTap: () {
|
||||
selectedType = 1;
|
||||
@@ -79,7 +80,7 @@ class _SelectSubmissionBottomSheetState
|
||||
),
|
||||
alignment: Alignment.center,
|
||||
child: Text(
|
||||
'Confirm',
|
||||
CommonStrings.confirm,
|
||||
style: TextStyle(
|
||||
fontSize: 14.0.sp(),
|
||||
fontWeight: FontWeight.w500,
|
||||
|
||||
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:tm_app/core/utils/size_config.dart';
|
||||
|
||||
import '../../core/constants/common_strings.dart';
|
||||
import '../../core/constants/tender_submision_mode.dart';
|
||||
import '../../core/theme/colors.dart';
|
||||
|
||||
@@ -34,7 +35,7 @@ class _SelectSubmissionDialogState extends State<SelectSubmissionDialog> {
|
||||
child: Column(
|
||||
children: [
|
||||
Text(
|
||||
'Select Submission',
|
||||
CommonStrings.selectSubmission,
|
||||
style: TextStyle(
|
||||
fontSize: 20.0.sp(),
|
||||
fontWeight: FontWeight.w600,
|
||||
@@ -43,7 +44,7 @@ class _SelectSubmissionDialogState extends State<SelectSubmissionDialog> {
|
||||
),
|
||||
SizedBox(height: 8.0.h()),
|
||||
_submissionType(
|
||||
title: 'Self-apply',
|
||||
title: CommonStrings.selfApply,
|
||||
isSelected: type == TenderSubmissionMode.selfApply.value,
|
||||
onTap: () {
|
||||
selectedType = 0;
|
||||
@@ -53,7 +54,7 @@ class _SelectSubmissionDialogState extends State<SelectSubmissionDialog> {
|
||||
),
|
||||
SizedBox(height: 8.0.h()),
|
||||
_submissionType(
|
||||
title: 'Partnership',
|
||||
title: CommonStrings.partnership,
|
||||
isSelected: type == TenderSubmissionMode.partnership.value,
|
||||
onTap: () {
|
||||
selectedType = 1;
|
||||
@@ -78,7 +79,7 @@ class _SelectSubmissionDialogState extends State<SelectSubmissionDialog> {
|
||||
),
|
||||
alignment: Alignment.center,
|
||||
child: Text(
|
||||
'Confirm',
|
||||
CommonStrings.confirm,
|
||||
style: TextStyle(
|
||||
fontSize: 14.0.sp(),
|
||||
fontWeight: FontWeight.w500,
|
||||
|
||||
@@ -15,4 +15,7 @@ class YourTendersStrings {
|
||||
static const approvedTenders = 'Approved tenders';
|
||||
static const noTenders = 'No data available';
|
||||
static const selectPublicationRangeDate = 'Select publication date range';
|
||||
static const noLikedTenders = 'You haven’t liked any tenders yet !';
|
||||
static const noDislikedTenders = 'You haven’t disliked any tenders yet !';
|
||||
static const noTendersSubmitted = 'You haven’t submitted any tenders yet !';
|
||||
}
|
||||
|
||||
@@ -4,8 +4,11 @@ import 'package:tm_app/core/theme/colors.dart';
|
||||
import 'package:tm_app/core/utils/size_config.dart';
|
||||
import 'package:tm_app/data/services/model/liked_tenders_response/liked_tenders_response.dart';
|
||||
import 'package:tm_app/view_models/your_tenders_view_model.dart';
|
||||
import 'package:tm_app/views/your_tenders/strings/your_tenders_strings.dart';
|
||||
import 'package:tm_app/views/your_tenders/widgets/tender_card.dart';
|
||||
|
||||
import '../../../core/constants/tender_feedback.dart';
|
||||
|
||||
class LikedDislikedTendersList extends StatefulWidget {
|
||||
final LikedTendersResponse data;
|
||||
final String status;
|
||||
@@ -54,7 +57,9 @@ class _LikedDislikedTendersListState extends State<LikedDislikedTendersList> {
|
||||
if (data.data?.feedback == null || data.data!.feedback!.isEmpty) {
|
||||
return Center(
|
||||
child: Text(
|
||||
'No ${widget.status} found',
|
||||
widget.status == TenderFeedback.liked.value
|
||||
? YourTendersStrings.noLikedTenders
|
||||
: YourTendersStrings.noDislikedTenders,
|
||||
style: TextStyle(fontSize: 16.0.sp(), color: AppColors.grey70),
|
||||
),
|
||||
);
|
||||
|
||||
@@ -3,6 +3,7 @@ import 'package:provider/provider.dart';
|
||||
import 'package:tm_app/core/theme/colors.dart';
|
||||
import 'package:tm_app/core/utils/size_config.dart';
|
||||
import 'package:tm_app/view_models/your_tenders_view_model.dart';
|
||||
import 'package:tm_app/views/your_tenders/strings/your_tenders_strings.dart';
|
||||
import 'package:tm_app/views/your_tenders/widgets/tender_card.dart';
|
||||
|
||||
import '../../../data/services/model/tender_approvals_response/tender_approvals_response.dart';
|
||||
@@ -55,12 +56,16 @@ class _TendersSubmittedState extends State<TendersSubmitted> {
|
||||
return Consumer<YourTendersViewModel>(
|
||||
builder: (context, viewModel, child) {
|
||||
if (widget.approvedTenders.data == null) {
|
||||
return const Center(child: Text('No submitted projects yet.'));
|
||||
return const Center(
|
||||
child: Text(YourTendersStrings.noTendersSubmitted),
|
||||
);
|
||||
}
|
||||
|
||||
final tenders = widget.approvedTenders.data!.tenders ?? [];
|
||||
if (tenders.isEmpty) {
|
||||
return const Center(child: Text('No submitted projects yet.'));
|
||||
return const Center(
|
||||
child: Text(YourTendersStrings.noTendersSubmitted),
|
||||
);
|
||||
}
|
||||
|
||||
final itemCount =
|
||||
|
||||
Reference in New Issue
Block a user