Completed offer pass view

This commit is contained in:
Vinayakkadge04
2025-10-29 14:49:41 +05:30
parent 167f85ad22
commit a8a3a618eb
4 changed files with 260 additions and 1 deletions

View File

@@ -16,6 +16,7 @@ import 'package:citycards_customer/itinerary_creation/views/itinerary_creation_s
import 'package:citycards_customer/itinerary_creation/views/itinerary_creation_view.dart';
import 'package:citycards_customer/itinerary_creation/views/magic_itinerary_empty_view.dart';
import 'package:citycards_customer/itinerary_creation/views/magic_itinerary_filled_view.dart';
import 'package:citycards_customer/offer_pass_detail/offer_pass_detail_view.dart';
import 'package:citycards_customer/privacy/privacy_view.dart';
import 'package:citycards_customer/search_offers/bloc/search_offers_listing_bloc.dart';
import 'package:citycards_customer/search_offers/view/search_offers_with_listing.dart';
@@ -191,6 +192,11 @@ class AppRouter {
return MaterialPageRoute(builder: (_){
return MagicItineraryFilledView();
});
case RouteConstants.offerPassDetail:
return MaterialPageRoute(builder: (_){
return OfferPassDetailView();
});
default:
return MaterialPageRoute(
builder: (_) =>

View File

@@ -39,6 +39,7 @@ class RouteConstants {
static const String searchOffer = '/searchOffer';
static const String createAcct = '/createAcct';
static const String addDetails = '/addDetails';
static const String offerPassDetail = "/offerPassDetail";
/************************** My card page ***************************************/

View File

@@ -29,7 +29,7 @@ class MyApp extends StatelessWidget {
builder: (context, child) {
return MaterialApp(
onGenerateRoute: _appRouter.onGenerateRoute,
initialRoute: RouteConstants.cartPage,
initialRoute: RouteConstants.offerPassDetail,
debugShowCheckedModeBanner: false,
title: 'City Cards',
theme: ThemeData(

View File

@@ -0,0 +1,252 @@
import 'package:citycards_customer/attraction_details/share_bottomsheet.dart';
import 'package:citycards_customer/common_packages/app_bar.dart';
import 'package:citycards_customer/common_packages/custom_bullet_points.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
class OfferPassDetailView extends StatelessWidget {
const OfferPassDetailView({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: SafeArea(
child: SingleChildScrollView(
child: Column(
children: [
Stack(
children: [
Image.asset(
'assets/images/koh_rong_samloem_banner.png',
height: 377.h,
width: double.infinity,
fit: BoxFit.cover,
),
Positioned(
top: 0,
left: 0,
right: 0,
child: SafeArea(
child: Padding(
padding: EdgeInsets.symmetric(
horizontal: 20.w,
vertical: 10.h,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
CommonAppBar(
isWhiteLogo: true,
isProfilePage: false,
),
SizedBox(height: 10.h),
Divider(
color: Colors.white.withOpacity(0.6),
height: 1.h,
),
SizedBox(height: 8.h),
Row(
children: [
GestureDetector(
onTap: () => Navigator.pop(context),
child: Icon(
Icons.arrow_back,
size: 24.sp,
color: Colors.white,
),
),
SizedBox(width: 8.w),
Text(
"Aster Hotels",
style: TextStyle(
fontSize: 14.sp,
fontWeight: FontWeight.w600,
color: Colors.white,
),
),
],
),
],
),
),
),
),
Positioned(
bottom: 31.h,
left: 12.w,
child: Text(
"Aster \nHotels",
style: TextStyle(
color: Colors.white,
fontSize: 48.sp,
fontWeight: FontWeight.w500,
height: 1.2,
),
),
),
Positioned(
bottom: 31.h,
right: 17.w,
child: GestureDetector(
onTap: () {
showModalBottomSheet(
context: context,
isScrollControlled: true,
backgroundColor: Colors.transparent,
builder: (context) => const ShareBottomSheet(),
);
},
child: Container(
height: 36.h,
width: 36.w,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(20.r),
),
child: Center(
child: Icon(
Icons.share_sharp,
color: Colors.black,
size: 18.sp,
),
),
),
),
),
],
),
Padding(
padding: EdgeInsets.symmetric(
horizontal: 20.0.w,
vertical: 30.5.h,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"About Aster Hotels",
style: TextStyle(
fontSize: 18.sp,
fontWeight: FontWeight.w600,
),
),
SizedBox(height: 8.h),
Text(
"20% Off on dining and drinks on purchase upto \$500 T&Cs* apply",
style: TextStyle(
fontSize: 14.sp,
color: Colors.black,
fontWeight: FontWeight.w400,
),
),
SizedBox(height: 10.h),
Text(
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
"Convallis condimentum morbi non egestas enim amet sagittis. "
"Proin sed aliquet rhoncus ut pellentesque ullamcorper sit eget ac. "
"Sit nisi, cras amet varius eget egestas pellentesque. Cursus gravida euismod non...",
style: TextStyle(
fontSize: 14.sp,
height: 1.4,
color: const Color(0xFF656565),
),
),
SizedBox(height: 40.h),
// How to make booking
Text(
"How to make a booking?",
style: TextStyle(
fontSize: 18.sp,
fontWeight: FontWeight.w400,
),
),
SizedBox(height: 16.h),
CustomBulletPoints(
text:
"Check the expiration date of your coupon to ensure it's still valid.",
textColor: Color(0xFF656565),
),
CustomBulletPoints(
text:
"Visit the store or website where the coupon can be redeemed.",
textColor: Color(0xFF656565),
),
CustomBulletPoints(
text:
"If shopping online, add items to your cart and proceed to checkout.",
textColor: Color(0xFF656565),
),
CustomBulletPoints(
text:
"Look for a field labeled 'Coupon Code' or 'Promo Code' during checkout.",
textColor: Color(0xFF656565),
),
CustomBulletPoints(
text:
"Enter your coupon code exactly as it appears, including any special characters.",
textColor: Color(0xFF656565),
),
SizedBox(height: 24.h),
// Coupon Box
Container(
width: double.infinity,
height: 48.h,
padding: EdgeInsets.symmetric(
vertical: 12.h,
horizontal: 24.w,
),
decoration: BoxDecoration(
color: const Color(0xFFFEE7E7),
borderRadius: BorderRadius.circular(10.r),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"AFJIJFJ500",
style: TextStyle(
fontSize: 14.sp,
fontWeight: FontWeight.w600,
letterSpacing: 0.5,
),
),
GestureDetector(
onTap: () {
Clipboard.setData(
const ClipboardData(text: "AFJIJFJ500"),
);
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text("Coupon code copied!"),
duration: Duration(seconds: 1),
),
);
},
child: Icon(
Icons.copy_outlined,
color: Color(0xFF464646),
size: 20.sp,
),
),
],
),
),
],
),
),
],
),
),
),
);
}
}