check web and tablet for logic

This commit is contained in:
amirrezaghabeli
2025-08-23 15:22:28 +03:30
parent b00ba07122
commit 14ab9a75ca
27 changed files with 569 additions and 282 deletions
@@ -4,8 +4,8 @@ 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/tablet_desktop_appbar.dart';
import 'package:tm_app/views/your_tenders/widgets/tenders_submitted.dart';
class YourTendersDesktopPage extends StatefulWidget {
@@ -40,12 +40,15 @@ class _YourTendersDesktopPageState extends State<YourTendersDesktopPage>
return SafeArea(
child: Scaffold(
backgroundColor: AppColors.backgroundColor,
appBar: tenderMobileAppBar(title: AppStrings.yourTenders),
body: Center(
child: SizedBox(
width: 740,
child: Column(
children: [
SizedBox(height: 128.0),
TabletDesktopAppbar(),
SizedBox(height: 20.0),
MainTabBar(
controller: controller,
titles: [
@@ -71,13 +74,8 @@ class _YourTendersDesktopPageState extends State<YourTendersDesktopPage>
return TabBarView(
controller: controller,
children: [
ApprovedTenders(
approvedTenders: viewModel.data!,
),
TendersSubmitted(
tendersSubmitted:
[],
),
ApprovedTenders(tendersSubmitted: []),
TendersSubmitted(approvedTenders: viewModel.data!),
],
);
},
@@ -64,12 +64,8 @@ class _YourTendersMobilePageState extends State<YourTendersMobilePage>
return TabBarView(
controller: controller,
children: [
ApprovedTenders(
approvedTenders: viewModel.data!,
),
TendersSubmitted(
tendersSubmitted: [],
),
ApprovedTenders(tendersSubmitted: []),
TendersSubmitted(approvedTenders: viewModel.data!),
],
);
},
@@ -2,10 +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/core/utils/size_config.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/tablet_desktop_appbar.dart';
import 'package:tm_app/views/your_tenders/widgets/tenders_submitted.dart';
class YourTendersTabletPage extends StatefulWidget {
@@ -40,12 +41,18 @@ class _YourTendersTabletPageState extends State<YourTendersTabletPage>
return SafeArea(
child: Scaffold(
backgroundColor: AppColors.backgroundColor,
appBar: tenderMobileAppBar(title: AppStrings.yourTenders),
body: Center(
child: SizedBox(
width: 720,
child: Column(
children: [
SizedBox(height: 64.0.h()),
Padding(
padding: EdgeInsets.symmetric(horizontal: 8.0.w()),
child: TabletDesktopAppbar(),
),
SizedBox(height: 24.0.h()),
MainTabBar(
controller: controller,
titles: [
@@ -71,12 +78,8 @@ class _YourTendersTabletPageState extends State<YourTendersTabletPage>
return TabBarView(
controller: controller,
children: [
ApprovedTenders(
approvedTenders: viewModel.data!,
),
TendersSubmitted(
tendersSubmitted: [],
),
ApprovedTenders(tendersSubmitted: []),
TendersSubmitted(approvedTenders: viewModel.data!),
],
);
},
@@ -1,64 +1,63 @@
import 'package:flutter/material.dart';
import 'package:tm_app/core/constants/assets.dart';
import 'package:tm_app/core/theme/colors.dart';
import 'package:tm_app/data/services/model/tender_approvals_response/tender_approvals_response.dart';
import 'package:tm_app/views/your_tenders/widgets/tender_card.dart';
class ApprovedTenders extends StatelessWidget {
const ApprovedTenders({required this.approvedTenders, super.key});
import '../../../data/services/model/your_tender_model/your_tender_model.dart';
final TenderApprovalsResponse approvedTenders;
class ApprovedTenders extends StatelessWidget {
const ApprovedTenders({required this.tendersSubmitted, super.key});
final List<YourTenderModel> tendersSubmitted;
@override
Widget build(BuildContext context) {
return approvedTenders.data == null
? const Center(child: Text('No approved projects yet.'))
: ListView.builder(
padding: const EdgeInsets.only(top: 20),
itemCount: approvedTenders.data!.length,
itemBuilder: (context, index) {
final tender = approvedTenders.data![index];
return TenderCard(
date: tender.createdAt!.toString(),
title: tender.tender!.title!,
description: tender.tender!.description!,
location: tender.tender!.countryCode!,
countryFlag: AssetsManager.seFlag,
status: tender.status,
countryCode: tender.tender!.countryCode!,
projectStatus: tender.tender!.status!,
backgroundColor:
tender.status == 'Won'
? AppColors.green0
: tender.status == 'approved'
? AppColors.grey0
: AppColors.red0.withValues(alpha: 0.2),
borderColor:
tender.status == 'Won'
? AppColors.green10
: tender.status == 'approved'
? AppColors.grey30
: AppColors.red0,
statusIcon:
tender.status == 'Won'
? AssetsManager.tickCircle
: tender.status == 'approved'
? null
: AssetsManager.closeCircle,
statusCardColor:
tender.status == 'Won'
? AppColors.green20
: tender.status == 'approved'
? AppColors.green20
: AppColors.red0,
statusTextColor:
tender.status == 'Won'
? AppColors.green30
: tender.status == 'approved'
? AppColors.green30
: AppColors.red10,
);
},
return ListView.builder(
padding: const EdgeInsets.only(top: 20),
itemCount: tendersSubmitted.length,
itemBuilder: (context, index) {
final tender = tendersSubmitted[index];
return TenderCard(
date: tender.date,
title: tender.title,
description: tender.description,
location: tender.location,
countryFlag: tender.countryFlag,
status: tender.status,
countryCode: '',
projectStatus: tender.projectStatus,
backgroundColor:
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:
tender.status == 'Won'
? AssetsManager.tickCircle
: tender.status == 'Completed'
? null
: AssetsManager.closeCircle,
statusCardColor:
tender.status == 'Won'
? AppColors.green20
: tender.status == 'Completed'
? AppColors.blue0
: AppColors.red10,
statusTextColor:
tender.status == 'Won'
? AppColors.green30
: tender.status == 'Completed'
? AppColors.cyanTeal
: AppColors.red20,
);
},
);
}
}
@@ -0,0 +1,33 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:go_router/go_router.dart';
import 'package:tm_app/core/utils/size_config.dart';
import '../../../core/constants/assets.dart';
import '../../../core/constants/strings.dart';
import '../../../core/theme/colors.dart';
class TabletDesktopAppbar extends StatelessWidget {
const TabletDesktopAppbar({super.key});
@override
Widget build(BuildContext context) {
return Row(
children: [
InkWell(
onTap: () => context.pop(),
child: SvgPicture.asset(AssetsManager.arrowLeft),
),
SizedBox(width: 8.0.w()),
Text(
AppStrings.yourTendersTitle,
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.w600,
color: AppColors.grey70,
),
),
],
);
}
}
@@ -1,62 +1,65 @@
import 'package:flutter/material.dart';
import 'package:tm_app/core/constants/assets.dart';
import 'package:tm_app/core/theme/colors.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({required this.tendersSubmitted, super.key});
import '../../../data/services/model/tender_approvals_response/tender_approvals_response.dart';
final List<YourTenderModel> tendersSubmitted;
class TendersSubmitted extends StatelessWidget {
const TendersSubmitted({required this.approvedTenders, super.key});
final TenderApprovalsResponse approvedTenders;
@override
Widget build(BuildContext context) {
return ListView.builder(
padding: const EdgeInsets.only(top: 20),
itemCount: tendersSubmitted.length,
itemBuilder: (context, index) {
final tender = tendersSubmitted[index];
return TenderCard(
date: tender.date,
title: tender.title,
description: tender.description,
location: tender.location,
countryFlag: tender.countryFlag,
status: tender.status,
countryCode: '',
projectStatus: tender.projectStatus,
backgroundColor:
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:
tender.status == 'Won'
? AssetsManager.tickCircle
: tender.status == 'Completed'
? null
: AssetsManager.closeCircle,
statusCardColor:
tender.status == 'Won'
? AppColors.green20
: tender.status == 'Completed'
? AppColors.blue0
: AppColors.red10,
statusTextColor:
tender.status == 'Won'
? AppColors.green30
: tender.status == 'Completed'
? AppColors.cyanTeal
: AppColors.red20,
return approvedTenders.data == null
? const Center(child: Text('No approved projects yet.'))
: ListView.builder(
padding: const EdgeInsets.only(top: 20),
itemCount: approvedTenders.data!.length,
itemBuilder: (context, index) {
final tender = approvedTenders.data![index];
return TenderCard(
date: tender.createdAt!.toString(),
title: tender.tender!.title!,
description: tender.tender!.description!,
location: tender.tender!.countryCode!,
countryFlag: AssetsManager.seFlag,
status: tender.status,
countryCode: tender.tender!.countryCode!,
projectStatus: tender.tender!.status!,
backgroundColor:
tender.status == 'Won'
? AppColors.green0
: tender.status == 'approved'
? AppColors.grey0
: AppColors.red0.withValues(alpha: 0.2),
borderColor:
tender.status == 'Won'
? AppColors.green10
: tender.status == 'approved'
? AppColors.grey30
: AppColors.red0,
statusIcon:
tender.status == 'Won'
? AssetsManager.tickCircle
: tender.status == 'approved'
? null
: AssetsManager.closeCircle,
statusCardColor:
tender.status == 'Won'
? AppColors.green20
: tender.status == 'approved'
? AppColors.green20
: AppColors.red0,
statusTextColor:
tender.status == 'Won'
? AppColors.green30
: tender.status == 'approved'
? AppColors.green30
: AppColors.red10,
);
},
);
},
);
}
}