diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 5e32f67..cca5387 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -5,9 +5,9 @@ + android:icon="@mipmap/launcher_icon"> { onTap: () { Navigator.of( context, - rootNavigator: true, ).pushNamed(RouteConstants.checkout); }, label: "Proceed to Pay", diff --git a/lib/cart/views/my_cart_view_page.dart b/lib/cart/views/my_cart_view_page.dart index 964dcff..4005474 100644 --- a/lib/cart/views/my_cart_view_page.dart +++ b/lib/cart/views/my_cart_view_page.dart @@ -38,6 +38,7 @@ class _MyCartPageState extends State { isWhiteLogo: false, isProfilePage: false, showCart: false, + showDivider: true, ), backWidget(context, "Your Cart", Colors.black), SizedBox(height: 24.h), diff --git a/lib/checkout/view/checkout_view.dart b/lib/checkout/view/checkout_view.dart index 4b5db4b..e90a9c5 100644 --- a/lib/checkout/view/checkout_view.dart +++ b/lib/checkout/view/checkout_view.dart @@ -24,6 +24,7 @@ class CheckoutView extends StatelessWidget { isWhiteLogo: false, isProfilePage: false, showCart: false, + showDivider: true, ), Row( children: [ diff --git a/lib/checkout/widget/login_email_bottomsheet.dart b/lib/checkout/widget/login_email_bottomsheet.dart index a330960..ec6019f 100644 --- a/lib/checkout/widget/login_email_bottomsheet.dart +++ b/lib/checkout/widget/login_email_bottomsheet.dart @@ -1,6 +1,7 @@ import 'package:citycards_customer/checkout/widget/verify_otp_bottomsheet.dart'; import 'package:citycards_customer/common_packages/custom_filled_button.dart'; import 'package:citycards_customer/common_packages/custom_text.dart'; +import 'package:citycards_customer/core/route_constants.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; @@ -77,26 +78,31 @@ class LoginEmailBottomsheet extends StatelessWidget { ), SizedBox(height: 20.h), - Text.rich( - TextSpan( - children: [ - TextSpan( - text: "Already have an account?", - style: TextStyle( - color: Colors.black.withOpacity(0.6), - fontSize: 12.sp, - fontWeight: FontWeight.w400, + InkWell( + onTap: (){ + Navigator.of(context).pushNamed(RouteConstants.createAcct); + }, + child: Text.rich( + TextSpan( + children: [ + TextSpan( + text: "Already have an account?", + style: TextStyle( + color: Colors.black.withOpacity(0.6), + fontSize: 12.sp, + fontWeight: FontWeight.w400, + ), ), - ), - TextSpan( - text: " Sign in", - style: TextStyle( - color: const Color(0xFFF95F62), - fontSize: 12.sp, - fontWeight: FontWeight.w600, + TextSpan( + text: " Sign in", + style: TextStyle( + color: const Color(0xFFF95F62), + fontSize: 12.sp, + fontWeight: FontWeight.w600, + ), ), - ), - ], + ], + ), ), ), SizedBox(height: 15.h), diff --git a/lib/checkout/widget/verify_otp_bottomsheet.dart b/lib/checkout/widget/verify_otp_bottomsheet.dart index 74fb695..40501b2 100644 --- a/lib/checkout/widget/verify_otp_bottomsheet.dart +++ b/lib/checkout/widget/verify_otp_bottomsheet.dart @@ -4,6 +4,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_otp_text_field/flutter_otp_text_field.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +import '../../core/route_constants.dart'; + class VerifyOtpBottomsheet extends StatelessWidget { VerifyOtpBottomsheet({super.key}); @@ -84,26 +86,31 @@ class VerifyOtpBottomsheet extends StatelessWidget { ), SizedBox(height: 20.h), - Text.rich( - TextSpan( - children: [ - TextSpan( - text: "Already have an account?", - style: TextStyle( - color: Colors.black.withOpacity(0.6), - fontSize: 12.sp, - fontWeight: FontWeight.w400, + InkWell( + onTap: () { + Navigator.of(context).pushNamed(RouteConstants.createAcct); + }, + child: Text.rich( + TextSpan( + children: [ + TextSpan( + text: "Already have an account?", + style: TextStyle( + color: Colors.black.withOpacity(0.6), + fontSize: 12.sp, + fontWeight: FontWeight.w400, + ), ), - ), - TextSpan( - text: " Sign in", - style: TextStyle( - color: const Color(0xFFF95F62), - fontSize: 12.sp, - fontWeight: FontWeight.w600, + TextSpan( + text: " Sign in", + style: TextStyle( + color: const Color(0xFFF95F62), + fontSize: 12.sp, + fontWeight: FontWeight.w600, + ), ), - ), - ], + ], + ), ), ), SizedBox(height: 15.h), diff --git a/lib/common_packages/app_bar.dart b/lib/common_packages/app_bar.dart index ae0154b..824db67 100644 --- a/lib/common_packages/app_bar.dart +++ b/lib/common_packages/app_bar.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import '../core/route_constants.dart'; +import '../home/widgets/search_city_bottomsheet.dart'; class CommonAppBar extends StatelessWidget { const CommonAppBar({ @@ -9,11 +10,13 @@ class CommonAppBar extends StatelessWidget { required this.isWhiteLogo, required this.isProfilePage, this.showCart = true, + required this.showDivider }); final bool isWhiteLogo; final bool isProfilePage; final bool? showCart; + final bool showDivider; @override Widget build(BuildContext context) { @@ -22,11 +25,25 @@ class CommonAppBar extends StatelessWidget { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Image.asset( - isWhiteLogo - ? "assets/logo/melbourne_white.png" - : "assets/logo/melbourne_logo.png", - scale: 4, + Row( + children: [ + Image.asset( + isWhiteLogo + ? "assets/logo/melbourne_white.png" + : "assets/logo/melbourne_logo.png", + scale: 4, + ), + IconButton(onPressed: (){ + showModalBottomSheet( + context: context, + isScrollControlled: true, + backgroundColor: Colors.transparent, + builder: (_) => const CitySelectionBottomSheet(), + + ); + + }, icon: Icon(Icons.arrow_drop_down, color: isWhiteLogo ? Colors.white : Color(0xffF95F62), size: 30,)) + ], ), Row( children: [ @@ -68,7 +85,7 @@ class CommonAppBar extends StatelessWidget { ), ], ), - if (!isWhiteLogo) + if (showDivider) Column( children: [ SizedBox(height: 12.h), diff --git a/lib/contact_us/contact_us_view.dart b/lib/contact_us/contact_us_view.dart index 3620f0a..ad56f7c 100644 --- a/lib/contact_us/contact_us_view.dart +++ b/lib/contact_us/contact_us_view.dart @@ -25,7 +25,7 @@ class ContactUsPage extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ // Header bar - CommonAppBar(isWhiteLogo: false, isProfilePage: true), + CommonAppBar(isWhiteLogo: false, isProfilePage: true, showDivider: true,), backWidget(context,"Contact Us", Colors.black), SizedBox(height: 22.h), diff --git a/lib/core/app_router.dart b/lib/core/app_router.dart index 5ce038a..07ca27e 100644 --- a/lib/core/app_router.dart +++ b/lib/core/app_router.dart @@ -28,6 +28,7 @@ import '../attractions/views/attractions_page_view.dart'; import '../cart/views/my_cart_view_page.dart'; import '../common_bloc/bottom_navigation_bloc.dart'; import '../home/views/home_page_view.dart'; +import '../home/views/registered_user_home_page.dart'; import 'route_constants.dart'; class AppRouter { @@ -198,6 +199,13 @@ class AppRouter { return MaterialPageRoute(builder: (_){ return OfferPassDetailView(); }); + + case RouteConstants.registeredUserHome: + return MaterialPageRoute( + builder: (_) { + return RegisteredUserHomePage(); + }, + ); default: return MaterialPageRoute( builder: (_) => diff --git a/lib/core/inside_bottom_navigator.dart b/lib/core/inside_bottom_navigator.dart index 97f87ef..0867c2c 100644 --- a/lib/core/inside_bottom_navigator.dart +++ b/lib/core/inside_bottom_navigator.dart @@ -1,4 +1,5 @@ import 'package:citycards_customer/core/route_constants.dart'; +import 'package:citycards_customer/home/views/registered_user_home_page.dart'; import 'package:citycards_customer/my_pass/blocs/my_pass_bloc.dart'; import 'package:citycards_customer/postcard/views/add_filter_step_page_view.dart'; import 'package:flutter/material.dart'; @@ -6,6 +7,9 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import '../attraction_details/attraction_details_view.dart'; import '../attractions/views/attractions_page_view.dart'; +import '../buy_a_pass/view/buy_pass_view.dart'; +import '../checkout/view/checkout_view.dart'; +import '../create_account/create_account_view.dart'; import '../itinerary_creation/bloc/itinerary_detail_bloc.dart'; import '../itinerary_creation/bloc/itinerary_steps_selection_bloc.dart'; import '../itinerary_creation/views/itinerary_creation_view.dart'; @@ -13,6 +17,7 @@ import '../itinerary_creation/views/magic_itinerary_filled_view.dart'; import '../my_pass/views/booking_page_view.dart'; import '../my_pass/views/booking_successful_page_view.dart'; import '../my_pass/views/qr_pass_page_view.dart'; +import '../offer_pass_detail/offer_pass_detail_view.dart'; import '../postcard/blocs/postcard_creation_bloc.dart'; import '../postcard/views/postcard_creation_page_view.dart'; import '../search_offers/bloc/search_offers_listing_bloc.dart'; @@ -66,6 +71,11 @@ Widget buildOffstageNavigator( }, ); + case RouteConstants.offerPassDetail: + return MaterialPageRoute(builder: (_){ + return OfferPassDetailView(); + }); + case RouteConstants.searchOffer: return MaterialPageRoute( builder: (_) { @@ -140,6 +150,34 @@ Widget buildOffstageNavigator( return MagicItineraryFilledView(); }); + case RouteConstants.checkout: + return MaterialPageRoute( + builder: (_) { + return CheckoutView(); + }, + ); + + case RouteConstants.buyPass: + return MaterialPageRoute( + builder: (_) { + return BuyPassView(); + }, + ); + + case RouteConstants.createAcct: + return MaterialPageRoute( + builder: (_) { + return CreateAccountView(); + }, + ); + + case RouteConstants.registeredUserHome: + return MaterialPageRoute( + builder: (_) { + return RegisteredUserHomePage(); + }, + ); + default: return MaterialPageRoute( builder: (_) => diff --git a/lib/core/route_constants.dart b/lib/core/route_constants.dart index e235102..8ef1137 100644 --- a/lib/core/route_constants.dart +++ b/lib/core/route_constants.dart @@ -2,6 +2,7 @@ class RouteConstants { /****************************** HOME SECTION ************************************/ static const String home = '/home'; + static const String registeredUserHome = '/registeredUserHome'; static const String attractionsPage = "/attractions"; static const String postCardPage = "/postcards"; static const String uploadPhotoPage = "/uploadPhoto"; diff --git a/lib/create_account/create_account_view.dart b/lib/create_account/create_account_view.dart index f45320e..c90d42f 100644 --- a/lib/create_account/create_account_view.dart +++ b/lib/create_account/create_account_view.dart @@ -29,6 +29,7 @@ class CreateAccountView extends StatelessWidget { isWhiteLogo: false, isProfilePage: false, showCart: false, + showDivider: true, ), Row( children: [ diff --git a/lib/edit_profile/edit_profile_view.dart b/lib/edit_profile/edit_profile_view.dart index b6a2721..809cc07 100644 --- a/lib/edit_profile/edit_profile_view.dart +++ b/lib/edit_profile/edit_profile_view.dart @@ -25,7 +25,7 @@ class EditProfilePage extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.center, children: [ // Header - CommonAppBar(isWhiteLogo: false, isProfilePage: true), + CommonAppBar(isWhiteLogo: false, isProfilePage: true,showDivider: true,), // Back + title backWidget(context,"Edit Profile", Colors.black), diff --git a/lib/esim_offer/esim_offer_view.dart b/lib/esim_offer/esim_offer_view.dart index f15ec33..a4c672b 100644 --- a/lib/esim_offer/esim_offer_view.dart +++ b/lib/esim_offer/esim_offer_view.dart @@ -18,7 +18,7 @@ class EsimOfferPage extends StatelessWidget { Container( color: Colors.white, padding: EdgeInsets.symmetric(horizontal: 20, vertical: 10), - child: CommonAppBar(isWhiteLogo: false, isProfilePage: false), + child: CommonAppBar(isWhiteLogo: false, isProfilePage: false,showDivider: true,), ), /************************* Top Banner ***********************/ diff --git a/lib/faq/faq_view.dart b/lib/faq/faq_view.dart index d0e9ac8..cb1f211 100644 --- a/lib/faq/faq_view.dart +++ b/lib/faq/faq_view.dart @@ -19,7 +19,7 @@ class FaqPage extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - CommonAppBar(isWhiteLogo: false, isProfilePage: true), + CommonAppBar(isWhiteLogo: false, isProfilePage: true, showDivider: true,), backWidget(context,"FAQ", Colors.black), SizedBox(height: 34.h), diff --git a/lib/home/bloc/app_start_bloc.dart b/lib/home/bloc/app_start_bloc.dart new file mode 100644 index 0000000..c28b0f9 --- /dev/null +++ b/lib/home/bloc/app_start_bloc.dart @@ -0,0 +1,42 @@ +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +/// --- Events --- +abstract class AppStartEvent {} + +class CheckFirstTimeUser extends AppStartEvent {} +class MarkUserAsRegistered extends AppStartEvent {} + +/// --- States --- +abstract class AppStartState {} + +class AppStartLoading extends AppStartState {} +class AppStartFirstTime extends AppStartState {} +class AppStartRegistered extends AppStartState {} + +/// --- Bloc --- +class AppStartBloc extends Bloc { + AppStartBloc() : super(AppStartLoading()) { + on(_onCheckFirstTimeUser); + on(_onMarkUserAsRegistered); + } + + Future _onCheckFirstTimeUser( + CheckFirstTimeUser event, Emitter emit) async { + emit(AppStartLoading()); + final prefs = await SharedPreferences.getInstance(); + final isFirstTime = prefs.getBool('isFirstTimeUser') ?? true; + if (isFirstTime) { + emit(AppStartFirstTime()); + } else { + emit(AppStartRegistered()); + } + } + + Future _onMarkUserAsRegistered( + MarkUserAsRegistered event, Emitter emit) async { + final prefs = await SharedPreferences.getInstance(); + await prefs.setBool('isFirstTimeUser', false); + emit(AppStartRegistered()); + } +} diff --git a/lib/home/views/first_time_user_home_page.dart b/lib/home/views/first_time_user_home_page.dart index e4fff8e..c74f29a 100644 --- a/lib/home/views/first_time_user_home_page.dart +++ b/lib/home/views/first_time_user_home_page.dart @@ -5,7 +5,8 @@ import '../../common_packages/app_bar.dart'; import '../widgets/explore_cities_card.dart'; class FirstTimeUserHomePage extends StatefulWidget { - const FirstTimeUserHomePage({super.key}); + final VoidCallback onContinue; + const FirstTimeUserHomePage({super.key, required this.onContinue}); @override State createState() => _FirstTimeUserHomePageState(); @@ -92,7 +93,7 @@ class _FirstTimeUserHomePageState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - CommonAppBar(isWhiteLogo: true, isProfilePage: false), + CommonAppBar(isWhiteLogo: true, isProfilePage: false, showDivider: false), SizedBox(height: 140.h), Text( "CityCards.\nSee More,\nSpend Less.", @@ -120,9 +121,7 @@ class _FirstTimeUserHomePageState extends State { borderRadius: BorderRadius.circular(25.r), ), ), - onPressed: () { - - }, + onPressed: widget.onContinue, child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ diff --git a/lib/home/views/home_page_view.dart b/lib/home/views/home_page_view.dart index 2309347..55a8074 100644 --- a/lib/home/views/home_page_view.dart +++ b/lib/home/views/home_page_view.dart @@ -1,13 +1,14 @@ -import 'package:citycards_customer/home/views/registered_user_home_page.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:citycards_customer/common_packages/custom_bottom_navbar.dart'; +import 'package:citycards_customer/core/inside_bottom_navigator.dart'; +import 'package:citycards_customer/itinerary_creation/views/itinerary_creation_start_view.dart'; +import 'package:citycards_customer/my_pass/views/my_pass_page_view.dart'; +import 'package:citycards_customer/postcard/views/postcard_initial_page_view.dart'; import '../../common_bloc/bottom_navigation_bloc.dart'; -import '../../common_packages/custom_bottom_navbar.dart'; -import '../../core/inside_bottom_navigator.dart'; -import '../../itinerary_creation/views/itinerary_creation_start_view.dart'; -import '../../my_pass/views/my_pass_page_view.dart'; -import '../../postcard/views/postcard_initial_page_view.dart'; +import '../bloc/app_start_bloc.dart'; import 'first_time_user_home_page.dart'; +import 'registered_user_home_page.dart'; class HomePage extends StatefulWidget { const HomePage({super.key}); @@ -18,33 +19,59 @@ class HomePage extends StatefulWidget { class _HomePageState extends State { final _navigatorKeys = [ - GlobalKey(), // tab 0 - GlobalKey(), // tab 1 - GlobalKey(), // tab 2 - GlobalKey(), // tab 2 + GlobalKey(), + GlobalKey(), + GlobalKey(), + GlobalKey(), ]; @override Widget build(BuildContext context) { - return BlocBuilder( - builder: (context, state) { - final currentIndex = state.selectedIndex; + return BlocProvider( + create: (_) => AppStartBloc()..add(CheckFirstTimeUser()), + child: BlocBuilder( + builder: (context, state) { + if (state is AppStartLoading) { + return const Scaffold( + body: Center(child: CircularProgressIndicator()), + ); + } - return SafeArea( - top: false, - child: Scaffold( - body: Stack( - children: [ - buildOffstageNavigator(0, currentIndex, const FirstTimeUserHomePage(), _navigatorKeys[0]), - buildOffstageNavigator(1, currentIndex, const ItineraryCreationStartPage(), _navigatorKeys[1]), - buildOffstageNavigator(2, currentIndex, const MyPassesView(), _navigatorKeys[2]), - buildOffstageNavigator(3, currentIndex, const PostcardPage(), _navigatorKeys[3]), - ], - ), - bottomNavigationBar: CustomBottomNavBar(), - ), - ); - }, + if (state is AppStartFirstTime) { + return FirstTimeUserHomePage( + onContinue: () { + context.read().add(MarkUserAsRegistered()); + }, + ); + } + + // Once registered → show normal main home tabs + return BlocBuilder( + builder: (context, navState) { + final currentIndex = navState.selectedIndex; + + return SafeArea( + top: false, + child: Scaffold( + body: Stack( + children: [ + buildOffstageNavigator(0, currentIndex, + const RegisteredUserHomePage(), _navigatorKeys[0]), + buildOffstageNavigator(1, currentIndex, + const ItineraryCreationStartPage(), _navigatorKeys[1]), + buildOffstageNavigator(2, currentIndex, + const MyPassesView(), _navigatorKeys[2]), + buildOffstageNavigator(3, currentIndex, + const PostcardPage(), _navigatorKeys[3]), + ], + ), + bottomNavigationBar: const CustomBottomNavBar(), + ), + ); + }, + ); + }, + ), ); } } diff --git a/lib/home/views/registered_user_home_page.dart b/lib/home/views/registered_user_home_page.dart index 5d40b71..5eea1a2 100644 --- a/lib/home/views/registered_user_home_page.dart +++ b/lib/home/views/registered_user_home_page.dart @@ -13,40 +13,36 @@ import '../widgets/journey_cards_listview.dart'; import '../widgets/pass_card_list.dart'; class RegisteredUserHomePage extends StatefulWidget { - const RegisteredUserHomePage({super.key}); + const RegisteredUserHomePage({super.key}); @override State createState() => _RegisteredUserHomePageState(); } class _RegisteredUserHomePageState extends State { - - final List> attractions = [ + final List> attractions = [ { 'title': 'Long-Tail Boat Charter', 'subtitle': 'Lorem ipsum dolor sit amet...', - 'image': - 'assets/images/clock.png', + 'image': 'assets/images/clock.png', + }, + { + 'title': 'Koh Rong Samloemr', + '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', }, { 'title': 'Koh Rong Samloemr', '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', - }, - { - 'title': 'Koh Rong Samloemr', - 'subtitle': 'Lorem ipsum dolor sit amet...', - 'image': 'assets/images/koh_rong.png', - }, ]; - @override Widget build(BuildContext context) { return SafeArea( @@ -68,10 +64,14 @@ class _RegisteredUserHomePageState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - CommonAppBar(isWhiteLogo: true , isProfilePage: false), - SizedBox(height: 50.h), + CommonAppBar( + isWhiteLogo: false, + isProfilePage: false, + showDivider: false, + ), + SizedBox(height: 70.h), Text( - "Chicago", + "Melbourne", style: TextStyle( color: Colors.white, fontWeight: FontWeight.w500, @@ -81,11 +81,11 @@ class _RegisteredUserHomePageState extends State { const SizedBox(height: 4), Text( "Lorem ipsum dolor sit amet, consectetur adipiscing elit. " - "Cras posuere, nisl id dictum consequat, elit enim tincidunt magna...", + "Cras posuere, nisl id dictum consequat, elit enim tincidunt magna...", style: TextStyle( color: Colors.white.withOpacity(0.9), fontSize: 12, - fontWeight: FontWeight.w400 + fontWeight: FontWeight.w400, ), ), const SizedBox(height: 12), @@ -119,24 +119,31 @@ class _RegisteredUserHomePageState extends State { ), TextSpan( text: "Attractions", - style: - TextStyle(fontSize: 18, color: Colors.black, fontWeight: FontWeight.w500,), + style: TextStyle( + fontSize: 18, + color: Colors.black, + fontWeight: FontWeight.w500, + ), ), ], ), ), InkWell( - onTap: (){ - Navigator.of(context).pushNamed(RouteConstants.attractionsPage, arguments: "home"); + onTap: () { + Navigator.of(context).pushNamed( + RouteConstants.attractionsPage, + arguments: "home", + ); }, - child: Text("View all", + child: Text( + "View all", style: TextStyle( fontSize: 12, fontWeight: FontWeight.w500, color: Color(0xffF95F62), ), ), - ) + ), ], ), const SizedBox(height: 12), @@ -145,11 +152,7 @@ class _RegisteredUserHomePageState extends State { ), ), InwardCurvedContainer( - child: Stack( - children: [ - DreamJourneySection() - ] - ) + child: Stack(children: [DreamJourneySection()]), ), const SizedBox(height: 10), ESimOfferSection(), @@ -162,10 +165,15 @@ class _RegisteredUserHomePageState extends State { children: [ Column( children: [ - _buildFeatureCard( - image: "assets/images/claim_offers_bg.jpg", - title: "Claim offers with your City Cards", - subtitle: "Lorem ipsum dolor sit amet...", + InkWell( + onTap: () { + Navigator.of(context).pushNamed(RouteConstants.searchOffer); + }, + child: _buildFeatureCard( + image: "assets/images/claim_offers_bg.jpg", + title: "Claim offers with your City Cards", + subtitle: "Lorem ipsum dolor sit amet...", + ), ), ], ), @@ -190,90 +198,95 @@ class _RegisteredUserHomePageState extends State { Widget _buildTag(String label) { return Container( padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), - decoration: - BoxDecoration(color: Color(0xffF95F62), borderRadius: BorderRadius.circular(20)), - child: Text(label, - style:TextStyle( - color: Colors.white, fontWeight: FontWeight.w500, fontSize: 12)), + decoration: BoxDecoration( + color: Color(0xffF95F62), + borderRadius: BorderRadius.circular(20), + ), + child: Text( + label, + style: TextStyle( + color: Colors.white, + fontWeight: FontWeight.w500, + fontSize: 12, + ), + ), ); } - Widget _buildFeatureCard({ - required String image, - required String title, - required String subtitle, - }) { - return Stack( - children: [ - ClipRRect( - borderRadius: BorderRadius.circular(16), - child: Image.asset( - image, - height: 200, - width: double.infinity, - fit: BoxFit.cover, - ), - ), - Positioned( - left: 16, - right: 16, - bottom: 16, - child: Container( - padding: const EdgeInsets.all(12), - decoration: BoxDecoration( - color: Colors.white.withOpacity(0.9), - borderRadius: BorderRadius.circular(16), - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ + Widget _buildFeatureCard({ + required String image, + required String title, + required String subtitle, + }) { + return Stack( + children: [ + ClipRRect( + borderRadius: BorderRadius.circular(16), + child: Image.asset( + image, + height: 200, + width: double.infinity, + fit: BoxFit.cover, + ), + ), + Positioned( + left: 16, + right: 16, + bottom: 16, + child: Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: Colors.white.withOpacity(0.9), + borderRadius: BorderRadius.circular(16), + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + title, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: const TextStyle( + fontWeight: FontWeight.w600, + fontSize: 18, + ), + ), + Text( + subtitle, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: GoogleFonts.poppins( + fontSize: 14, + color: Colors.black.withOpacity(0.6), + ), + ), + ], + ), + ), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - title, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: const TextStyle( - fontWeight: FontWeight.w600, - fontSize: 18, - ), - ), - Text( - subtitle, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: GoogleFonts.poppins( - fontSize: 14, - color: Colors.black.withOpacity(0.6), - ), - ), - ], - ), - ), - - const SizedBox(width: 8), - - // Right side arrow button - Container( - decoration: const BoxDecoration( - color: Color(0xffFDCDCE), - shape: BoxShape.circle, - ), - padding: const EdgeInsets.all(12), - child: Image.asset( - "assets/icons/arrow_angle_up.png", - scale: 4, - ), - ), - ], - ), - ), - ), - ], - ); - } + const SizedBox(width: 8), + // Right side arrow button + Container( + decoration: const BoxDecoration( + color: Color(0xffFDCDCE), + shape: BoxShape.circle, + ), + padding: const EdgeInsets.all(12), + child: Image.asset( + "assets/icons/arrow_angle_up.png", + scale: 4, + ), + ), + ], + ), + ), + ), + ], + ); + } } diff --git a/lib/home/widgets/get_your_pass_card.dart b/lib/home/widgets/get_your_pass_card.dart index 10f0523..fa1abc2 100644 --- a/lib/home/widgets/get_your_pass_card.dart +++ b/lib/home/widgets/get_your_pass_card.dart @@ -1,6 +1,8 @@ import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; +import '../../core/route_constants.dart'; + class GetYourPassCard extends StatelessWidget { const GetYourPassCard({super.key}); @@ -30,16 +32,21 @@ class GetYourPassCard extends StatelessWidget { color: Colors.black, ), ), - Container( - padding: const EdgeInsets.all(8), - decoration: const BoxDecoration( - color: Color(0xffF95F62), - shape: BoxShape.circle, - ), - child: const Icon( - Icons.arrow_forward, - color: Colors.black, - size: 18, + InkWell( + onTap: (){ + Navigator.of(context).pushNamed(RouteConstants.buyPass); + }, + child: Container( + padding: const EdgeInsets.all(8), + decoration: const BoxDecoration( + color: Color(0xffF95F62), + shape: BoxShape.circle, + ), + child: const Icon( + Icons.arrow_forward, + color: Colors.black, + size: 18, + ), ), ), ], diff --git a/lib/home/widgets/pass_card_list.dart b/lib/home/widgets/pass_card_list.dart index 5bc2d7f..27bc18f 100644 --- a/lib/home/widgets/pass_card_list.dart +++ b/lib/home/widgets/pass_card_list.dart @@ -2,6 +2,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:google_fonts/google_fonts.dart'; +import '../../core/route_constants.dart'; + class ChooseYourPassSection extends StatefulWidget { const ChooseYourPassSection({super.key}); @@ -179,7 +181,9 @@ class _ChooseYourPassSectionState extends State { SizedBox( width: double.infinity, child: ElevatedButton( - onPressed: () {}, + onPressed: () { + Navigator.of(context).pushNamed(RouteConstants.buyPass); + }, style: ElevatedButton.styleFrom( backgroundColor: item['color'], padding: const EdgeInsets.symmetric(vertical: 14), diff --git a/lib/hotel_offer/hotel_offer_view.dart b/lib/hotel_offer/hotel_offer_view.dart index 3c2c727..072ec18 100644 --- a/lib/hotel_offer/hotel_offer_view.dart +++ b/lib/hotel_offer/hotel_offer_view.dart @@ -18,7 +18,7 @@ class HotelOfferView extends StatelessWidget { Container( color: Colors.white, padding: EdgeInsets.symmetric(horizontal: 20, vertical: 10), - child: CommonAppBar(isWhiteLogo: false, isProfilePage: false), + child: CommonAppBar(isWhiteLogo: false, isProfilePage: false, showDivider: false), ), // Banner Section Stack( diff --git a/lib/itinerary_creation/views/magic_itinerary_empty_view.dart b/lib/itinerary_creation/views/magic_itinerary_empty_view.dart index 3b4362e..780a537 100644 --- a/lib/itinerary_creation/views/magic_itinerary_empty_view.dart +++ b/lib/itinerary_creation/views/magic_itinerary_empty_view.dart @@ -17,7 +17,7 @@ class MagicItineraryEmptyView extends StatelessWidget { padding: EdgeInsets.symmetric(horizontal: 20.w, vertical: 10.h), child: Column( children: [ - CommonAppBar(isWhiteLogo: false, isProfilePage: false), + CommonAppBar(isWhiteLogo: false, isProfilePage: false, showDivider: false,), SizedBox(height: 90.h), Image.asset("assets/images/itinerary_banner.png", width: 260.w), SizedBox(height: 27.h), diff --git a/lib/itinerary_creation/views/magic_itinerary_filled_view.dart b/lib/itinerary_creation/views/magic_itinerary_filled_view.dart index f6be597..cd8ae45 100644 --- a/lib/itinerary_creation/views/magic_itinerary_filled_view.dart +++ b/lib/itinerary_creation/views/magic_itinerary_filled_view.dart @@ -19,7 +19,7 @@ class MagicItineraryFilledView extends StatelessWidget { child: SingleChildScrollView( child: Column( children: [ - CommonAppBar(isWhiteLogo: false, isProfilePage: false), + CommonAppBar(isWhiteLogo: false, isProfilePage: false, showDivider: false,), SizedBox(height: 24.h), ItineraryFilledCard(), diff --git a/lib/main.dart b/lib/main.dart index 68b805f..d5dce56 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -40,7 +40,6 @@ class MyApp extends StatelessWidget { ], child: MaterialApp( onGenerateRoute: _appRouter.onGenerateRoute, - initialRoute: RouteConstants.buyPass, debugShowCheckedModeBanner: false, title: 'City Cards', theme: ThemeData( diff --git a/lib/my_pass/views/booking_page_view.dart b/lib/my_pass/views/booking_page_view.dart index 527c7b5..dbc3d76 100644 --- a/lib/my_pass/views/booking_page_view.dart +++ b/lib/my_pass/views/booking_page_view.dart @@ -43,7 +43,7 @@ class MakeBookingView extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ - CommonAppBar(isWhiteLogo: false, isProfilePage: false), + CommonAppBar(isWhiteLogo: false, isProfilePage: false, showDivider: true,), backWidget(context, "Make Booking", Colors.black), SizedBox( height: 20.h, diff --git a/lib/my_pass/views/booking_successful_page_view.dart b/lib/my_pass/views/booking_successful_page_view.dart index db3dae2..9a85c55 100644 --- a/lib/my_pass/views/booking_successful_page_view.dart +++ b/lib/my_pass/views/booking_successful_page_view.dart @@ -18,7 +18,7 @@ class BookingSuccessfulPageView extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ - CommonAppBar(isWhiteLogo: false, isProfilePage: false), + CommonAppBar(isWhiteLogo: false, isProfilePage: false, showDivider: true,), backWidget(context, "Make Booking", Colors.black), SizedBox(height: 40.h), @@ -52,7 +52,7 @@ class BookingSuccessfulPageView extends StatelessWidget { GestureDetector( onTap: () { - + Navigator.pop(context); }, child: Container( width: double.infinity, diff --git a/lib/my_pass/views/my_pass_page_view.dart b/lib/my_pass/views/my_pass_page_view.dart index b4b5c1e..60843bf 100644 --- a/lib/my_pass/views/my_pass_page_view.dart +++ b/lib/my_pass/views/my_pass_page_view.dart @@ -91,7 +91,7 @@ class MyPassesView extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - CommonAppBar(isWhiteLogo: false, isProfilePage: false), + CommonAppBar(isWhiteLogo: false, isProfilePage: false, showDivider: true,), SizedBox(height: 10.h), Row( children: [ diff --git a/lib/my_pass/views/qr_pass_page_view.dart b/lib/my_pass/views/qr_pass_page_view.dart index dfa35f0..1ea3a98 100644 --- a/lib/my_pass/views/qr_pass_page_view.dart +++ b/lib/my_pass/views/qr_pass_page_view.dart @@ -27,7 +27,7 @@ class QrPassView extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ - CommonAppBar(isWhiteLogo: false, isProfilePage: false), + CommonAppBar(isWhiteLogo: false, isProfilePage: false, showDivider: true,), SizedBox(height: 10.h), backWidget(context, "Back", Colors.black), SizedBox(height: 20.h), diff --git a/lib/offer_pass_detail/offer_pass_detail_view.dart b/lib/offer_pass_detail/offer_pass_detail_view.dart index d6180ac..b09ad77 100644 --- a/lib/offer_pass_detail/offer_pass_detail_view.dart +++ b/lib/offer_pass_detail/offer_pass_detail_view.dart @@ -40,6 +40,7 @@ class OfferPassDetailView extends StatelessWidget { CommonAppBar( isWhiteLogo: false, isProfilePage: false, + showDivider: true, ), SizedBox(height: 8.h), diff --git a/lib/postcard/views/add_filter_step_page_view.dart b/lib/postcard/views/add_filter_step_page_view.dart index 79939be..92386f6 100644 --- a/lib/postcard/views/add_filter_step_page_view.dart +++ b/lib/postcard/views/add_filter_step_page_view.dart @@ -29,7 +29,7 @@ class AddFilterStepPageView extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - CommonAppBar(isWhiteLogo: false, isProfilePage: false), + CommonAppBar(isWhiteLogo: false, isProfilePage: false, showDivider: true), StepProgressBar(totalSteps: 4, currentStep: 2), const SizedBox(height: 24), Text( diff --git a/lib/postcard/views/my_orders_page_view.dart b/lib/postcard/views/my_orders_page_view.dart index abd6cf1..d78ca05 100644 --- a/lib/postcard/views/my_orders_page_view.dart +++ b/lib/postcard/views/my_orders_page_view.dart @@ -32,7 +32,7 @@ class _MyOrdersPageViewState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ // 🏙️ Header - CommonAppBar(isWhiteLogo: false, isProfilePage: false), + CommonAppBar(isWhiteLogo: false, isProfilePage: false, showDivider: true,), Row( children: [ diff --git a/lib/postcard/views/order_postcard_preview_page_view.dart b/lib/postcard/views/order_postcard_preview_page_view.dart index 2dc1c72..47bf191 100644 --- a/lib/postcard/views/order_postcard_preview_page_view.dart +++ b/lib/postcard/views/order_postcard_preview_page_view.dart @@ -31,7 +31,7 @@ class _OrderPostcardPreviewPageViewState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - CommonAppBar(isWhiteLogo: false, isProfilePage: false), + CommonAppBar(isWhiteLogo: false, isProfilePage: false, showDivider: true,), StepProgressBar(totalSteps: 4, currentStep: 3), const SizedBox(height: 24), Text("Write a message", diff --git a/lib/privacy/privacy_view.dart b/lib/privacy/privacy_view.dart index 97afcee..ce82715 100644 --- a/lib/privacy/privacy_view.dart +++ b/lib/privacy/privacy_view.dart @@ -16,7 +16,7 @@ class PrivacyPolicyPage extends StatelessWidget { padding: EdgeInsets.symmetric(horizontal: 20.w, vertical: 10.h), child: Column( children: [ - CommonAppBar(isWhiteLogo: false, isProfilePage: true), + CommonAppBar(isWhiteLogo: false, isProfilePage: true, showDivider: true,), backWidget(context,"Privacy Policy", Colors.black), SizedBox(height: 32.h), CustomText( diff --git a/lib/profile/profile_page_view.dart b/lib/profile/profile_page_view.dart index a80a87a..ed7ccdb 100644 --- a/lib/profile/profile_page_view.dart +++ b/lib/profile/profile_page_view.dart @@ -21,7 +21,7 @@ class ProfilePage extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ - CommonAppBar(isWhiteLogo: false, isProfilePage: true), + CommonAppBar(isWhiteLogo: false, isProfilePage: true, showDivider: true,), backWidget(context,"My Profile", Colors.black), SizedBox(height: 29.h), diff --git a/lib/search_offers/view/search_offers_with_listing.dart b/lib/search_offers/view/search_offers_with_listing.dart index f4d9ac0..22853ed 100644 --- a/lib/search_offers/view/search_offers_with_listing.dart +++ b/lib/search_offers/view/search_offers_with_listing.dart @@ -1,6 +1,7 @@ import 'package:citycards_customer/common_packages/app_bar.dart'; import 'package:citycards_customer/common_packages/custom_search_field.dart'; import 'package:citycards_customer/common_packages/custom_text.dart'; +import 'package:citycards_customer/core/route_constants.dart'; import 'package:citycards_customer/search_offers/bloc/search_offers_listing_bloc.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -22,7 +23,7 @@ class SearchOffersWithListing extends StatelessWidget { padding: const EdgeInsets.all(12.0), child: Column( children: [ - CommonAppBar(isWhiteLogo: false, isProfilePage: false,showCart: false,), + CommonAppBar(isWhiteLogo: false, isProfilePage: false,showCart: false, showDivider: true,), Row( children: [ GestureDetector( @@ -105,40 +106,45 @@ class SearchOffersWithListing extends StatelessWidget { itemCount: offers.length, itemBuilder: (context, index) { final offer = offers[index]; - return Container( - padding: EdgeInsets.symmetric( - horizontal: 6.w, - vertical: 6.h, - ), - decoration: BoxDecoration( - border: Border.all( - color: Color(0xFFF95F62).withOpacity(.24), + return InkWell( + onTap: (){ + Navigator.of(context).pushNamed(RouteConstants.offerPassDetail); + }, + child: Container( + padding: EdgeInsets.symmetric( + horizontal: 6.w, + vertical: 6.h, ), - borderRadius: BorderRadius.circular(12.sp), - ), - child: Column( - children: [ - ClipRRect( - borderRadius: BorderRadius.circular(8.sp), - child: Image.asset( - offer["image"] ?? "", - width: double.infinity, - height: 120.5.h, - fit: BoxFit.cover, + decoration: BoxDecoration( + border: Border.all( + color: Color(0xFFF95F62).withOpacity(.24), + ), + borderRadius: BorderRadius.circular(12.sp), + ), + child: Column( + children: [ + ClipRRect( + borderRadius: BorderRadius.circular(8.sp), + child: Image.asset( + offer["image"] ?? "", + width: double.infinity, + height: 120.5.h, + fit: BoxFit.cover, + ), ), - ), - SizedBox(height: 8.h), - CustomText( - text: offer["title"] ?? "", - size: 18.sp, - ), - SizedBox(height: 8.h), - CustomText( - text: offer["description"] ?? "", - color: Colors.black.withOpacity(.6), - size: 12.sp, - ), - ], + SizedBox(height: 8.h), + CustomText( + text: offer["title"] ?? "", + size: 18.sp, + ), + SizedBox(height: 8.h), + CustomText( + text: offer["description"] ?? "", + color: Colors.black.withOpacity(.6), + size: 12.sp, + ), + ], + ), ), ); }, diff --git a/lib/terms_and_condition/terms_and_condition_view.dart b/lib/terms_and_condition/terms_and_condition_view.dart index 34ade3b..767698a 100644 --- a/lib/terms_and_condition/terms_and_condition_view.dart +++ b/lib/terms_and_condition/terms_and_condition_view.dart @@ -16,7 +16,7 @@ class TermsAndCondition extends StatelessWidget { padding: EdgeInsets.symmetric(horizontal: 20.w, vertical: 10.h), child: Column( children: [ - CommonAppBar(isWhiteLogo: false, isProfilePage: true), + CommonAppBar(isWhiteLogo: false, isProfilePage: true, showDivider: true,), // Back + Title diff --git a/lib/your_itinerary/view/your_itinerary_view.dart b/lib/your_itinerary/view/your_itinerary_view.dart index d4830f9..36ac205 100644 --- a/lib/your_itinerary/view/your_itinerary_view.dart +++ b/lib/your_itinerary/view/your_itinerary_view.dart @@ -44,7 +44,7 @@ class YourItineraryView extends StatelessWidget { right: 20.w, child: Column( children: [ - CommonAppBar(isWhiteLogo: true, isProfilePage: false), + CommonAppBar(isWhiteLogo: true, isProfilePage: false, showDivider: true,), SizedBox(height: 5.h), Divider( height: 0.4.h, diff --git a/pubspec.lock b/pubspec.lock index a2295e1..df1e27c 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -57,6 +57,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.0" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f" + url: "https://pub.dev" + source: hosted + version: "2.0.4" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c + url: "https://pub.dev" + source: hosted + version: "0.4.2" clock: dependency: transitive description: @@ -137,6 +153,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + file: + dependency: transitive + description: + name: file + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 + url: "https://pub.dev" + source: hosted + version: "7.0.1" file_selector_linux: dependency: transitive description: @@ -190,6 +214,14 @@ packages: url: "https://pub.dev" source: hosted version: "9.1.1" + flutter_launcher_icons: + dependency: "direct main" + description: + name: flutter_launcher_icons + sha256: "10f13781741a2e3972126fae08393d3c4e01fa4cd7473326b94b72cf594195e7" + url: "https://pub.dev" + source: hosted + version: "0.14.4" flutter_lints: dependency: "direct dev" description: @@ -477,6 +509,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.20.2" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + url: "https://pub.dev" + source: hosted + version: "4.9.0" leak_tracker: dependency: transitive description: @@ -669,14 +709,62 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - simple_gesture_detector: - dependency: transitive + shared_preferences: + dependency: "direct main" description: - name: simple_gesture_detector - sha256: ba2cd5af24ff20a0b8d609cec3f40e5b0744d2a71804a2616ae086b9c19d19a3 + name: shared_preferences + sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5" url: "https://pub.dev" source: hosted - version: "0.2.1" + version: "2.5.3" + shared_preferences_android: + dependency: transitive + description: + name: shared_preferences_android + sha256: "34266009473bf71d748912da4bf62d439185226c03e01e2d9687bc65bbfcb713" + url: "https://pub.dev" + source: hosted + version: "2.4.15" + shared_preferences_foundation: + dependency: transitive + description: + name: shared_preferences_foundation + sha256: "1c33a907142607c40a7542768ec9badfd16293bac51da3a4482623d15845f88b" + url: "https://pub.dev" + source: hosted + version: "2.5.5" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019 + url: "https://pub.dev" + source: hosted + version: "2.4.3" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1" + url: "https://pub.dev" + source: hosted + version: "2.4.1" sky_engine: dependency: transitive description: flutter @@ -762,14 +850,6 @@ packages: url: "https://pub.dev" source: hosted version: "31.2.4" - table_calendar: - dependency: "direct main" - description: - name: table_calendar - sha256: "0c0c6219878b363a2d5f40c7afb159d845f253d061dc3c822aa0d5fe0f721982" - url: "https://pub.dev" - source: hosted - version: "3.2.0" term_glyph: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 2624c91..89fdd8a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -44,9 +44,10 @@ dependencies: google_maps_flutter: ^2.13.1 geolocator: ^14.0.2 equatable: ^2.0.7 - table_calendar: ^3.2.0 syncfusion_flutter_calendar: ^31.2.4 flutter_native_splash: ^2.4.7 + shared_preferences: ^2.5.3 + flutter_launcher_icons: ^0.14.4 dev_dependencies: flutter_test: @@ -105,8 +106,9 @@ flutter: # see https://flutter.dev/to/font-from-package flutter_native_splash: color: "#F95F62" # Background color (your coral red) - image: assets/logo/logo_city_cards_white.png # Your splash logo + image: assets/logo/logo_city_cards_white.png + android_gravity: center android_12: color: "#F95F62" - image: assets/logo/logo_city_cards_white.png + image: assets/logo/logo_resized.png web: false \ No newline at end of file