diff --git a/lib/core/constants/common_strings.dart b/lib/core/constants/common_strings.dart index 6a264d8..cdfd6b4 100644 --- a/lib/core/constants/common_strings.dart +++ b/lib/core/constants/common_strings.dart @@ -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'; } diff --git a/lib/views/detail/widgets/tender_detail_action.dart b/lib/views/detail/widgets/tender_detail_action.dart index 165fa33..d1b4aab 100644 --- a/lib/views/detail/widgets/tender_detail_action.dart +++ b/lib/views/detail/widgets/tender_detail_action.dart @@ -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) diff --git a/lib/views/liked_tenders/pages/liked_tenders_desktop_page.dart b/lib/views/liked_tenders/pages/liked_tenders_desktop_page.dart index d7a2391..e892940 100644 --- a/lib/views/liked_tenders/pages/liked_tenders_desktop_page.dart +++ b/lib/views/liked_tenders/pages/liked_tenders_desktop_page.dart @@ -150,7 +150,7 @@ class _LikedTendersDesktopPageState extends State { children: [ const Spacer(), Text( - 'Page', + LikedTendersStrings.page, style: TextStyle( fontSize: 13.0.sp(), fontWeight: FontWeight.w300, @@ -165,7 +165,9 @@ class _LikedTendersDesktopPageState extends State { 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 { 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 { SizedBox(width: 5.0.w()), Text( - 'Of', + LikedTendersStrings.of, style: TextStyle( fontSize: 14.0.sp(), fontWeight: FontWeight.w400, diff --git a/lib/views/liked_tenders/pages/liked_tenders_tablet_page.dart b/lib/views/liked_tenders/pages/liked_tenders_tablet_page.dart index 02f538f..6dc6ed6 100644 --- a/lib/views/liked_tenders/pages/liked_tenders_tablet_page.dart +++ b/lib/views/liked_tenders/pages/liked_tenders_tablet_page.dart @@ -160,7 +160,7 @@ class _LikedTendersTabletPageState extends State { children: [ const Spacer(), Text( - 'Page', + LikedTendersStrings.page, style: TextStyle( fontSize: 13.0.sp(), fontWeight: FontWeight.w300, @@ -175,7 +175,9 @@ class _LikedTendersTabletPageState extends State { 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 { 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 { SizedBox(width: 5.0.w()), Text( - 'Of', + LikedTendersStrings.of, style: TextStyle( fontSize: 14.0.sp(), fontWeight: FontWeight.w400, diff --git a/lib/views/liked_tenders/strings/liked_tenders_strings.dart b/lib/views/liked_tenders/strings/liked_tenders_strings.dart index 7ec0c42..896ba57 100644 --- a/lib/views/liked_tenders/strings/liked_tenders_strings.dart +++ b/lib/views/liked_tenders/strings/liked_tenders_strings.dart @@ -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'; } diff --git a/lib/views/liked_tenders/widgets/liked_tenders_list_item.dart b/lib/views/liked_tenders/widgets/liked_tenders_list_item.dart index 8b8be25..545a741 100644 --- a/lib/views/liked_tenders/widgets/liked_tenders_list_item.dart +++ b/lib/views/liked_tenders/widgets/liked_tenders_list_item.dart @@ -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) diff --git a/lib/views/login/pages/login_desktop_page.dart b/lib/views/login/pages/login_desktop_page.dart index a7db0a9..087e298 100644 --- a/lib/views/login/pages/login_desktop_page.dart +++ b/lib/views/login/pages/login_desktop_page.dart @@ -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 { 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!); } diff --git a/lib/views/login/pages/login_mobile_page.dart b/lib/views/login/pages/login_mobile_page.dart index 4f4111a..4898ca3 100644 --- a/lib/views/login/pages/login_mobile_page.dart +++ b/lib/views/login/pages/login_mobile_page.dart @@ -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 { 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!); diff --git a/lib/views/login/pages/login_tablet_page.dart b/lib/views/login/pages/login_tablet_page.dart index d114a29..a0979ff 100644 --- a/lib/views/login/pages/login_tablet_page.dart +++ b/lib/views/login/pages/login_tablet_page.dart @@ -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 { 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!); diff --git a/lib/views/shared/bottom_navigation.dart b/lib/views/shared/bottom_navigation.dart deleted file mode 100644 index 4a3f178..0000000 --- a/lib/views/shared/bottom_navigation.dart +++ /dev/null @@ -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 createState() => _TenderBottomNavigationState(); -} - -class _TenderBottomNavigationState extends State { - 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), - ), - ), - ], - ), - ), - ), - ); - } -} diff --git a/lib/views/shared/select_submission_bottom_sheet.dart b/lib/views/shared/select_submission_bottom_sheet.dart index 480cb42..89e30cf 100644 --- a/lib/views/shared/select_submission_bottom_sheet.dart +++ b/lib/views/shared/select_submission_bottom_sheet.dart @@ -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, diff --git a/lib/views/shared/select_submission_dialog.dart b/lib/views/shared/select_submission_dialog.dart index 14ce045..a15ce13 100644 --- a/lib/views/shared/select_submission_dialog.dart +++ b/lib/views/shared/select_submission_dialog.dart @@ -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 { 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 { ), 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 { ), 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 { ), alignment: Alignment.center, child: Text( - 'Confirm', + CommonStrings.confirm, style: TextStyle( fontSize: 14.0.sp(), fontWeight: FontWeight.w500, diff --git a/lib/views/your_tenders/strings/your_tenders_strings.dart b/lib/views/your_tenders/strings/your_tenders_strings.dart index 2476151..4b1ecf0 100644 --- a/lib/views/your_tenders/strings/your_tenders_strings.dart +++ b/lib/views/your_tenders/strings/your_tenders_strings.dart @@ -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 !'; } diff --git a/lib/views/your_tenders/widgets/liked_disliked_tenders_list.dart b/lib/views/your_tenders/widgets/liked_disliked_tenders_list.dart index 40a7b5a..3ba3f28 100644 --- a/lib/views/your_tenders/widgets/liked_disliked_tenders_list.dart +++ b/lib/views/your_tenders/widgets/liked_disliked_tenders_list.dart @@ -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 { 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), ), ); diff --git a/lib/views/your_tenders/widgets/tenders_submitted.dart b/lib/views/your_tenders/widgets/tenders_submitted.dart index 9f2cf39..bed6366 100644 --- a/lib/views/your_tenders/widgets/tenders_submitted.dart +++ b/lib/views/your_tenders/widgets/tenders_submitted.dart @@ -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 { return Consumer( 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 =