fixed your tenders dark colors and some logic changed
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user