Flexi rename into Selective and mad taht dynamic and bug fixes

This commit is contained in:
mystery012728
2026-01-07 18:27:24 +05:30
parent b77bcea769
commit 22f2de1bbe
12 changed files with 106 additions and 82 deletions

View File

@@ -1,3 +1,5 @@
import 'package:citycards_customer/common_packages/common_app_texts.dart';
import '../models/attraction_model.dart';
class AttractionsRepository {
@@ -8,7 +10,7 @@ class AttractionsRepository {
location: "Krong Siem Reap",
price: "\$25",
image: "assets/dummy/dummy_1.jpg",
tags: ["Unlimited Card", "Flexi Card"],
tags: ["Unlimited Card", "${CommonAppText.selectiveCard} Card"],
isBookingRequired: false,
description:
"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... ",
@@ -28,7 +30,7 @@ class AttractionsRepository {
location: "Krong Siem Reap",
price: "\$25",
image: "assets/dummy/dummy_3.jpg",
tags: ["Unlimited Card", "Flexi Card"],
tags: ["Unlimited Card", "${CommonAppText.selectiveCard} Card"],
isBookingRequired: false,
description:
"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... ",
@@ -38,7 +40,7 @@ class AttractionsRepository {
location: "Krong Siem Reap",
price: "\$25",
image: "assets/dummy/dummy_4.jpg",
tags: ["Flexi Card"],
tags: ["${CommonAppText.selectiveCard} Card"],
isBookingRequired: false,
description:
"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... ",
@@ -48,7 +50,7 @@ class AttractionsRepository {
location: "Krong Siem Reap",
price: "\$25",
image: "assets/dummy/dummy_5.jpg",
tags: ["Unlimited Card", "Flexi Card"],
tags: ["Unlimited Card", "${CommonAppText.selectiveCard} Card"],
isBookingRequired: false,
description:
"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... ",
@@ -63,7 +65,7 @@ class AttractionsRepository {
location: "Krong Siem Reap",
price: "\$25",
image: "assets/dummy/dummy_1.jpg",
tags: ["Unlimited Card", "Flexi Card"],
tags: ["Unlimited Card", "${CommonAppText.selectiveCard} Card"],
isBookingRequired: true,
description:
"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... ",
@@ -83,7 +85,7 @@ class AttractionsRepository {
location: "Krong Siem Reap",
price: "\$25",
image: "assets/dummy/dummy_3.jpg",
tags: ["Unlimited Card", "Flexi Card"],
tags: ["Unlimited Card", "${CommonAppText.selectiveCard} Card"],
isBookingRequired: true,
description:
"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... ",
@@ -93,7 +95,7 @@ class AttractionsRepository {
location: "Krong Siem Reap",
price: "\$25",
image: "assets/dummy/dummy_4.jpg",
tags: ["Flexi Card"],
tags: ["${CommonAppText.selectiveCard} Card"],
isBookingRequired: true,
description:
"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... ",
@@ -103,7 +105,7 @@ class AttractionsRepository {
location: "Krong Siem Reap",
price: "\$25",
image: "assets/dummy/dummy_5.jpg",
tags: ["Unlimited Card", "Flexi Card"],
tags: ["Unlimited Card", "${CommonAppText.selectiveCard} Card"],
isBookingRequired: true,
description:
"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... ",

View File

@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import '../../common_packages/common_app_texts.dart';
import '../../core/route_constants.dart';
import '../models/attraction_model.dart';
@@ -86,13 +87,13 @@ class AttractionCard extends StatelessWidget {
vertical: 4,
),
decoration: BoxDecoration(
color: tag == "Flexi Card"
color: tag == "${CommonAppText.selectiveCard} Card"
? const Color(0xffF95FAF).withOpacity(0.1)
: const Color(
0xffF95F62,
).withOpacity(0.1),
border: Border.all(
color: tag == "Flexi Card"
color: tag == "${CommonAppText.selectiveCard} Card"
? const Color(0xffF95FAF)
: const Color(0xffF95F62),
),

View File

@@ -7,6 +7,8 @@ import 'package:citycards_customer/core/route_constants.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import '../../common_packages/common_app_texts.dart';
class BuyPassView extends StatelessWidget {
BuyPassView({super.key});
@@ -68,9 +70,9 @@ class BuyPassView extends StatelessWidget {
scrollDirection: Axis.horizontal,
child: Row(
children: [
PassCardView(themeColor: Color(0xFFF95FAF)),
PassCardView(themeColor: Color(0xFFF97316)),
SizedBox(width: 12.w),
PassCardView(themeColor: Color(0xFF1E8AF6)),
PassCardView(themeColor: Color(0xFF1E8AF6),),
],
),
),
@@ -217,7 +219,7 @@ class BuyPassView extends StatelessWidget {
Center(
child: PaymentCard(
city: 'Melbourne',
tag: 'Flexi Card',
tag: '${CommonAppText.selectiveCard} Card',
oldPrice: 120,
newPrice: 90,
),

View File

@@ -1,6 +1,8 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import '../../common_packages/common_app_texts.dart';
class FeatureTable extends StatelessWidget {
const FeatureTable({super.key});
@@ -66,7 +68,7 @@ class FeatureTable extends StatelessWidget {
padding: EdgeInsets.symmetric(vertical: 6.h),
child: Center(
child: Text(
'Flexi',
'${CommonAppText.selectiveCard}',
style: TextStyle(fontWeight: FontWeight.w500, fontSize: 16.sp),
),
),

View File

@@ -2,6 +2,8 @@ import 'package:citycards_customer/common_packages/custom_text.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import '../../common_packages/common_app_texts.dart';
class PassCardView extends StatelessWidget {
final Color? themeColor;
final String? city;
@@ -143,7 +145,7 @@ class PassCardView extends StatelessWidget {
text: TextSpan(
children: [
TextSpan(
text: "Flexi ",
text: "${CommonAppText.selectiveCard} ",
style: TextStyle(color: Colors.white, fontSize: 16.sp),
),
TextSpan(

View File

@@ -7,6 +7,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import '../../checkout/widget/login_email_bottomsheet.dart';
import '../../common_packages/common_app_texts.dart';
import '../blocs/pass_bloc.dart';
class MyPassesPage extends StatelessWidget {
@@ -154,7 +155,7 @@ class MyPassesPage extends StatelessWidget {
width: 35.w,
height: 123.h,
decoration: BoxDecoration(
color: Color(0xFFF95FAF),
color: Color(0xFFF97316),
borderRadius: BorderRadius.only(
bottomRight: Radius.circular(8.r),
topRight: Radius.circular(8.r),
@@ -167,7 +168,7 @@ class MyPassesPage extends StatelessWidget {
text: TextSpan(
children: [
TextSpan(
text: "Flexi ",
text: "${CommonAppText.selectiveCard} ",
style: TextStyle(
color: Colors.white,
fontSize: 16.sp,

View File

@@ -7,6 +7,8 @@ import 'package:citycards_customer/common_packages/custom_dashed_line.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import '../../common_packages/common_app_texts.dart';
class CheckoutView extends StatelessWidget {
const CheckoutView({super.key});
@@ -167,7 +169,7 @@ class CheckoutView extends StatelessWidget {
width: 35.w,
height: 123.h,
decoration: BoxDecoration(
color: Color(0xFFF95FAF),
color: Color(0xFFF97316),
borderRadius: BorderRadius.only(
bottomRight: Radius.circular(8.r),
topRight: Radius.circular(8.r),
@@ -180,7 +182,7 @@ class CheckoutView extends StatelessWidget {
text: TextSpan(
children: [
TextSpan(
text: "Flexi ",
text: "${CommonAppText.selectiveCard} ",
style: TextStyle(
color: Colors.white,
fontSize: 16.sp,
@@ -204,7 +206,7 @@ class CheckoutView extends StatelessWidget {
),
),
SizedBox(height: 15.h),
SizedBox(height: 10.h),
Container(
padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 12.h),
decoration: BoxDecoration(

View File

@@ -0,0 +1,3 @@
class CommonAppText {
static const String selectiveCard = "Selective";
}

View File

@@ -23,11 +23,6 @@ class RegisteredUserHomePage extends StatefulWidget {
class _RegisteredUserHomePageState extends State<RegisteredUserHomePage> {
final List<Map<String, String>> attractions = [
{
'title': 'Long-Tail Boat Charter',
'subtitle': 'Lorem ipsum dolor sit amet...',
'image': 'assets/images/clock.png',
},
{
'title': 'Koh Rong Samloemr',
'subtitle': 'Lorem ipsum dolor sit amet...',
@@ -43,6 +38,11 @@ class _RegisteredUserHomePageState extends State<RegisteredUserHomePage> {
'subtitle': 'Lorem ipsum dolor sit amet...',
'image': 'assets/images/koh_rong.png',
},
{
'title': 'Long-Tail Boat Charter',
'subtitle': 'Lorem ipsum dolor sit amet...',
'image': 'assets/images/clock.png',
},
];
@override

View File

@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import '../../core/route_constants.dart';
class AttractionsListView extends StatefulWidget {
final List<Map<String, String>> attractions;
@@ -38,69 +39,74 @@ class _AttractionsListViewState extends State<AttractionsListView> {
@override
Widget build(BuildContext context) {
return Column(
children: [
SizedBox(
height: 240,
child: ListView.builder(
controller: _scrollController,
scrollDirection: Axis.horizontal,
padding: const EdgeInsets.only(right: 16),
itemCount: widget.attractions.length,
itemBuilder: (context, index) {
final item = widget.attractions[index];
return Container(
alignment: Alignment.center,
margin: const EdgeInsets.only(right: 16),
padding: const EdgeInsets.all(4),
decoration: BoxDecoration(
border: Border.all(
color: const Color(0xFFF95F62).withOpacity(0.24),
),
borderRadius: BorderRadius.circular(16),
),
child: Container(
height: 232,
width: 161,
return InkWell(
onTap: (){
Navigator.of(context).pushNamed(RouteConstants.attractionDetails);
},
child: Column(
children: [
SizedBox(
height: 240,
child: ListView.builder(
controller: _scrollController,
scrollDirection: Axis.horizontal,
padding: const EdgeInsets.only(right: 16),
itemCount: widget.attractions.length,
itemBuilder: (context, index) {
final item = widget.attractions[index];
return Container(
alignment: Alignment.center,
margin: const EdgeInsets.only(right: 16),
padding: const EdgeInsets.all(4),
decoration: BoxDecoration(
border: Border.all(
color: const Color(0xFFF95F62).withOpacity(0.24),
),
borderRadius: BorderRadius.circular(16),
image: DecorationImage(
image: AssetImage(item['image']!),
fit: BoxFit.cover,
),
child: Container(
height: 232,
width: 161,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(16),
image: DecorationImage(
image: AssetImage(item['image']!),
fit: BoxFit.cover,
),
),
alignment: Alignment.bottomLeft,
padding: const EdgeInsets.all(12),
child: Text(
item['title']!,
style: GoogleFonts.poppins(
color: Colors.white,
fontWeight: FontWeight.w600,
fontSize: 14,
),
),
),
alignment: Alignment.bottomLeft,
padding: const EdgeInsets.all(12),
child: Text(
item['title']!,
style: GoogleFonts.poppins(
color: Colors.white,
fontWeight: FontWeight.w600,
fontSize: 14,
),
),
),
);
},
);
},
),
),
),
const SizedBox(height: 20),
Align(
alignment: Alignment.center,
child: SizedBox(
width: 200,
child: ClipRRect(
borderRadius: BorderRadius.circular(10),
child: LinearProgressIndicator(
value: _scrollProgress,
minHeight: 6,
backgroundColor: const Color(0xffFEE7E7),
color: const Color(0xffF95F62),
const SizedBox(height: 20),
Align(
alignment: Alignment.center,
child: SizedBox(
width: 200,
child: ClipRRect(
borderRadius: BorderRadius.circular(10),
child: LinearProgressIndicator(
value: _scrollProgress,
minHeight: 6,
backgroundColor: const Color(0xffFEE7E7),
color: const Color(0xffF95F62),
),
),
),
),
),
],
],
),
);
}
}

View File

@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:google_fonts/google_fonts.dart';
import '../../common_packages/common_app_texts.dart';
import '../../core/route_constants.dart';
class ChooseYourPassSection extends StatefulWidget {
@@ -20,7 +21,7 @@ class _ChooseYourPassSectionState extends State<ChooseYourPassSection> {
final List<Map<String, dynamic>> passes = [
{
"title": "Chicago-\nFLEXI CARD",
"title": "Chicago-\n${CommonAppText.selectiveCard} CARD",
"price": "\$50",
"color": const Color(0xffF95FAF),
"bgColor": const Color(0xFFFDE7F1),

View File

@@ -7,6 +7,8 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import '../../common_packages/common_app_texts.dart';
class SearchOffersWithListing extends StatelessWidget {
SearchOffersWithListing({super.key});
@@ -32,7 +34,7 @@ class SearchOffersWithListing extends StatelessWidget {
},
child: Icon(Icons.arrow_back)),
SizedBox(width: 8.w),
CustomText(text: "Offers with Flexi Card", size: 12.sp),
CustomText(text: "Offers with ${CommonAppText.selectiveCard} Card", size: 12.sp),
],
),