From f7a6199332054423079c3df149a7bb9c89532d8d Mon Sep 17 00:00:00 2001 From: Vinayakkadge04 Date: Wed, 15 Oct 2025 11:22:54 +0530 Subject: [PATCH] Completed language selection bottomSheet in profile with bloc state management --- assets/icons/radio_button_checked.png | Bin 0 -> 2612 bytes assets/icons/radio_button_unchecked.png | Bin 0 -> 1773 bytes assets/icons/search.png | Bin 0 -> 1475 bytes lib/common_bloc/language_selection_bloc.dart | 22 ++++ lib/common_packages/custom_bottom_navbar.dart | 4 - .../language_selection_bottomsheet.dart | 113 ++++++++++++++++++ lib/contact_us/contact_us_view.dart | 22 ++-- lib/core/app_router.dart | 12 +- lib/edit_profile/edit_profile_view.dart | 7 ++ lib/faq/faq_view.dart | 22 ++-- lib/main.dart | 1 - lib/privacy/privacy_view.dart | 22 ++-- lib/profile/profile_page_view.dart | 29 ++++- .../terms_and_condition_view.dart | 22 ++-- 14 files changed, 206 insertions(+), 70 deletions(-) create mode 100644 assets/icons/radio_button_checked.png create mode 100644 assets/icons/radio_button_unchecked.png create mode 100644 assets/icons/search.png create mode 100644 lib/common_bloc/language_selection_bloc.dart create mode 100644 lib/common_packages/language_selection_bottomsheet.dart diff --git a/assets/icons/radio_button_checked.png b/assets/icons/radio_button_checked.png new file mode 100644 index 0000000000000000000000000000000000000000..d2b362a40bf8133b89b78900406b9d3c06106f3d GIT binary patch literal 2612 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 literal 0 HcmV?d00001 diff --git a/lib/common_bloc/language_selection_bloc.dart b/lib/common_bloc/language_selection_bloc.dart new file mode 100644 index 0000000..7297176 --- /dev/null +++ b/lib/common_bloc/language_selection_bloc.dart @@ -0,0 +1,22 @@ +import 'package:flutter_bloc/flutter_bloc.dart'; + +abstract class LanguageEvent{} + +class UpdateLanguage extends LanguageEvent{ + final String language; + UpdateLanguage(this.language); +} + + +class LanguageState{ + final String selectedLanguage; + LanguageState(this.selectedLanguage); +} + +class LanguageBloc extends Bloc{ + LanguageBloc() : super(LanguageState("English / Englis")){ + on((event, emit){ + emit(LanguageState(event.language)); + }); + } +} \ No newline at end of file diff --git a/lib/common_packages/custom_bottom_navbar.dart b/lib/common_packages/custom_bottom_navbar.dart index 6dc6f1d..06b1865 100644 --- a/lib/common_packages/custom_bottom_navbar.dart +++ b/lib/common_packages/custom_bottom_navbar.dart @@ -1,9 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; - import '../common_bloc/bottom_navigation_bloc.dart'; - class CustomBottomNavBar extends StatelessWidget { const CustomBottomNavBar({super.key}); @@ -74,7 +72,6 @@ class CustomBottomNavBar extends StatelessWidget { required bool isActive, }) { final color = isActive ? const Color(0xFFBB474A) : Color(0xFFBB474A).withOpacity(0.6); - return GestureDetector( onTap: () => context.read().add(NavigationTabChanged(index)), @@ -93,7 +90,6 @@ class CustomBottomNavBar extends StatelessWidget { ) else const SizedBox(height: 7), - Image.asset(iconPath, scale: 4, color: color), const SizedBox(height: 4), Text( diff --git a/lib/common_packages/language_selection_bottomsheet.dart b/lib/common_packages/language_selection_bottomsheet.dart new file mode 100644 index 0000000..40c79f8 --- /dev/null +++ b/lib/common_packages/language_selection_bottomsheet.dart @@ -0,0 +1,113 @@ +import 'package:citycards_customer/common_bloc/language_selection_bloc.dart'; +import 'package:citycards_customer/common_packages/custom_text.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +class LanguageSelectionBottomsheet extends StatelessWidget { + LanguageSelectionBottomsheet({super.key}); + + List languages = [ + "English / Englis", + "Dutch / Nederlands", + "Spanish / Español", + "French / Français", + "Japanese / 日本語", + ]; + + TextEditingController searchController = TextEditingController(); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 16), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + width: 40, + height: 4, + decoration: BoxDecoration( + color: Color(0xFF2D3134), + borderRadius: BorderRadius.circular(4), + ), + ), + const SizedBox(height: 20), + Align( + alignment: Alignment.topLeft, + child: const Text( + "Change Language", + style: TextStyle(fontSize: 18, fontWeight: FontWeight.w500), + ), + ), + const SizedBox(height: 22), + TextField( + controller: searchController, + decoration: InputDecoration( + hintText: "Search Languages", + hintStyle: TextStyle( + fontSize: 14, + color: Color(0xBBC83B61).withOpacity(0.4), + ), + suffixIcon: Image.asset("assets/icons/search.png", scale: 4), + contentPadding: const EdgeInsets.symmetric(horizontal: 24), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: BorderSide( + color: Color(0xBBC83B61).withOpacity(0.4), + width: .4, + ), + ), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(10), + borderSide: const BorderSide( + color: Color(0xFFF95F62), + width: 1, + ), + ), + ), + ), + const SizedBox(height: 12), + + BlocBuilder( + builder: (context, state) { + return Expanded( + child: ListView.builder( + itemCount: languages.length, + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemBuilder: (context, index) { + final item = languages[index]; + return ListTile( + dense: true, + leading: GestureDetector( + onTap: () { + context.read().add( + UpdateLanguage(item), + ); + }, + child: state.selectedLanguage == item + ? Image.asset( + "assets/icons/radio_button_checked.png", + scale: 4, + ) + : Image.asset( + "assets/icons/radio_button_unchecked.png", + scale: 4, + ), + ), + title: CustomText( + text: item, + size: 16, + color: state.selectedLanguage == item ? Color(0xFFF95F62) : Color(0xFF000000).withOpacity(.6), + ), + ); + }, + ), + ); + }, + ), + ], + ), + ); + } +} diff --git a/lib/contact_us/contact_us_view.dart b/lib/contact_us/contact_us_view.dart index 6e5f1c2..fc5d4f6 100644 --- a/lib/contact_us/contact_us_view.dart +++ b/lib/contact_us/contact_us_view.dart @@ -1,3 +1,4 @@ +import 'package:citycards_customer/common_packages/app_bar.dart'; import 'package:flutter/material.dart'; import 'package:citycards_customer/common_packages/custom_text.dart'; import 'package:citycards_customer/common_packages/custom_textfield.dart'; @@ -22,20 +23,13 @@ class ContactUsPage extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ // Header bar - Container( - padding: const EdgeInsets.only(bottom: 10), - decoration: const BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xFFD9D9D9), width: 0.7), - ), - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Image.asset("assets/logo/logo_city_cards.png", scale: 4), - Image.asset("assets/icons/shopping_cart.png", scale: 4), - ], - ), + CommonAppBar(isWhiteLogo: false, isProfilePage: true), + SizedBox( + height: 12, + ), + Divider( + height: 1, + color: Color(0xFFD9D9D9), ), const SizedBox(height: 22), diff --git a/lib/core/app_router.dart b/lib/core/app_router.dart index 04bfcd0..25d5da2 100644 --- a/lib/core/app_router.dart +++ b/lib/core/app_router.dart @@ -1,4 +1,5 @@ import 'package:citycards_customer/Profile/profile_page_view.dart'; +import 'package:citycards_customer/common_bloc/language_selection_bloc.dart'; import 'package:citycards_customer/contact_us/contact_us_view.dart'; import 'package:citycards_customer/edit_profile/edit_profile_view.dart'; import 'package:citycards_customer/faq/faq_view.dart'; @@ -10,7 +11,6 @@ import '../common_bloc/bottom_navigation_bloc.dart'; import '../home/views/home_page_view.dart'; import 'route_constants.dart'; - class AppRouter { Route onGenerateRoute(RouteSettings settings) { switch (settings.name) { @@ -18,14 +18,20 @@ class AppRouter { case RouteConstants.home: return MaterialPageRoute( builder: (_) { - return BlocProvider(create: (_) => NavigationBloc(), child: const HomePage()); + return BlocProvider( + create: (_) => NavigationBloc(), + child: const HomePage(), + ); }, ); case RouteConstants.profile: return MaterialPageRoute( builder: (_) { - return const ProfilePage(); + return BlocProvider( + create: (_) => LanguageBloc(), + child: const ProfilePage(), + ); }, ); case RouteConstants.editProfile: diff --git a/lib/edit_profile/edit_profile_view.dart b/lib/edit_profile/edit_profile_view.dart index 048d382..e052655 100644 --- a/lib/edit_profile/edit_profile_view.dart +++ b/lib/edit_profile/edit_profile_view.dart @@ -24,6 +24,13 @@ class EditProfilePage extends StatelessWidget { children: [ // Header CommonAppBar(isWhiteLogo: false, isProfilePage: true), + SizedBox( + height: 12, + ), + Divider( + height: 1, + color: Color(0xFFD9D9D9), + ), const SizedBox(height: 22), // Back + title diff --git a/lib/faq/faq_view.dart b/lib/faq/faq_view.dart index e649e87..274c31f 100644 --- a/lib/faq/faq_view.dart +++ b/lib/faq/faq_view.dart @@ -1,3 +1,4 @@ +import 'package:citycards_customer/common_packages/app_bar.dart'; import 'package:citycards_customer/common_packages/custom_expansion_tile.dart'; import 'package:citycards_customer/common_packages/custom_text.dart'; import 'package:flutter/material.dart'; @@ -16,20 +17,13 @@ class FaqPage extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Container( - padding: const EdgeInsets.only(bottom: 10), - decoration: const BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xFFD9D9D9), width: 0.7), - ), - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Image.asset("assets/logo/logo_city_cards.png", scale: 4), - Image.asset("assets/icons/shopping_cart.png", scale: 4), - ], - ), + CommonAppBar(isWhiteLogo: false, isProfilePage: true), + SizedBox( + height: 12, + ), + Divider( + height: 1, + color: Color(0xFFD9D9D9), ), const SizedBox(height: 22), diff --git a/lib/main.dart b/lib/main.dart index 37d63ad..e068a09 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:google_fonts/google_fonts.dart'; - import 'core/app_router.dart'; import 'core/route_constants.dart'; diff --git a/lib/privacy/privacy_view.dart b/lib/privacy/privacy_view.dart index b3bd19e..e871f2f 100644 --- a/lib/privacy/privacy_view.dart +++ b/lib/privacy/privacy_view.dart @@ -1,3 +1,4 @@ +import 'package:citycards_customer/common_packages/app_bar.dart'; import 'package:citycards_customer/common_packages/custom_text.dart'; import 'package:flutter/material.dart'; @@ -13,20 +14,13 @@ class PrivacyPolicyPage extends StatelessWidget { padding: EdgeInsets.symmetric(horizontal: 20, vertical: 10), child: Column( children: [ - Container( - padding: const EdgeInsets.only(bottom: 10), - decoration: const BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xFFD9D9D9), width: 0.7), - ), - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Image.asset("assets/logo/logo_city_cards.png", scale: 4), - Image.asset("assets/icons/shopping_cart.png", scale: 4), - ], - ), + CommonAppBar(isWhiteLogo: false, isProfilePage: true), + SizedBox( + height: 12, + ), + Divider( + height: 1, + color: Color(0xFFD9D9D9), ), const SizedBox(height: 22), diff --git a/lib/profile/profile_page_view.dart b/lib/profile/profile_page_view.dart index 8f60fce..eef124b 100644 --- a/lib/profile/profile_page_view.dart +++ b/lib/profile/profile_page_view.dart @@ -1,7 +1,10 @@ +import 'package:citycards_customer/common_bloc/language_selection_bloc.dart'; import 'package:citycards_customer/common_packages/app_bar.dart'; import 'package:citycards_customer/common_packages/custom_text.dart'; +import 'package:citycards_customer/common_packages/language_selection_bottomsheet.dart'; import 'package:citycards_customer/core/route_constants.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; class ProfilePage extends StatelessWidget { const ProfilePage({super.key}); @@ -17,14 +20,17 @@ class ProfilePage extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.center, children: [ CommonAppBar(isWhiteLogo: false, isProfilePage: true), + SizedBox(height: 12), + Divider(height: 1, color: Color(0xFFD9D9D9)), SizedBox(height: 22), Row( children: [ GestureDetector( - onTap: (){ - Navigator.pop(context); - }, - child: Icon(Icons.arrow_back, size: 24)), + onTap: () { + Navigator.pop(context); + }, + child: Icon(Icons.arrow_back, size: 24), + ), SizedBox(width: 8), Text("My profile", style: TextStyle(fontSize: 12)), ], @@ -96,9 +102,20 @@ class ProfilePage extends StatelessWidget { _buildListTile( icon: "assets/icons/change_language.png", title: 'Change language', - onTap: () {}, + onTap: () { + showModalBottomSheet( + context: context, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.vertical( + top: Radius.circular(12), + ), + ), + builder: (context) => BlocProvider( + create: (_)=> LanguageBloc(), + child: LanguageSelectionBottomsheet()), + ); + }, ), - const SizedBox(height: 24), // Support & Legal Section diff --git a/lib/terms_and_condition/terms_and_condition_view.dart b/lib/terms_and_condition/terms_and_condition_view.dart index 52264e8..5a6b75d 100644 --- a/lib/terms_and_condition/terms_and_condition_view.dart +++ b/lib/terms_and_condition/terms_and_condition_view.dart @@ -1,3 +1,4 @@ +import 'package:citycards_customer/common_packages/app_bar.dart'; import 'package:citycards_customer/common_packages/custom_text.dart'; import 'package:flutter/material.dart'; @@ -13,20 +14,13 @@ class TermsAndCondition extends StatelessWidget { padding: EdgeInsets.symmetric(horizontal: 20, vertical: 10), child: Column( children: [ - Container( - padding: const EdgeInsets.only(bottom: 10), - decoration: const BoxDecoration( - border: Border( - bottom: BorderSide(color: Color(0xFFD9D9D9), width: 0.7), - ), - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Image.asset("assets/logo/logo_city_cards.png", scale: 4), - Image.asset("assets/icons/shopping_cart.png", scale: 4), - ], - ), + CommonAppBar(isWhiteLogo: false, isProfilePage: true), + SizedBox( + height: 12, + ), + Divider( + height: 1, + color: Color(0xFFD9D9D9), ), const SizedBox(height: 22),