fixed your tenders dark colors and some logic changed

This commit is contained in:
amirrezaghabeli
2025-08-13 11:11:29 +03:30
parent d80ee195b5
commit 1f2dbb21da
8 changed files with 181 additions and 109 deletions
+24 -8
View File
@@ -51,7 +51,8 @@ class AppColors {
static const Color jellyBean = Color(0xFF34BCCB); static const Color jellyBean = Color(0xFF34BCCB);
static const Color grey = Color(0xFF555555); 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 => static Color get grey10 =>
_isDarkMode ? const Color(0xFF292929) : const Color(0xFFF4F4F4); _isDarkMode ? const Color(0xFF292929) : const Color(0xFFF4F4F4);
@@ -121,18 +122,33 @@ class AppColors {
static Color get veryPaleOrange => static Color get veryPaleOrange =>
_isDarkMode ? const Color(0xFF581010) : const Color(0xFFFFE4C9); _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 // Primary color variations
static const Color primary2 = Color(0xFFE5EFFF); static const Color primary2 = Color(0xFFE5EFFF);
static const Color secondary50 = Color(0xFF34BCCB); 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) // Red variations (status colors)
static const Color red0 = Color(0xFFF8D6D6); // static const Color red0 = Color(0xFF312F2F);
static const Color red10 = Color(0xFFC02525); // static const Color red10 = Color(0xFF524545);
static const Color red = Color(0xFFFF3B30); static const Color red = Color(0xFFFF3B30);
// Other colors // Other colors
+1 -1
View File
@@ -30,7 +30,7 @@ class _MainTabBarState extends State<MainTabBar> {
indicatorSize: TabBarIndicatorSize.tab, indicatorSize: TabBarIndicatorSize.tab,
dividerColor: Colors.transparent, dividerColor: Colors.transparent,
indicator: BoxDecoration( indicator: BoxDecoration(
color: AppColors.backgroundColor, color: AppColors.primary0,
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
boxShadow: [ boxShadow: [
BoxShadow( BoxShadow(
@@ -2,11 +2,11 @@ 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/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/views/shared/main_tab_bar.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/shared/tender_app_bar.dart';
import 'package:tm_app/views/your_tenders/widgets/approved_tenders.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/views/your_tenders/widgets/tenders_submitted.dart';
import 'package:tm_app/view_models/your_tenders_view_model.dart';
class YourTendersDesktopPage extends StatefulWidget { class YourTendersDesktopPage extends StatefulWidget {
const YourTendersDesktopPage({super.key}); const YourTendersDesktopPage({super.key});
@@ -54,12 +54,34 @@ class _YourTendersDesktopPageState extends State<YourTendersDesktopPage>
], ],
), ),
Expanded( Expanded(
child: TabBarView( child: Consumer<YourTendersViewModel>(
controller: controller, builder: (context, viewModel, child) {
children: const [ if (viewModel.isLoading) {
ApprovedTenders(), return const Center(
TendersSubmitted(), 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 ?? [],
),
],
);
},
), ),
), ),
], ],
@@ -47,9 +47,32 @@ class _YourTendersMobilePageState extends State<YourTendersMobilePage>
titles: [AppStrings.approvedTenders, AppStrings.tenderSubmitted], titles: [AppStrings.approvedTenders, AppStrings.tenderSubmitted],
), ),
Expanded( Expanded(
child: TabBarView( child: Consumer<YourTendersViewModel>(
controller: controller, builder: (context, viewModel, child) {
children: const [ApprovedTenders(), TendersSubmitted()], 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 ?? [],
),
],
);
},
), ),
), ),
], ],
@@ -2,11 +2,11 @@ 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/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/views/shared/main_tab_bar.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/shared/tender_app_bar.dart';
import 'package:tm_app/views/your_tenders/widgets/approved_tenders.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/views/your_tenders/widgets/tenders_submitted.dart';
import 'package:tm_app/view_models/your_tenders_view_model.dart';
class YourTendersTabletPage extends StatefulWidget { class YourTendersTabletPage extends StatefulWidget {
const YourTendersTabletPage({super.key}); const YourTendersTabletPage({super.key});
@@ -48,12 +48,40 @@ class _YourTendersTabletPageState extends State<YourTendersTabletPage>
children: [ children: [
MainTabBar( MainTabBar(
controller: controller, controller: controller,
titles: [AppStrings.approvedTenders, AppStrings.tenderSubmitted], titles: [
AppStrings.approvedTenders,
AppStrings.tenderSubmitted,
],
), ),
Expanded( Expanded(
child: TabBarView( child: Consumer<YourTendersViewModel>(
controller: controller, builder: (context, viewModel, child) {
children: const [ApprovedTenders(), TendersSubmitted()], 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<YourTendersTabletPage>
), ),
); );
} }
} }
@@ -1,69 +1,59 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.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/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/views/your_tenders/widgets/tender_card.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 { class ApprovedTenders extends StatelessWidget {
const ApprovedTenders({super.key}); const ApprovedTenders({required this.approvedTenders, super.key});
final List<YourTenderModel> approvedTenders;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final vm = Provider.of<YourTendersViewModel>(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( return ListView.builder(
padding: const EdgeInsets.only(top: 20), padding: const EdgeInsets.only(top: 20),
itemCount: tenders.length, itemCount: approvedTenders.length,
itemBuilder: (context, index) { itemBuilder: (context, index) {
final t = tenders[index]; final tender = approvedTenders[index];
return TenderCard( return TenderCard(
date: t.date, date: tender.date,
title: t.title, title: tender.title,
description: t.description, description: tender.description,
location: t.location, location: tender.location,
countryFlag: t.countryFlag, countryFlag: tender.countryFlag,
status: t.status, status: tender.status,
projectStatus: t.projectStatus, projectStatus: tender.projectStatus,
backgroundColor: backgroundColor:
t.status == 'Won' tender.status == 'Won'
? AppColors.gren0 ? AppColors.green0
: t.status == 'Completed' : tender.status == 'Completed'
? AppColors.grey0 ? AppColors.grey0
: AppColors.red0.withValues(alpha: 0.2), : AppColors.red0.withValues(alpha: 0.2),
borderColor: borderColor:
t.status == 'Won' tender.status == 'Won'
? AppColors.green10 ? AppColors.green10
: t.status == 'Completed' : tender.status == 'Completed'
? AppColors.grey30 ? AppColors.grey30
: AppColors.red0, : AppColors.red0,
statusIcon: statusIcon:
t.status == 'Won' tender.status == 'Won'
? AssetsManager.tickCircle ? AssetsManager.tickCircle
: t.status == 'Completed' : tender.status == 'Completed'
? null ? null
: AssetsManager.closeCircle, : AssetsManager.closeCircle,
statusCardColor: statusCardColor:
t.status == 'Won' tender.status == 'Won'
? AppColors.green20
: tender.status == 'Completed'
? AppColors.green20 ? AppColors.green20
: t.status == 'Completed'
? AppColors.cyanAqua
: AppColors.red0, : AppColors.red0,
statusTextColor: statusTextColor:
t.status == 'Won' tender.status == 'Won'
? AppColors.gren30 ? AppColors.green30
: t.status == 'Completed' : tender.status == 'Completed'
? AppColors.cyanTeal ? AppColors.green30
: AppColors.red10, : AppColors.red10,
); );
}, },
@@ -84,12 +84,16 @@ class TenderCard extends StatelessWidget {
statusIcon!, statusIcon!,
width: 16.0.w(), width: 16.0.w(),
height: 16.0.h(), height: 16.0.h(),
colorFilter: ColorFilter.mode(
statusTextColor ?? AppColors.green30,
BlendMode.srcIn,
),
), ),
SizedBox(width: 4.0.w()), SizedBox(width: 4.0.w()),
Text( Text(
status, status,
style: TextStyle( style: TextStyle(
color: statusTextColor ?? AppColors.gren30, color: statusTextColor ?? AppColors.green30,
fontSize: 12.0.sp(), fontSize: 12.0.sp(),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
), ),
@@ -1,70 +1,59 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.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/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/data/services/model/your_tender_model/your_tender_model.dart';
import 'package:tm_app/views/your_tenders/widgets/tender_card.dart'; import 'package:tm_app/views/your_tenders/widgets/tender_card.dart';
class TendersSubmitted extends StatelessWidget { class TendersSubmitted extends StatelessWidget {
const TendersSubmitted({super.key}); const TendersSubmitted({required this.tendersSubmitted, super.key});
final List<YourTenderModel> tendersSubmitted;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final vm = Provider.of<YourTendersViewModel>(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( return ListView.builder(
padding: const EdgeInsets.only(top: 20), padding: const EdgeInsets.only(top: 20),
itemCount: tenders.length, itemCount: tendersSubmitted.length,
itemBuilder: (context, index) { itemBuilder: (context, index) {
final t = tenders[index]; final tender = tendersSubmitted[index];
return TenderCard( return TenderCard(
date: t.date, date: tender.date,
title: t.title, title: tender.title,
description: t.description, description: tender.description,
location: t.location, location: tender.location,
countryFlag: t.countryFlag, countryFlag: tender.countryFlag,
status: t.status, status: tender.status,
projectStatus: t.projectStatus, projectStatus: tender.projectStatus,
backgroundColor: backgroundColor:
t.status == 'Won' tender.status == 'Won'
? AppColors.gren0 ? AppColors.green0
: t.status == 'Completed' : tender.status == 'Completed'
? AppColors.white ? AppColors.grey0
: AppColors.red0.withValues(alpha: 0.2),
borderColor:
t.status == 'Won'
? AppColors.green10
: t.status == 'Completed'
? AppColors.cyanAqua
: AppColors.red0, : AppColors.red0,
borderColor:
tender.status == 'Won'
? AppColors.green10
: tender.status == 'Completed'
? AppColors.grey30
: AppColors.red10,
statusIcon: statusIcon:
t.status == 'Won' tender.status == 'Won'
? AssetsManager.tickCircle ? AssetsManager.tickCircle
: t.status == 'Completed' : tender.status == 'Completed'
? null ? null
: AssetsManager.closeCircle, : AssetsManager.closeCircle,
statusCardColor: statusCardColor:
t.status == 'Won' tender.status == 'Won'
? AppColors.green20 ? AppColors.green20
: t.status == 'Completed' : tender.status == 'Completed'
? AppColors.cyanAqua ? AppColors.blue0
: AppColors.red0,
statusTextColor:
t.status == 'Won'
? AppColors.gren30
: t.status == 'Completed'
? AppColors.cyanTeal
: AppColors.red10, : AppColors.red10,
statusTextColor:
tender.status == 'Won'
? AppColors.green30
: tender.status == 'Completed'
? AppColors.cyanTeal
: AppColors.red20,
); );
}, },
); );