Completed offer pass view
This commit is contained in:
@@ -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/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_empty_view.dart';
|
||||||
import 'package:citycards_customer/itinerary_creation/views/magic_itinerary_filled_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/privacy/privacy_view.dart';
|
||||||
import 'package:citycards_customer/search_offers/bloc/search_offers_listing_bloc.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';
|
import 'package:citycards_customer/search_offers/view/search_offers_with_listing.dart';
|
||||||
@@ -191,6 +192,11 @@ class AppRouter {
|
|||||||
return MaterialPageRoute(builder: (_){
|
return MaterialPageRoute(builder: (_){
|
||||||
return MagicItineraryFilledView();
|
return MagicItineraryFilledView();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
case RouteConstants.offerPassDetail:
|
||||||
|
return MaterialPageRoute(builder: (_){
|
||||||
|
return OfferPassDetailView();
|
||||||
|
});
|
||||||
default:
|
default:
|
||||||
return MaterialPageRoute(
|
return MaterialPageRoute(
|
||||||
builder: (_) =>
|
builder: (_) =>
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ class RouteConstants {
|
|||||||
static const String searchOffer = '/searchOffer';
|
static const String searchOffer = '/searchOffer';
|
||||||
static const String createAcct = '/createAcct';
|
static const String createAcct = '/createAcct';
|
||||||
static const String addDetails = '/addDetails';
|
static const String addDetails = '/addDetails';
|
||||||
|
static const String offerPassDetail = "/offerPassDetail";
|
||||||
|
|
||||||
|
|
||||||
/************************** My card page ***************************************/
|
/************************** My card page ***************************************/
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ class MyApp extends StatelessWidget {
|
|||||||
builder: (context, child) {
|
builder: (context, child) {
|
||||||
return MaterialApp(
|
return MaterialApp(
|
||||||
onGenerateRoute: _appRouter.onGenerateRoute,
|
onGenerateRoute: _appRouter.onGenerateRoute,
|
||||||
initialRoute: RouteConstants.cartPage,
|
initialRoute: RouteConstants.offerPassDetail,
|
||||||
debugShowCheckedModeBanner: false,
|
debugShowCheckedModeBanner: false,
|
||||||
title: 'City Cards',
|
title: 'City Cards',
|
||||||
theme: ThemeData(
|
theme: ThemeData(
|
||||||
|
|||||||
252
lib/offer_pass_detail/offer_pass_detail_view.dart
Normal file
252
lib/offer_pass_detail/offer_pass_detail_view.dart
Normal 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,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user