From 1f2dbb21dabe8a3d07862487c43e5ce824a14e5f Mon Sep 17 00:00:00 2001 From: amirrezaghabeli Date: Wed, 13 Aug 2025 11:11:29 +0330 Subject: [PATCH] fixed your tenders dark colors and some logic changed --- lib/core/theme/colors.dart | 32 ++++++-- lib/views/shared/main_tab_bar.dart | 2 +- .../pages/your_tenders_desktop_page.dart | 36 +++++++-- .../pages/your_tenders_mobile_page.dart | 29 ++++++- .../pages/your_tenders_tablet_page.dart | 40 ++++++++-- .../widgets/approved_tenders.dart | 66 +++++++--------- .../your_tenders/widgets/tender_card.dart | 6 +- .../widgets/tenders_submitted.dart | 79 ++++++++----------- 8 files changed, 181 insertions(+), 109 deletions(-) diff --git a/lib/core/theme/colors.dart b/lib/core/theme/colors.dart index c9994d1..aafb720 100644 --- a/lib/core/theme/colors.dart +++ b/lib/core/theme/colors.dart @@ -51,7 +51,8 @@ class AppColors { static const Color jellyBean = Color(0xFF34BCCB); static const Color grey = Color(0xFF555555); - // Grey scale with theme awareness + static Color get primary0 => + _isDarkMode ? const Color(0xFF2B2B2B) : const Color(0xFFFFFFFF); static Color get grey10 => _isDarkMode ? const Color(0xFF292929) : const Color(0xFFF4F4F4); @@ -121,18 +122,33 @@ class AppColors { static Color get veryPaleOrange => _isDarkMode ? const Color(0xFF581010) : const Color(0xFFFFE4C9); + static Color get green0 => + _isDarkMode ? const Color(0xFF2E312D) : const Color(0xFFF9FCF8); + + static Color get green10 => + _isDarkMode ? const Color(0xFF50594E) : const Color(0xFFE0F0DC); + + static Color get red10 => + _isDarkMode ? const Color(0xFF524545) : const Color(0xFFF8D6D6); + + static Color get red20 => + _isDarkMode ? const Color(0xFFFF7979) : const Color(0xFFC02525); + + static Color get blue0 => + _isDarkMode ? const Color(0xFF4C6367) : const Color(0xFFD6F4F8); + + static Color get red0 => + _isDarkMode + ? const Color(0xFF312F2F) + : const Color(0xFFF8D6D6).withValues(alpha: 0.2); + // Primary color variations static const Color primary2 = Color(0xFFE5EFFF); static const Color secondary50 = Color(0xFF34BCCB); - // Green variations (status colors) - static const Color gren0 = Color(0xFFF9FCF8); - static const Color green10 = Color(0xFFE0F0DC); - static const Color gren30 = Color(0xFF289744); - // Red variations (status colors) - static const Color red0 = Color(0xFFF8D6D6); - static const Color red10 = Color(0xFFC02525); + // static const Color red0 = Color(0xFF312F2F); + // static const Color red10 = Color(0xFF524545); static const Color red = Color(0xFFFF3B30); // Other colors diff --git a/lib/views/shared/main_tab_bar.dart b/lib/views/shared/main_tab_bar.dart index 567bfd7..fb9d36e 100644 --- a/lib/views/shared/main_tab_bar.dart +++ b/lib/views/shared/main_tab_bar.dart @@ -30,7 +30,7 @@ class _MainTabBarState extends State { indicatorSize: TabBarIndicatorSize.tab, dividerColor: Colors.transparent, indicator: BoxDecoration( - color: AppColors.backgroundColor, + color: AppColors.primary0, borderRadius: BorderRadius.circular(10), boxShadow: [ BoxShadow( diff --git a/lib/views/your_tenders/pages/your_tenders_desktop_page.dart b/lib/views/your_tenders/pages/your_tenders_desktop_page.dart index aab4967..81246b3 100644 --- a/lib/views/your_tenders/pages/your_tenders_desktop_page.dart +++ b/lib/views/your_tenders/pages/your_tenders_desktop_page.dart @@ -2,11 +2,11 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:tm_app/core/constants/strings.dart'; import 'package:tm_app/core/theme/colors.dart'; +import 'package:tm_app/view_models/your_tenders_view_model.dart'; import 'package:tm_app/views/shared/main_tab_bar.dart'; import 'package:tm_app/views/shared/tender_app_bar.dart'; import 'package:tm_app/views/your_tenders/widgets/approved_tenders.dart'; import 'package:tm_app/views/your_tenders/widgets/tenders_submitted.dart'; -import 'package:tm_app/view_models/your_tenders_view_model.dart'; class YourTendersDesktopPage extends StatefulWidget { const YourTendersDesktopPage({super.key}); @@ -54,12 +54,34 @@ class _YourTendersDesktopPageState extends State ], ), Expanded( - child: TabBarView( - controller: controller, - children: const [ - ApprovedTenders(), - TendersSubmitted(), - ], + child: Consumer( + builder: (context, viewModel, child) { + if (viewModel.isLoading) { + return const Center( + child: CircularProgressIndicator( + color: AppColors.secondary50, + ), + ); + } + + if (viewModel.errorMessage != null) { + return Center(child: Text(viewModel.errorMessage!)); + } + + return TabBarView( + controller: controller, + children: [ + ApprovedTenders( + approvedTenders: + viewModel.data?.approvedTenders ?? [], + ), + TendersSubmitted( + tendersSubmitted: + viewModel.data?.tendersSubmitted ?? [], + ), + ], + ); + }, ), ), ], diff --git a/lib/views/your_tenders/pages/your_tenders_mobile_page.dart b/lib/views/your_tenders/pages/your_tenders_mobile_page.dart index 8b7e79e..713a3a3 100644 --- a/lib/views/your_tenders/pages/your_tenders_mobile_page.dart +++ b/lib/views/your_tenders/pages/your_tenders_mobile_page.dart @@ -47,9 +47,32 @@ class _YourTendersMobilePageState extends State titles: [AppStrings.approvedTenders, AppStrings.tenderSubmitted], ), Expanded( - child: TabBarView( - controller: controller, - children: const [ApprovedTenders(), TendersSubmitted()], + child: Consumer( + builder: (context, viewModel, child) { + if (viewModel.isLoading) { + return const Center( + child: CircularProgressIndicator( + color: AppColors.secondary50, + ), + ); + } + + if (viewModel.errorMessage != null) { + return Center(child: Text(viewModel.errorMessage!)); + } + + return TabBarView( + controller: controller, + children: [ + ApprovedTenders( + approvedTenders: viewModel.data?.approvedTenders ?? [], + ), + TendersSubmitted( + tendersSubmitted: viewModel.data?.tendersSubmitted ?? [], + ), + ], + ); + }, ), ), ], diff --git a/lib/views/your_tenders/pages/your_tenders_tablet_page.dart b/lib/views/your_tenders/pages/your_tenders_tablet_page.dart index 3cec2a2..441cfd0 100644 --- a/lib/views/your_tenders/pages/your_tenders_tablet_page.dart +++ b/lib/views/your_tenders/pages/your_tenders_tablet_page.dart @@ -2,11 +2,11 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:tm_app/core/constants/strings.dart'; import 'package:tm_app/core/theme/colors.dart'; +import 'package:tm_app/view_models/your_tenders_view_model.dart'; import 'package:tm_app/views/shared/main_tab_bar.dart'; import 'package:tm_app/views/shared/tender_app_bar.dart'; import 'package:tm_app/views/your_tenders/widgets/approved_tenders.dart'; import 'package:tm_app/views/your_tenders/widgets/tenders_submitted.dart'; -import 'package:tm_app/view_models/your_tenders_view_model.dart'; class YourTendersTabletPage extends StatefulWidget { const YourTendersTabletPage({super.key}); @@ -48,12 +48,40 @@ class _YourTendersTabletPageState extends State children: [ MainTabBar( controller: controller, - titles: [AppStrings.approvedTenders, AppStrings.tenderSubmitted], + titles: [ + AppStrings.approvedTenders, + AppStrings.tenderSubmitted, + ], ), Expanded( - child: TabBarView( - controller: controller, - children: const [ApprovedTenders(), TendersSubmitted()], + child: Consumer( + builder: (context, viewModel, child) { + if (viewModel.isLoading) { + return const Center( + child: CircularProgressIndicator( + color: AppColors.secondary50, + ), + ); + } + + if (viewModel.errorMessage != null) { + return Center(child: Text(viewModel.errorMessage!)); + } + + return TabBarView( + controller: controller, + children: [ + ApprovedTenders( + approvedTenders: + viewModel.data?.approvedTenders ?? [], + ), + TendersSubmitted( + tendersSubmitted: + viewModel.data?.tendersSubmitted ?? [], + ), + ], + ); + }, ), ), ], @@ -63,4 +91,4 @@ class _YourTendersTabletPageState extends State ), ); } -} \ No newline at end of file +} diff --git a/lib/views/your_tenders/widgets/approved_tenders.dart b/lib/views/your_tenders/widgets/approved_tenders.dart index 720f49b..30ff7de 100644 --- a/lib/views/your_tenders/widgets/approved_tenders.dart +++ b/lib/views/your_tenders/widgets/approved_tenders.dart @@ -1,69 +1,59 @@ import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; import 'package:tm_app/core/constants/assets.dart'; import 'package:tm_app/core/theme/colors.dart'; -import 'package:tm_app/view_models/your_tenders_view_model.dart'; import 'package:tm_app/views/your_tenders/widgets/tender_card.dart'; +import '../../../data/services/model/your_tender_model/your_tender_model.dart'; + class ApprovedTenders extends StatelessWidget { - const ApprovedTenders({super.key}); + const ApprovedTenders({required this.approvedTenders, super.key}); + + final List approvedTenders; @override Widget build(BuildContext context) { - final vm = Provider.of(context); - - if (vm.isLoading) { - return const Center(child: CircularProgressIndicator()); - } - - if (vm.errorMessage != null) { - return Center(child: Text(vm.errorMessage!)); - } - - final tenders = vm.data?.approvedTenders ?? []; - return ListView.builder( padding: const EdgeInsets.only(top: 20), - itemCount: tenders.length, + itemCount: approvedTenders.length, itemBuilder: (context, index) { - final t = tenders[index]; + final tender = approvedTenders[index]; return TenderCard( - date: t.date, - title: t.title, - description: t.description, - location: t.location, - countryFlag: t.countryFlag, - status: t.status, - projectStatus: t.projectStatus, + date: tender.date, + title: tender.title, + description: tender.description, + location: tender.location, + countryFlag: tender.countryFlag, + status: tender.status, + projectStatus: tender.projectStatus, backgroundColor: - t.status == 'Won' - ? AppColors.gren0 - : t.status == 'Completed' + tender.status == 'Won' + ? AppColors.green0 + : tender.status == 'Completed' ? AppColors.grey0 : AppColors.red0.withValues(alpha: 0.2), borderColor: - t.status == 'Won' + tender.status == 'Won' ? AppColors.green10 - : t.status == 'Completed' + : tender.status == 'Completed' ? AppColors.grey30 : AppColors.red0, statusIcon: - t.status == 'Won' + tender.status == 'Won' ? AssetsManager.tickCircle - : t.status == 'Completed' + : tender.status == 'Completed' ? null : AssetsManager.closeCircle, statusCardColor: - t.status == 'Won' + tender.status == 'Won' + ? AppColors.green20 + : tender.status == 'Completed' ? AppColors.green20 - : t.status == 'Completed' - ? AppColors.cyanAqua : AppColors.red0, statusTextColor: - t.status == 'Won' - ? AppColors.gren30 - : t.status == 'Completed' - ? AppColors.cyanTeal + tender.status == 'Won' + ? AppColors.green30 + : tender.status == 'Completed' + ? AppColors.green30 : AppColors.red10, ); }, diff --git a/lib/views/your_tenders/widgets/tender_card.dart b/lib/views/your_tenders/widgets/tender_card.dart index 0abe667..ccc869e 100644 --- a/lib/views/your_tenders/widgets/tender_card.dart +++ b/lib/views/your_tenders/widgets/tender_card.dart @@ -84,12 +84,16 @@ class TenderCard extends StatelessWidget { statusIcon!, width: 16.0.w(), height: 16.0.h(), + colorFilter: ColorFilter.mode( + statusTextColor ?? AppColors.green30, + BlendMode.srcIn, + ), ), SizedBox(width: 4.0.w()), Text( status, style: TextStyle( - color: statusTextColor ?? AppColors.gren30, + color: statusTextColor ?? AppColors.green30, fontSize: 12.0.sp(), fontWeight: FontWeight.w500, ), diff --git a/lib/views/your_tenders/widgets/tenders_submitted.dart b/lib/views/your_tenders/widgets/tenders_submitted.dart index a5e091e..e9a5b34 100644 --- a/lib/views/your_tenders/widgets/tenders_submitted.dart +++ b/lib/views/your_tenders/widgets/tenders_submitted.dart @@ -1,70 +1,59 @@ import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; import 'package:tm_app/core/constants/assets.dart'; import 'package:tm_app/core/theme/colors.dart'; -import 'package:tm_app/view_models/your_tenders_view_model.dart'; +import 'package:tm_app/data/services/model/your_tender_model/your_tender_model.dart'; import 'package:tm_app/views/your_tenders/widgets/tender_card.dart'; class TendersSubmitted extends StatelessWidget { - const TendersSubmitted({super.key}); + const TendersSubmitted({required this.tendersSubmitted, super.key}); + + final List tendersSubmitted; @override Widget build(BuildContext context) { - final vm = Provider.of(context); - - if (vm.isLoading) { - return const Center(child: CircularProgressIndicator()); - } - - if (vm.errorMessage != null) { - return Center(child: Text(vm.errorMessage!)); - } - - final tenders = vm.data?.tendersSubmitted ?? []; - return ListView.builder( padding: const EdgeInsets.only(top: 20), - itemCount: tenders.length, + itemCount: tendersSubmitted.length, itemBuilder: (context, index) { - final t = tenders[index]; + final tender = tendersSubmitted[index]; return TenderCard( - date: t.date, - title: t.title, - description: t.description, - location: t.location, - countryFlag: t.countryFlag, - status: t.status, - projectStatus: t.projectStatus, + date: tender.date, + title: tender.title, + description: tender.description, + location: tender.location, + countryFlag: tender.countryFlag, + status: tender.status, + projectStatus: tender.projectStatus, backgroundColor: - t.status == 'Won' - ? AppColors.gren0 - : t.status == 'Completed' - ? AppColors.white - : AppColors.red0.withValues(alpha: 0.2), - borderColor: - t.status == 'Won' - ? AppColors.green10 - : t.status == 'Completed' - ? AppColors.cyanAqua + tender.status == 'Won' + ? AppColors.green0 + : tender.status == 'Completed' + ? AppColors.grey0 : AppColors.red0, + borderColor: + tender.status == 'Won' + ? AppColors.green10 + : tender.status == 'Completed' + ? AppColors.grey30 + : AppColors.red10, statusIcon: - t.status == 'Won' + tender.status == 'Won' ? AssetsManager.tickCircle - : t.status == 'Completed' + : tender.status == 'Completed' ? null : AssetsManager.closeCircle, statusCardColor: - t.status == 'Won' + tender.status == 'Won' ? AppColors.green20 - : t.status == 'Completed' - ? AppColors.cyanAqua - : AppColors.red0, - statusTextColor: - t.status == 'Won' - ? AppColors.gren30 - : t.status == 'Completed' - ? AppColors.cyanTeal + : tender.status == 'Completed' + ? AppColors.blue0 : AppColors.red10, + statusTextColor: + tender.status == 'Won' + ? AppColors.green30 + : tender.status == 'Completed' + ? AppColors.cyanTeal + : AppColors.red20, ); }, );