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 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
+1 -1
View File
@@ -30,7 +30,7 @@ class _MainTabBarState extends State<MainTabBar> {
indicatorSize: TabBarIndicatorSize.tab,
dividerColor: Colors.transparent,
indicator: BoxDecoration(
color: AppColors.backgroundColor,
color: AppColors.primary0,
borderRadius: BorderRadius.circular(10),
boxShadow: [
BoxShadow(
@@ -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<YourTendersDesktopPage>
],
),
Expanded(
child: TabBarView(
controller: controller,
children: const [
ApprovedTenders(),
TendersSubmitted(),
],
child: Consumer<YourTendersViewModel>(
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 ?? [],
),
],
);
},
),
),
],
@@ -47,9 +47,32 @@ class _YourTendersMobilePageState extends State<YourTendersMobilePage>
titles: [AppStrings.approvedTenders, AppStrings.tenderSubmitted],
),
Expanded(
child: TabBarView(
controller: controller,
children: const [ApprovedTenders(), TendersSubmitted()],
child: Consumer<YourTendersViewModel>(
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 ?? [],
),
],
);
},
),
),
],
@@ -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<YourTendersTabletPage>
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<YourTendersViewModel>(
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 ?? [],
),
],
);
},
),
),
],
@@ -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<YourTenderModel> approvedTenders;
@override
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(
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,
);
},
@@ -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,
),
@@ -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<YourTenderModel> tendersSubmitted;
@override
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(
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,
);
},
);