diff --git a/assets/icons/tick.svg b/assets/icons/tick.svg
new file mode 100644
index 0000000..10807d4
--- /dev/null
+++ b/assets/icons/tick.svg
@@ -0,0 +1,3 @@
+
diff --git a/lib/core/constants/assets.dart b/lib/core/constants/assets.dart
index dcc83a8..148a221 100644
--- a/lib/core/constants/assets.dart
+++ b/lib/core/constants/assets.dart
@@ -22,6 +22,7 @@ class AssetsManager {
static const arrowCircleRight = 'assets/icons/arrow-circle-right.svg';
static const arrowLeftSmall = 'assets/icons/arrow-left-small.svg';
static const arrowRightSmall = 'assets/icons/arrow-right-small.svg';
+ static const tick = 'assets/icons/tick.svg';
//home page
static const arrows = 'assets/icons/arrows.svg';
diff --git a/lib/core/utils/size_config.dart b/lib/core/utils/size_config.dart
index cda31ff..81fef8e 100644
--- a/lib/core/utils/size_config.dart
+++ b/lib/core/utils/size_config.dart
@@ -34,6 +34,7 @@ extension SizeDoubleExt on double {
final double screenWidth = SizeConfig.screenWidth;
final double res = (this / 412.0) * screenWidth;
if (displaySize == DisplaySize.extraSmall
+ // ||
// displaySize == DisplaySize.small
) {
return res;
diff --git a/lib/data/services/home_service.dart b/lib/data/services/home_service.dart
index 5a81dc3..b579a0c 100644
--- a/lib/data/services/home_service.dart
+++ b/lib/data/services/home_service.dart
@@ -25,9 +25,6 @@ class HomeService {
await Future.delayed(Duration(seconds: 2));
appLogger.info('get home success');
// TODO: will change when api is ready
- appLogger.debug(
- HomeResponseModel.fromJson(jsonDecode(homeMockData)['data']),
- );
return Result.ok(
HomeResponseModel.fromJson(jsonDecode(homeMockData)['data']),
);
diff --git a/lib/views/tenders/tenders_screen.dart b/lib/views/tenders/tenders_screen.dart
index 53df727..7a60de9 100644
--- a/lib/views/tenders/tenders_screen.dart
+++ b/lib/views/tenders/tenders_screen.dart
@@ -6,33 +6,9 @@ import '../../core/theme/colors.dart';
import '../../core/utils/size_config.dart';
import 'widgets/main_tenders_slider.dart';
-class TendersScreen extends StatefulWidget {
+class TendersScreen extends StatelessWidget {
const TendersScreen({super.key});
- @override
- State createState() => _TendersScreenState();
-}
-
-class _TendersScreenState extends State
- with SingleTickerProviderStateMixin {
- late final TabController controller;
-
- @override
- void initState() {
- super.initState();
- controller = TabController(length: 2, vsync: this);
- // Add listener to rebuild when tab changes
- controller.addListener(() {
- setState(() {});
- });
- }
-
- @override
- void dispose() {
- controller.dispose();
- super.dispose();
- }
-
@override
Widget build(BuildContext context) {
return SafeArea(
@@ -42,12 +18,7 @@ class _TendersScreenState extends State
body: SingleChildScrollView(
child: Padding(
padding: EdgeInsets.symmetric(vertical: 24.0.h()),
- child: Column(
- children: [
- // MainTabBar(controller: controller),
- MainTendersSlider(),
- ],
- ),
+ child: MainTendersSlider(),
),
),
),
diff --git a/lib/views/tenders/widgets/main_tenders_slider.dart b/lib/views/tenders/widgets/main_tenders_slider.dart
index 7e7c408..2ee327b 100644
--- a/lib/views/tenders/widgets/main_tenders_slider.dart
+++ b/lib/views/tenders/widgets/main_tenders_slider.dart
@@ -21,6 +21,8 @@ class _MainTendersSliderState extends State {
List likedTenders = [];
List dislikedTenders = [];
int currentPage = 1;
+ List rejectedTenders = [];
+ List submittedTenders = [];
void _onDislike(Tender tender) {
if (likedTenders.contains(tender)) {
@@ -74,6 +76,25 @@ class _MainTendersSliderState extends State {
});
}
+ void _onReject(Tender tender) {
+ if (rejectedTenders.contains(tender)) {
+ rejectedTenders.remove(tender);
+ } else {
+ rejectedTenders.add(tender);
+ }
+ setState(() {});
+ }
+
+ void _onSubmit(Tender tender) {
+ if (submittedTenders.contains(tender)) {
+ submittedTenders.remove(tender);
+ } else {
+ submittedTenders.add(tender);
+ }
+
+ setState(() {});
+ }
+
@override
void dispose() {
pageController.dispose();
@@ -86,7 +107,7 @@ class _MainTendersSliderState extends State {
children: [
SizedBox(
width: double.infinity,
- height: 694.0.h(),
+ height: 717.0.h(),
child: PageView.builder(
controller: pageController,
scrollDirection: Axis.horizontal,
@@ -112,6 +133,10 @@ class _MainTendersSliderState extends State {
onDislike: () => _onDislike(tender),
onLike: () => _onLike(tender),
onApply: () => TenderDetailRouteData().push(context),
+ onReject: () => _onReject(tender),
+ onSubmit: () => _onSubmit(tender),
+ rejected: rejectedTenders.contains(tender),
+ submitted: submittedTenders.contains(tender),
);
},
),
diff --git a/lib/views/tenders/widgets/tender_action_buttons.dart b/lib/views/tenders/widgets/tender_action_buttons.dart
index 03b84b4..f03e233 100644
--- a/lib/views/tenders/widgets/tender_action_buttons.dart
+++ b/lib/views/tenders/widgets/tender_action_buttons.dart
@@ -9,16 +9,24 @@ class TenderActionButtons extends StatelessWidget {
final VoidCallback? onLike;
final VoidCallback? onDislike;
final VoidCallback? onClose;
+ final VoidCallback? onReject;
+ final VoidCallback? onSubmit;
final bool isLiked;
final bool isDisliked;
+ final bool rejected;
+ final bool submitted;
const TenderActionButtons({
super.key,
this.onLike,
this.onDislike,
this.onClose,
+ this.onReject,
+ this.onSubmit,
this.isLiked = false,
this.isDisliked = false,
+ this.rejected = false,
+ this.submitted = false,
});
@override
@@ -31,31 +39,129 @@ class TenderActionButtons extends StatelessWidget {
// Dislike button
GestureDetector(
onTap: onDislike,
- child: SvgPicture.asset(
- width: 32.0.w(),
- height: 32.0.w(),
- fit: BoxFit.cover,
- AssetsManager.dislike,
- colorFilter: ColorFilter.mode(
- isDisliked ? AppColors.errorColor : AppColors.grey50,
- BlendMode.srcATop,
- ),
+ child: Column(
+ children: [
+ SvgPicture.asset(
+ width: 32.0.w(),
+ height: 32.0.w(),
+ fit: BoxFit.cover,
+ AssetsManager.dislike,
+ colorFilter: ColorFilter.mode(
+ isDisliked ? AppColors.errorColor : AppColors.grey50,
+ BlendMode.srcATop,
+ ),
+ ),
+ SizedBox(height: 8.0.h()),
+ Text(
+ 'Like',
+ style: TextStyle(
+ fontSize: 12.0.sp(),
+ fontWeight: FontWeight.w400,
+ color: isDisliked ? AppColors.errorColor : AppColors.grey50,
+ ),
+ ),
+ ],
),
),
-
- SizedBox(width: 48.0.w()),
+ SizedBox(width: 32.0.w()),
+ //reject button
+ GestureDetector(
+ onTap: onReject,
+ child: Column(
+ children: [
+ Container(
+ width: 32.0.w(),
+ height: 32.0.w(),
+ decoration: BoxDecoration(
+ shape: BoxShape.circle,
+ border: Border.all(
+ color: rejected ? AppColors.errorColor : AppColors.grey60,
+ width: 1.5.w(),
+ ),
+ ),
+ alignment: Alignment.center,
+ child: Icon(
+ Icons.close,
+ color: rejected ? AppColors.errorColor : AppColors.grey60,
+ size: 16,
+ ),
+ ),
+ SizedBox(height: 8.0.h()),
+ Text(
+ 'Reject',
+ style: TextStyle(
+ fontSize: 12.0.sp(),
+ fontWeight: FontWeight.w400,
+ color: rejected ? AppColors.errorColor : AppColors.grey60,
+ ),
+ ),
+ ],
+ ),
+ ),
+ SizedBox(width: 32.0.w()),
+ //submit button
+ GestureDetector(
+ onTap: onSubmit,
+ child: Column(
+ children: [
+ Container(
+ width: 32.0.w(),
+ height: 32.0.w(),
+ decoration: BoxDecoration(
+ shape: BoxShape.circle,
+ border: Border.all(
+ color:
+ submitted ? AppColors.successColor : AppColors.grey60,
+ width: 1.5.w(),
+ ),
+ ),
+ alignment: Alignment.center,
+ child: SvgPicture.asset(
+ AssetsManager.tick,
+ colorFilter: ColorFilter.mode(
+ submitted ? AppColors.successColor : AppColors.grey60,
+ BlendMode.srcATop,
+ ),
+ ),
+ ),
+ SizedBox(height: 8.0.h()),
+ Text(
+ 'Submit',
+ style: TextStyle(
+ fontSize: 12.0.sp(),
+ fontWeight: FontWeight.w400,
+ color: submitted ? AppColors.successColor : AppColors.grey60,
+ ),
+ ),
+ ],
+ ),
+ ),
+ SizedBox(width: 32.0.w()),
// Like button
GestureDetector(
onTap: onLike,
- child: SvgPicture.asset(
- width: 32.0.w(),
- height: 32.0.w(),
- fit: BoxFit.cover,
- AssetsManager.like,
- colorFilter: ColorFilter.mode(
- isLiked ? AppColors.successColor : AppColors.grey50,
- BlendMode.srcATop,
- ),
+ child: Column(
+ children: [
+ SvgPicture.asset(
+ width: 32.0.w(),
+ height: 32.0.w(),
+ fit: BoxFit.cover,
+ AssetsManager.like,
+ colorFilter: ColorFilter.mode(
+ isLiked ? AppColors.successColor : AppColors.grey50,
+ BlendMode.srcATop,
+ ),
+ ),
+ SizedBox(height: 8.0.h()),
+ Text(
+ 'Like',
+ style: TextStyle(
+ fontSize: 12.0.sp(),
+ fontWeight: FontWeight.w400,
+ color: isLiked ? AppColors.successColor : AppColors.grey50,
+ ),
+ ),
+ ],
),
),
],
diff --git a/lib/views/tenders/widgets/tender_card.dart b/lib/views/tenders/widgets/tender_card.dart
index 5424b54..72ac79d 100644
--- a/lib/views/tenders/widgets/tender_card.dart
+++ b/lib/views/tenders/widgets/tender_card.dart
@@ -22,7 +22,10 @@ class TenderCard extends StatelessWidget {
final VoidCallback? onClose;
final bool isLiked;
final bool isDisliked;
-
+ final VoidCallback? onReject;
+ final VoidCallback? onSubmit;
+ final bool rejected;
+ final bool submitted;
const TenderCard({
required this.date,
required this.deadline,
@@ -38,6 +41,10 @@ class TenderCard extends StatelessWidget {
this.onClose,
this.isLiked = false,
this.isDisliked = false,
+ this.onReject,
+ this.onSubmit,
+ this.rejected = false,
+ this.submitted = false,
super.key,
});
@@ -46,7 +53,9 @@ class TenderCard extends StatelessWidget {
return Column(
children: [
Container(
- width: 364.0.w(),
+ // width: 364.0.w(),
+ width: double.infinity,
+ margin: EdgeInsets.symmetric(horizontal: 16.0.w()),
height: 587.0.h(),
decoration: BoxDecoration(
color: AppColors.grey0,
@@ -255,6 +264,10 @@ class TenderCard extends StatelessWidget {
onDislike: onDislike,
onLike: onLike,
onClose: onClose,
+ onReject: onReject,
+ onSubmit: onSubmit,
+ rejected: rejected,
+ submitted: submitted,
),
],
);