From 05e48ebbbe0b005c0f7d12a0e20c1dc2f53992a2 Mon Sep 17 00:00:00 2001 From: poojapandeyx Date: Wed, 10 Jul 2024 17:34:49 +0530 Subject: [PATCH 1/5] get country api --- .vscode/settings.json | 3 + assets/images/welcome_screen/svg/tanamibg.svg | 64 +++++++++++++++++ lib/Api_Helper/base_manager.dart | 18 +++++ lib/core/styles/app_images.dart | 2 +- lib/domain/model/GetCountry_model.dart | 72 +++++++++++++++++++ .../bloc/GetCountry/GetCountryAPI.dart | 14 ++++ .../bloc/GetCountry/getcountry_bloc.dart | 26 +++++++ .../bloc/GetCountry/getcountryevent_bloc.dart | 14 ++++ .../widgets/country_selection_list.dart | 31 +++++++- .../presentation/pages/splash_layout.dart | 4 +- .../widgets/login_signup_button.dart | 8 ++- lib/main.dart | 6 ++ lib/shared/api/api_endpoints.dart | 5 +- lib/shared/api/commonAPI.dart | 0 lib/shared/api/network_api_services.dart | 16 ++--- 15 files changed, 267 insertions(+), 16 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 assets/images/welcome_screen/svg/tanamibg.svg create mode 100644 lib/Api_Helper/base_manager.dart create mode 100644 lib/domain/model/GetCountry_model.dart create mode 100644 lib/features/countrySelection/presentation/bloc/GetCountry/GetCountryAPI.dart create mode 100644 lib/features/countrySelection/presentation/bloc/GetCountry/getcountry_bloc.dart create mode 100644 lib/features/countrySelection/presentation/bloc/GetCountry/getcountryevent_bloc.dart create mode 100644 lib/shared/api/commonAPI.dart diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..de26301 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "dart.flutterSdkPath": "D:\\pooja\\fluttersdk\\flutter_3.22.2\\flutter" +} \ No newline at end of file diff --git a/assets/images/welcome_screen/svg/tanamibg.svg b/assets/images/welcome_screen/svg/tanamibg.svg new file mode 100644 index 0000000..f19115f --- /dev/null +++ b/assets/images/welcome_screen/svg/tanamibg.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/Api_Helper/base_manager.dart b/lib/Api_Helper/base_manager.dart new file mode 100644 index 0000000..a8bae41 --- /dev/null +++ b/lib/Api_Helper/base_manager.dart @@ -0,0 +1,18 @@ +class ResponseData { + ResponseData(this.message, this.status, {this.data}); + + final T? data; + final String message; + final ResponseStatus status; + + @override + String toString() => message; +} + +enum ResponseStatus { + SUCCESS, + + FAILED, + + PRIVATE, +} diff --git a/lib/core/styles/app_images.dart b/lib/core/styles/app_images.dart index a885969..7990c31 100644 --- a/lib/core/styles/app_images.dart +++ b/lib/core/styles/app_images.dart @@ -1,7 +1,7 @@ class AppImages { //Splash static const String splashBg = - "assets/images/welcome_screen/svg/Splash_BG.svg"; + "assets/images/welcome_screen/svg/tanamibg.svg"; static const String splashLogo = "assets/images/welcome_screen/svg/Tanami_Capital_Splash_Logo.svg"; diff --git a/lib/domain/model/GetCountry_model.dart b/lib/domain/model/GetCountry_model.dart new file mode 100644 index 0000000..78638a3 --- /dev/null +++ b/lib/domain/model/GetCountry_model.dart @@ -0,0 +1,72 @@ +class GetCountryModel { + List? data; + + GetCountryModel({ this.data}); + + GetCountryModel.fromJson(Map json) { + if (json['data'] != null) { + data = []; + json['data'].forEach((v) { + data!.add(new Data.fromJson(v)); + }); + } + + } + + Map toJson() { + final Map data = new Map(); + if (this.data != null) { + data['data'] = this.data!.map((v) => v.toJson()).toList(); + } + return data; + } +} + +class Data { + String? id; + String? countryName; + String? countryCode; + String? isdCode; + String? flagIcon; + Null? currencyXid; + bool? isActive; + Null? createdBy; + Null? modifiedBy; + + Data( + {this.id, + this.countryName, + this.countryCode, + this.isdCode, + this.flagIcon, + this.currencyXid, + this.isActive, + this.createdBy, + this.modifiedBy}); + + Data.fromJson(Map json) { + id = json['id']; + countryName = json['countryName']; + countryCode = json['countryCode']; + isdCode = json['isdCode']; + flagIcon = json['flagIcon']; + currencyXid = json['currency_xid']; + isActive = json['isActive']; + createdBy = json['createdBy']; + modifiedBy = json['modifiedBy']; + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['countryName'] = this.countryName; + data['countryCode'] = this.countryCode; + data['isdCode'] = this.isdCode; + data['flagIcon'] = this.flagIcon; + data['currency_xid'] = this.currencyXid; + data['isActive'] = this.isActive; + data['createdBy'] = this.createdBy; + data['modifiedBy'] = this.modifiedBy; + return data; + } +} diff --git a/lib/features/countrySelection/presentation/bloc/GetCountry/GetCountryAPI.dart b/lib/features/countrySelection/presentation/bloc/GetCountry/GetCountryAPI.dart new file mode 100644 index 0000000..d020d42 --- /dev/null +++ b/lib/features/countrySelection/presentation/bloc/GetCountry/GetCountryAPI.dart @@ -0,0 +1,14 @@ + +import '../../../../../Api_Helper/base_manager.dart'; +import '../../../../../shared/api/api_endpoints.dart'; +import '../../../../../shared/api/network_api_services.dart'; + +class GetCountryAPI { + GetCountryAPI(); + Future getcountryAPI() async { + String url=ApiEndpoints.getcountryurl; + final response = await NetworkApiService().get( + url, + ); + } +} \ No newline at end of file diff --git a/lib/features/countrySelection/presentation/bloc/GetCountry/getcountry_bloc.dart b/lib/features/countrySelection/presentation/bloc/GetCountry/getcountry_bloc.dart new file mode 100644 index 0000000..0902469 --- /dev/null +++ b/lib/features/countrySelection/presentation/bloc/GetCountry/getcountry_bloc.dart @@ -0,0 +1,26 @@ +import 'package:bloc/bloc.dart'; +import 'package:tanami_app/features/countrySelection/presentation/bloc/GetCountry/getcountryevent_bloc.dart'; + +import '../../../../../Api_Helper/base_manager.dart'; +import 'GetCountryAPI.dart'; + + +dynamic responseFromApi = []; + +class GetCountryBlock extends Bloc { + GetCountryBlock() : super(GetCountryState.initial) { + on(mapEventToState); + } + Future mapEventToState( + GetCountry event, Emitter emit) async { + if (event is GetCountry) { + emit(GetCountryState.loading); + try { + var resp = await GetCountryAPI().getcountryAPI(); + print("//"); + } catch (e) { + emit(GetCountryState.failure); + } + } + } +} \ No newline at end of file diff --git a/lib/features/countrySelection/presentation/bloc/GetCountry/getcountryevent_bloc.dart b/lib/features/countrySelection/presentation/bloc/GetCountry/getcountryevent_bloc.dart new file mode 100644 index 0000000..dea2a67 --- /dev/null +++ b/lib/features/countrySelection/presentation/bloc/GetCountry/getcountryevent_bloc.dart @@ -0,0 +1,14 @@ +abstract class GetCountryEvent { + const GetCountryEvent(); + + List get props => []; +} + +class GetCountry extends GetCountryEvent { + GetCountry(); + + +} + +// Define states +enum GetCountryState { initial, loading, success, failure, error } \ No newline at end of file diff --git a/lib/features/countrySelection/presentation/widgets/country_selection_list.dart b/lib/features/countrySelection/presentation/widgets/country_selection_list.dart index 4c31feb..2785e44 100644 --- a/lib/features/countrySelection/presentation/widgets/country_selection_list.dart +++ b/lib/features/countrySelection/presentation/widgets/country_selection_list.dart @@ -3,6 +3,8 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:gap/gap.dart'; import 'package:tanami_app/core/styles/app_color.dart'; import 'package:tanami_app/core/utils/constant/country_flag_data.dart'; +import 'package:tanami_app/features/countrySelection/presentation/bloc/GetCountry/getcountry_bloc.dart'; +import 'package:tanami_app/features/countrySelection/presentation/bloc/GetCountry/getcountryevent_bloc.dart'; import 'package:tanami_app/shared/components/text_widget.dart'; import '../bloc/choose_country_bloc.dart'; @@ -15,7 +17,32 @@ class CountrySelectionList extends StatelessWidget { @override Widget build(BuildContext context) { final radioBloc = context.read(); - return BlocBuilder( + return BlocConsumer( + listener: (context, state) { + if (state == GetCountryState.success) { + const SnackBar(content: Text("Successfully fetch")); + } else if (state == GetCountryState.error) { + const SnackBar(content: Text(" error")); + } else { + const SnackBar(content: Text(" not fetch")); + } + }, builder: (context, state) { + print(state); + if (state == GetCountryState.loading) { + return const Center( + child: SizedBox( + height: 40, + width: 40, + child: // ShimmerCommon(), + CircularProgressIndicator( + color: Color(0xFF0093FF), + ), + ), + ); + } + return Text("wait"); + }); + /* BlocBuilder( builder: (context, state) { int selectedIndex = -1; if (state is RadioSelectionChanged) { @@ -52,6 +79,6 @@ class CountrySelectionList extends StatelessWidget { }), ); }, - ); + ); */ } } diff --git a/lib/features/splash/presentation/pages/splash_layout.dart b/lib/features/splash/presentation/pages/splash_layout.dart index 3b7dd46..d34acf7 100644 --- a/lib/features/splash/presentation/pages/splash_layout.dart +++ b/lib/features/splash/presentation/pages/splash_layout.dart @@ -25,7 +25,7 @@ class SplashLayout extends StatelessWidget { fit: BoxFit.cover, ), ), - Positioned.fill( + /* Positioned.fill( child: Align( alignment: Alignment.center, child: SvgPicture.asset( @@ -39,7 +39,7 @@ class SplashLayout extends StatelessWidget { alignment: Alignment.bottomCenter, child: BottomVersionWidget(), ), - ), + ), */ ], ), ), diff --git a/lib/features/welcome/presentation/widgets/login_signup_button.dart b/lib/features/welcome/presentation/widgets/login_signup_button.dart index 5dbcee5..5dae6ae 100644 --- a/lib/features/welcome/presentation/widgets/login_signup_button.dart +++ b/lib/features/welcome/presentation/widgets/login_signup_button.dart @@ -1,9 +1,12 @@ import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:gap/gap.dart'; import 'package:tanami_app/core/routes/route_name.dart'; import 'package:tanami_app/core/routes/routes.dart'; import 'package:tanami_app/core/styles/app_color.dart'; +import 'package:tanami_app/features/countrySelection/presentation/bloc/GetCountry/getcountry_bloc.dart'; +import 'package:tanami_app/features/countrySelection/presentation/bloc/GetCountry/getcountryevent_bloc.dart'; import 'package:tanami_app/shared/components/button_widget.dart'; import '../../../../core/styles/app_text.dart'; @@ -26,9 +29,10 @@ class LoginSignUpButton extends StatelessWidget { height: 56.h, child: ButtonWidget().elevatedBtn( function: () { - goRouter.goNamed(RouteName.registerStepScreen, pathParameters: { + context.read().add(GetCountry()); + /* goRouter.goNamed(RouteName.registerStepScreen, pathParameters: { "fromScreentype": "welcome", - }); + }); */ }, text: AppText.signUpText, txtClr: AppColor.plainWhite, diff --git a/lib/main.dart b/lib/main.dart index 12a357c..df9e4d8 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -10,6 +10,7 @@ import 'core/utils/connectivity/network_connectivity.dart'; import 'core/utils/language/localizations_delegate.dart'; import 'features/biometric/presentation/bloc/biometric_bloc.dart'; import 'features/biometric/presentation/bloc/biometric_event.dart'; +import 'features/countrySelection/presentation/bloc/GetCountry/getcountry_bloc.dart'; import 'features/countrySelection/presentation/bloc/choose_country_bloc.dart'; import 'shared/components/bloc/bottom_nav_bar/bottom_navigation_bloc.dart'; import 'shared/components/bloc/language/lng_bloc.dart'; @@ -54,6 +55,8 @@ class MyApp extends StatefulWidget { } class _MyAppState extends State with WidgetsBindingObserver { + + final NetworkConnectivity _networkConnectivity = NetworkConnectivity(onStatusChange: (_) {}); @override @@ -89,6 +92,9 @@ class _MyAppState extends State with WidgetsBindingObserver { BlocProvider( create: (_) => LocalizationBloc(), ), + BlocProvider( + create: (_) => GetCountryBlock(), + ), ], child: ScreenUtilInit( builder: (BuildContext context, Widget? child) => diff --git a/lib/shared/api/api_endpoints.dart b/lib/shared/api/api_endpoints.dart index 99d024a..800a206 100644 --- a/lib/shared/api/api_endpoints.dart +++ b/lib/shared/api/api_endpoints.dart @@ -1,3 +1,6 @@ class ApiEndpoints { - static const base = ""; //App Base url + static const baseurl = + "https://tanami.betadelivery.com/api/development/v1/"; //App Base url + + static const getcountryurl = baseurl + "country/getAllCountry"; } diff --git a/lib/shared/api/commonAPI.dart b/lib/shared/api/commonAPI.dart new file mode 100644 index 0000000..e69de29 diff --git a/lib/shared/api/network_api_services.dart b/lib/shared/api/network_api_services.dart index c8336b6..09f30ed 100644 --- a/lib/shared/api/network_api_services.dart +++ b/lib/shared/api/network_api_services.dart @@ -6,37 +6,37 @@ class NetworkApiService { final Dio _dio = Dio(); // Common function for GET requests - Future get(String endpoint, + Future get(String url, {Map? queryParameters}) async { try { - return await _dio.get(endpoint, queryParameters: queryParameters); + return await _dio.get(url); } catch (e) { throw _handleError(e); } } // Common function for POST requests - Future post(String endpoint, dynamic data) async { + Future post(String url, dynamic data) async { try { - return await _dio.post(endpoint, data: data); + return await _dio.post(url, data: data); } catch (e) { throw _handleError(e); } } // Common function for PUT requests - Future put(String endpoint, dynamic data) async { + Future put(String url, dynamic data) async { try { - return await _dio.put(endpoint, data: data); + return await _dio.put(url, data: data); } catch (e) { throw _handleError(e); } } // Common function for DELETE requests - Future delete(String endpoint) async { + Future delete(String url) async { try { - return await _dio.delete(endpoint); + return await _dio.delete(url); } catch (e) { throw _handleError(e); } From da3a50e0b30d99bb314971c72a8b5a57eff27287 Mon Sep 17 00:00:00 2001 From: poojapandeyx Date: Wed, 10 Jul 2024 17:37:12 +0530 Subject: [PATCH 2/5] get country api --- lib/core/styles/app_text.dart | 497 +++++++++--------- .../presentation/pages/settings_layout.dart | 2 +- .../widgets/general_settings_section.dart | 12 +- .../presentation/widgets/kyc_card.dart | 9 +- .../widgets/privacy_settings_section.dart | 8 +- .../widgets/settings_bottom_section.dart | 6 +- .../widgets/settings_list_tile_item.dart | 7 +- .../widgets/support_settings_section.dart | 4 +- .../pages/change_password_screen.dart | 4 +- .../change_password_bottom_section.dart | 6 +- .../widgets/change_password_form.dart | 17 +- .../pages/contact_admin_screen.dart | 4 +- .../presentation/widgets/bottom_section.dart | 8 +- .../presentation/widgets/top_section.dart | 6 +- .../bloc/GetCountry/getcountry_bloc.dart | 1 + .../pages/choose_country_layout.dart | 8 +- .../pages/delete_account_screen.dart | 4 +- .../presentation/widgets/bottom_section.dart | 6 +- .../widgets/delete_account_dialog.dart | 10 +- .../presentation/widgets/form_section.dart | 18 +- .../presentation/widgets/top_section.dart | 5 +- .../faq/presentation/pages/faq_screen.dart | 4 +- .../restore_password_bottom_section.dart | 7 +- .../widgets/restore_password_form.dart | 8 +- ...ord_phone_verification_bottom_section.dart | 7 +- ...tore_password_phone_verification_form.dart | 8 +- ...ssword_phone_verification_top_section.dart | 8 +- .../widgets/restore_password_top_section.dart | 7 +- .../pages/language_change_layout.dart | 11 +- .../presentation/widgets/bottom_section.dart | 18 +- .../presentation/widgets/bottom_section.dart | 11 +- .../presentation/widgets/login_form.dart | 12 +- .../presentation/widgets/top_section.dart | 10 +- .../widgets/otp_fill_section.dart | 8 +- .../presentation/widgets/otp_top_section.dart | 6 +- .../widgets/resend_otp_section.dart | 4 +- .../widgets/register_bottom_section.dart | 6 +- .../presentation/widgets/register_form.dart | 8 +- .../widgets/register_step_bottom_section.dart | 6 +- .../widgets/register_step_top_section.dart | 7 +- .../widgets/register_top_section.dart | 7 +- .../widgets/register_user_bottom_section.dart | 19 +- .../widgets/register_user_form.dart | 24 +- .../widgets/register_user_top_section.dart | 5 +- .../pages/confirm_pin_screen.dart | 6 +- .../presentation/pages/pin_screen.dart | 6 +- .../widgets/confirm_pin_top_section.dart | 4 +- .../widgets/forgot_pin_dialog.dart | 13 +- .../widgets/pin_keypad_section.dart | 10 +- .../presentation/widgets/pin_top_section.dart | 14 +- .../widgets/bottom_version_widget.dart | 10 +- .../widgets/build_page_widget.dart | 14 +- .../widgets/login_signup_button.dart | 6 +- .../components/device_locked_dialog.dart | 10 +- lib/shared/components/exit_app_dialog.dart | 9 +- .../components/form_label_textfield.dart | 9 +- lib/shared/components/log_out_dialog.dart | 8 +- .../components/password_text_form_field.dart | 4 +- lib/shared/components/permission_dialog.dart | 11 +- 59 files changed, 562 insertions(+), 425 deletions(-) diff --git a/lib/core/styles/app_text.dart b/lib/core/styles/app_text.dart index da1a2f2..deb0511 100644 --- a/lib/core/styles/app_text.dart +++ b/lib/core/styles/app_text.dart @@ -1,72 +1,68 @@ class AppText { //Splash - static const String splashVersionText = "APP: v."; - static const String splashCopyrightText = '© 2024 Tanami'; + static const String splashVersionText = "splashVersionText"; + static const String splashCopyrightText = "splashCopyrightText"; //Welcome - static const String welcomeTitle1Text = "Tanami offers"; - static const String welcomeTitle2Text = "Invest alongside"; - static const String welcomeTitle3Text = "Start investing today "; - static const String welcomeDescription1Text = - "access to best-in-class, exclusive, global private investments"; - static const String welcomeDescription2Text = - "experienced investment experts with a long-standing track record"; - static const String welcomeDescription3Text = "with only SAR 1,000"; - static const String loginText = "Log In"; - static const String signUpText = "Sign Up"; + static const String welcomeTitle1Text = "welcomeTitle1Text"; + static const String welcomeTitle2Text = "welcomeTitle2Text"; + static const String welcomeTitle3Text = "welcomeTitle3Text"; + static const String welcomeDescription1Text = "welcomeDescription1Text"; + static const String welcomeDescription2Text = "welcomeDescription2Text"; + static const String welcomeDescription3Text = "welcomeDescription3Text"; + static const String loginText = "loginText"; + static const String signUpText = "signUpText"; //Login - static const String welcomeText = "Welcome back!"; - static const String pleaseEnterLoginDetails = - "Please enter your login details to get started"; + static const String welcomeText = "welcomeText"; + static const String pleaseEnterLoginDetails = "pleaseEnterLoginDetails"; static const String toGetYourAccountPleaseSetYourInfo = - "To get your account please set your info"; - static const String countryOfResidence = "Country of residence"; - static const String chooseCountry = "Choose country"; - static const String phoneNumber = "Phone number"; - static const String password = "Password"; - static const String enterPassword = "Enter Password"; - static const String invalidPhoneNo = "Invalid phone number"; - static const String enterPhoneNo = "Enter phone number"; - static const String invalidPassword = "Invalid password"; - static const String forgotPassword = "Forgot password"; + "toGetYourAccountPleaseSetYourInfo"; + static const String countryOfResidence = "countryOfResidence"; + static const String chooseCountry = "chooseCountry"; + static const String phoneNumber = "phoneNumber"; + static const String password = "password"; + static const String enterPassword = "enterPassword"; + static const String invalidPhoneNo = "invalidPhoneNo"; + static const String enterPhoneNo = "enterPhoneNo"; + static const String invalidPassword = "invalidPassword"; + static const String forgotPassword = "forgotPassword"; //Register - static const String getStartedToday = "Get started today"; + static const String getStartedToday = "getStartedToday"; static const String setupYourTanamiAccountToBegin = - "Setup your Tanami account to begin investing in a few simple steps"; - static const String step1 = "Step 1"; - static const String step2 = "Step 2"; - static const String step3 = "Step 3"; + "setupYourTanamiAccountToBegin"; + static const String step1 = "step1"; + static const String step2 = "step2"; + static const String step3 = "step3"; static const String enterYourCountryOfResidence = - "Enter your country of residence and mobile number"; - static const String enterNameEmailPassword = - "Enter your name, email and password"; + "enterYourCountryOfResidence"; + static const String enterNameEmailPassword = "enterNameEmailPassword"; static const String enterNameEmailUniquePassword = - "Enter your name and email and choose a unique password"; + "enterNameEmailUniquePassword"; static const String enableBiometricAuthentication = - "Enable biometric authentication and select a unique pin code for easy access"; - static const String getStarted = "Get started"; - static const String welcome = "Welcome!"; + "enableBiometricAuthentication"; + static const String getStarted = "getStarted"; + static const String welcome = "welcome"; static const String selectYourCountryOfResidence = - "Select your country of residence and enter your mobile number"; - static const String nextText = "Next"; - static const String backText = "Back"; - static const String firstNameText = "First Name"; - static const String lastNameText = "Last Name"; - static const String emailText = "Email"; - static const String repeatPasswordText = "Repeat Password"; + "selectYourCountryOfResidence"; + static const String nextText = "nextText"; + static const String backText = "backText"; + static const String firstNameText = "firstNameText"; + static const String lastNameText = "lastNameText"; + static const String emailText = "emailText"; + static const String repeatPasswordText = "repeatPasswordText"; static const String min8CharactersSpecialCharctersText = - "Min 8 characters, special characters required"; - static const String enterFirstName = "Enter first name"; - static const String enterLastName = "Enter last name"; - static const String enterEmail = "Enter email"; - static const String cantBeEmptyText = "Can't be empty"; - static const String passwordMismatch = "Password mismatch"; - static const String iAgreeToThe = "I agree to the "; - static const String termsAndCondition = "Terms & Conditions"; - static const String andThe = " and the"; - static const String privacyPolicy = "Privacy Policy"; + "min8CharactersSpecialCharctersText"; + static const String enterFirstName = "enterFirstName"; + static const String enterLastName = "enterLastName"; + static const String enterEmail = "enterEmail"; + static const String cantBeEmptyText = "cantBeEmptyText"; + static const String passwordMismatch = "passwordMismatch"; + static const String iAgreeToThe = "iAgreeToThe"; + static const String termsAndCondition = "termsAndCondition"; + static const String andThe = "andThe"; + static const String privacyPolicy = "privacyPolicy"; //Country Name static const String bahrainCountryText = "Bahrain"; @@ -75,255 +71,242 @@ class AppText { static const String qatarCountryText = "Qatar"; static const String saudiArabiaCountryText = "Saudi Arabia"; static const String uaeCountryText = "United Arab Emirates"; - static const String confirmSelectionText = "Confirm selection"; + static const String confirmSelectionText = "confirmSelectionText"; //Portfolio - static const String portfolioText = "Portfolio Value"; - static const String portfolio = "Portfolio Value: "; - static const String investmentamount = "Investment Amount"; - static const String currentval = "Current valuation"; - static const String totalreturn = "Total return"; - static const String disttodate = "Distributions to date"; - static const String includeddocs = "Investment Documents"; + static const String portfolioText = "portfolioText"; + static const String portfolio = "portfolio"; + static const String investmentamount = "investmentamount"; + static const String currentval = "currentval"; + static const String totalreturn = "totalreturn"; + static const String disttodate = "disttodate"; + static const String includeddocs = "includeddocs"; //Academy - static const String videosTitle = "Videos"; - static const String academyText = "Academy"; + static const String videosTitle = "videosTitle"; + static const String academyText = "academyText"; //Dialog - static const String exitText = "Exit"; - static const String cancelText = "Cancel"; + static const String exitText = "exitText"; + static const String cancelText = "cancelText"; static const String areYouSureYouWantToExitText = - "Are you sure you want to Exit?"; + "areYouSureYouWantToExitText"; //FAQ - static const String faqTitle = "Frequently Asked Questions:"; + static const String faqTitle = "faqTitle"; //Security - static const String unlockText = "Unlock"; - static const String tanamiAppIsLocked = "Tanami Capital is locked"; - static const String securityMssgText = - "For your security, you can only use Tanami Capital when it's unlocked"; - static const String faceIdText = "Face Id"; - static const String appAskPermissionText = - "Tanami App ask permission to use Face ID (or Fingerprint)"; + static const String unlockText = "unlockText"; + static const String tanamiAppIsLocked = "tanamiAppIsLocked"; + static const String securityMssgText = "securityMssgText"; + static const String faceIdText = "faceIdText"; + static const String appAskPermissionText = "appAskPermissionText"; //OTP - static const String checkYourMessages = "Check your messages"; - static const String referToSameOtpMessage = - "Enter the 6-digit code sent to your mobile"; - static const String resendSms = "Resend SMS"; - static const String otpVerifiedSucessfully = "OTP Verified Successfully!"; - static const String otpVerifiedFailed = "OTP Verification Failed:"; + static const String checkYourMessages = "checkYourMessages"; + static const String referToSameOtpMessage = "referToSameOtpMessage"; + static const String resendSms = "resendSms"; + static const String otpVerifiedSucessfully = "otpVerifiedSucessfully"; + static const String otpVerifiedFailed = "otpVerifiedFailed"; //Pin Code - static const String pinCode = "Pin Code"; - static const String createPinCode = "Create Pin Code"; - static const String changePinCode = "Change Pin Code"; - static const String confirmPinCode = "Confirm Pin Code"; - static const String incorrectPinCode = "Incorrect PIN. Please try again."; - static const String welcomeBackText = "Welcome back"; + static const String pinCode = "pinCode"; + static const String createPinCode = "createPinCode"; + static const String changePinCode = "changePinCode"; + static const String confirmPinCode = "confirmPinCode"; + static const String incorrectPinCode = "incorrectPinCode"; + static const String welcomeBackText = "welcomeBackText"; static const String userYourAppPinToLoginEnterTanami = - "Use your app PIN to login to enter Tanami"; - static const String forgotPinCode = "Forgot Pin Code"; - static const String notificationText = "Notification"; - static const String allowNotificationText = "Allow notification"; + "userYourAppPinToLoginEnterTanami"; + static const String forgotPinCode = "forgotPinCode"; + static const String notificationText = "notificationText"; + static const String allowNotificationText = "allowNotificationText"; static const String toRestorePinYouWillBeLoggedOut = - "To restore PIN you will be Logged out"; - static const String allowText = "Allow"; - static const String declineText = "Decline"; + "toRestorePinYouWillBeLoggedOut"; + static const String allowText = "allowText"; + static const String declineText = "declineText"; //Forgot Password - static const String almostHere = 'Almost here...'; - static const String completeAcc = - 'Complete account profile in 3 minutes to start investing'; + static const String almostHere = "almostHere"; + static const String completeAcc = "completeAcc"; //Forgot Password - static const String restorePasswordText = "Restore password"; + static const String restorePasswordText = "restorePasswordText"; static const String toRestorePasswordPleaseEnterPhoneNumber = - "To restore password please enter phone number"; - static const String createNewPasswordText = "Create new password"; - static const String submitText = "Submit"; + "toRestorePasswordPleaseEnterPhoneNumber"; + static const String createNewPasswordText = "createNewPasswordText"; + static const String submitText = "submitText"; //Wallet - static const String walletTitle = "Wallet balance"; - static const String walletText = "Wallet"; - static const String day = "Today"; - static const String filterTitle = "Filters"; - static const String onHold = "On Hold"; - static const String deposit = "Deposit"; - static const String withdraw = "Withdraw"; - static const String withdrawal = "Withdrawal"; - static const String yield = "Yield"; - static const String refund = "Refund"; - static const String investment = "Investment"; - static const String walletDetailsTitle = "Details"; - static const String withdrawalScreenTitle = 'Enter bank details'; - static const String depositScreenTitle = 'Deposit notification'; - static const String status = "Status"; - static const String paymentMethod = "Payment Method"; - static const String accountName = "Account Name"; - static const String accountHolderName = - 'Account Holder Name/Beneficiary Name'; - static const String iban = "IBAN"; - static const String beneficiaryAddress = "Beneficiary Address"; - static const String bankName = "Bank Name"; - static const String branchAddress = "Branch Address"; - static const String SWIFTcode = "SWIFT/BIC code"; - static const String refid = "Reference ID"; - static const String previewTitle = "Withdrawal confirmation"; - static const String info = - 'Your withdrawal request has been received and is currently being processed.'; - static const String info1 = - 'Please confirm the withdrawal amount and verify the accuracy of your bank details.'; - static const String workingDays = - 'Processing times vary from 3-7 working days'; - static const String balance = 'Wallet Balance'; - static const String withdrawTitle = 'Withdrawal'; - static const String depositTitle = 'Deposit'; - static const String withdrawDetails = 'Withdrawal details'; - static const String depositDetails = 'Deposit details'; - static const String required = 'Fields with * are required'; - static const String withdrawAmt = 'Total Withdrawal amount:'; - static const String depositAmt = 'Total Deposit amount:'; - static const String info2 = - 'Payment can include transfer fee from your bank '; - static const String info3 = - 'To accomplish payment please use payment details and Reference ID in tour Bank'; - static const String next = 'Next'; - static const String depositNoti = 'Create deposit notification'; - static const String payWithAppleText = 'Pay with Apple Pay'; - static const String submit = 'Submit request'; - static const String Submit = 'Submit'; - static const String submitDeposit = 'Submit deposit'; - static const String cont = 'Continue'; - static const String later = 'Later'; - static const String back = 'Back to change'; - static const String clear = 'Clear All'; - static const String bankTransfer = 'Bank Transfer'; - static const String amtTrans = 'Amount of transaction'; - static const String date1 = 'Newest first'; - static const String date2 = 'Oldest first'; - static const String all = 'All'; - static const String byDate = 'By date'; - static const String byAction = 'By type of action'; - static const String byStatus = 'By status'; + static const String walletTitle = "walletTitle"; + static const String walletText = "walletText"; + static const String day = "day"; + static const String filterTitle = "filterTitle"; + static const String onHold = "onHold"; + static const String deposit = "deposit"; + static const String withdraw = "withdraw"; + static const String withdrawal = "withdrawal"; + static const String yield = "yield"; + static const String refund = "refund"; + static const String investment = "investment"; + static const String walletDetailsTitle = "walletDetailsTitle"; + static const String withdrawalScreenTitle = "withdrawalScreenTitle"; + static const String depositScreenTitle = "depositScreenTitle"; + static const String status = "status"; + static const String paymentMethod = "paymentMethod"; + static const String accountName = "accountName"; + static const String accountHolderName = "accountHolderName"; + static const String iban = "iban"; + static const String beneficiaryAddress = "beneficiaryAddress"; + static const String bankName = "bankName"; + static const String branchAddress = "branchAddress"; + static const String SWIFTcode = "SWIFTcode"; + static const String refid = "refid"; + static const String previewTitle = "previewTitle"; + static const String info = "info"; + static const String info1 = "info1"; + static const String workingDays = "workingDays"; + static const String balance = "balance"; + static const String withdrawTitle = "withdrawTitle"; + static const String depositTitle = "depositTitle"; + static const String withdrawDetails = "withdrawDetails"; + static const String depositDetails = "depositDetails"; + static const String required = "required"; + static const String withdrawAmt = "withdrawAmt"; + static const String depositAmt = "depositAmt"; + static const String info2 = "info2"; + static const String info3 = "info3"; + static const String next = "next"; + static const String depositNoti = "depositNoti"; + static const String payWithAppleText = "payWithAppleText"; + static const String submit = "submit"; + static const String Submit = "Submit"; + static const String submitDeposit = "submitDeposit"; + static const String cont = "cont"; + static const String later = "later"; + static const String back = "back"; + static const String clear = "clear"; + static const String bankTransfer = "bankTransfer"; + static const String amtTrans = "amtTrans"; + static const String date1 = "date1"; + static const String date2 = "date2"; + static const String all = "all"; + static const String byDate = "byDate"; + static const String byAction = "byAction"; + static const String byStatus = "byStatus"; //Settings - static const String settingsText = "Settings"; - static const String experiencedInvestorText = "Experienced investor?"; - static const String removeInvestmentText = "Remove investment thresholds"; - static const String upgradeText = - "Upgrade your investor status today in a few simple steps to allows investments higher than SAR 200,000"; - static const String generalText = "General"; - static const String notificationsText = "Notifications"; - static const String languageText = "Language"; + static const String settingsText = "settingsText"; + static const String experiencedInvestorText = "experiencedInvestorText"; + static const String removeInvestmentText = "removeInvestmentText"; + static const String upgradeText = "upgradeText"; + static const String generalText = "generalText"; + static const String notificationsText = "notificationsText"; + static const String languageText = "languageText"; static const String englishText = "English"; - static const String privacySettingsText = "Privacy Settings"; - static const String biometricText = "Biometric ID"; - static const String resetPasswordText = "Reset Password"; - static const String resetPinCodeText = "Reset PIN-code"; - static const String supportText = "Support"; - static const String contactAdminText = "Contact Admin"; - static const String privacyPolicyText = "Privacy Policy"; - static const String termsAndConditionText = "Terms & Conditions"; - static const String faqText = "FAQ"; - static const String logoutText = "Log Out"; - static const String deleteAccountText = "Delete account"; - static const String areYouSureWantToLogoutText = - "Are you sure you want to Logout?"; - static const String noText = "No"; - static const String yesText = "Yes"; - static const String pinUpdatedSucess = "Pin updated Sucessfully !"; - static const String pinVerifiedSucess = "Pin verified Sucessfully !"; - static const String passwordUpdatedSucess = "Password updated Sucessfully !"; - static const String changePasswordText = "Change Password"; - static const String newPasswordText = "New Password"; - static const String currentPsswordText = "Current Password"; + static const String privacySettingsText = "privacySettingsText"; + static const String biometricText = "biometricText"; + static const String resetPasswordText = "resetPasswordText"; + static const String resetPinCodeText = "resetPinCodeText"; + static const String supportText = "supportText"; + static const String contactAdminText = "contactAdminText"; + static const String privacyPolicyText = "privacyPolicyText"; + static const String termsAndConditionText = "termsAndConditionText"; + static const String faqText = "faqText"; + static const String logoutText = "logoutText"; + static const String deleteAccountText = "deleteAccountText"; + static const String areYouSureWantToLogoutText = "areYouSureWantToLogoutText"; + static const String noText = "noText"; + static const String yesText = "yesText"; + static const String pinUpdatedSucess = "pinUpdatedSucess"; + static const String pinVerifiedSucess = "pinVerifiedSucess"; + static const String passwordUpdatedSucess = "passwordUpdatedSucess"; + static const String changePasswordText = "changePasswordText"; + static const String newPasswordText = "newPasswordText"; + static const String currentPsswordText = "currentPsswordText"; //Contact Admin - static const String byPhoneText = "By phone"; - static const String byEmailText = "By-mail"; - static const String weAreHereToHelp = "We are here to help!"; + static const String byPhoneText = "byPhoneText"; + static const String byEmailText = "byEmailText"; + static const String weAreHereToHelp = "weAreHereToHelp"; //Language Screen static const String arabicText = "اللغة العربية"; - static const String chooseTheLanguageText = "Choose the language"; + static const String chooseTheLanguageText = "chooseTheLanguageText"; static const String changingTheLanguageWillReloadApp = - "Changing the language will reload the application"; + "changingTheLanguageWillReloadApp"; //Delete Screen - static const String weAreSadToSeeYouGo = "We're sad to see you go :("; - static const String enterAdescription = "Enter a description..."; + static const String weAreSadToSeeYouGo = "weAreSadToSeeYouGo"; + static const String enterAdescription = "enterAdescription"; static const String toHelpUsImprovePleaseLetusKnowWhyYouWantToDeleteAccount = - "To help us improve, please let us know why you want to delete your account"; - static const String charactersLeft = "characters left"; + "toHelpUsImprovePleaseLetusKnowWhyYouWantToDeleteAccount"; + static const String charactersLeft = "charactersLeft"; static const String iUnderstandAndAgreeThatmyDataWillBeDeleted = - "I understand and agree that my data will be deleted"; - static const String noIWantToStay = "No, i want to stay"; - static const String pleaseEnteraDescription = "Please enter a description"; - static const String pleaseCheckThisField = "Please check this field"; + "iUnderstandAndAgreeThatmyDataWillBeDeleted"; + static const String noIWantToStay = "noIWantToStay"; + static const String pleaseEnteraDescription = "pleaseEnteraDescription"; + static const String pleaseCheckThisField = "pleaseCheckThisField"; static const String weHaveReceivedYourRequestToDeleteAccount = - "We have received your request to delete your account"; - static const String theRequestWillBeProcessed = - "The request will be processed within 72 hours"; - static const closeText = "Close"; + "weHaveReceivedYourRequestToDeleteAccount"; + static const String theRequestWillBeProcessed = "theRequestWillBeProcessed"; + static const String closeText = "closeText"; //Invest - static const String investText = "Invest"; - static const String availableText = "Available"; - static const String closedText = "Closed"; - static const String completeYourVerification = "Complete your verification"; + static const String investText = "investText"; + static const String availableText = "availableText"; + static const String closedText = "closedText"; + static const String completeYourVerification = "completeYourVerification"; static const String verifyYourAccountInUnderMinutesToStartInvestingToday = - "Verify your account in under 10 minutes to start investing today!"; - static const String closingDateText = "Closing Date"; - static const String closedDateText = "Closed Date"; - static const String fundedText = "funded"; - static const String sponsorNameText = "Sponsor name"; - static const String estimatedReturnText = "Estimated return"; - static const String originalEstimatedReturnText = "Original estimated return"; - static const String actualEstimatedReturnText = "Actual return"; - static const String actualReturnToDate = "Actual return to date"; - static const String holdingPeriodText = "Holding period"; - static const String payoutDateText = "Payout Date"; - static const String expectedExitDate = "Expected Exit Date"; - static const String minimumInvestmentText = "Minimum investment"; - static const String keyMeritsOfInvestmentText = "Key Merits"; - static const String investmentDetailsText = "Investment details"; - static const String enterInvestmentAmountText = "Enter investment amount"; + "verifyYourAccountInUnderMinutesToStartInvestingToday"; + static const String closingDateText = "closingDateText"; + static const String closedDateText = "closedDateText"; + static const String fundedText = "fundedText"; + static const String sponsorNameText = "sponsorNameText"; + static const String estimatedReturnText = "estimatedReturnText"; + static const String originalEstimatedReturnText = + "originalEstimatedReturnText"; + static const String actualEstimatedReturnText = "actualEstimatedReturnText"; + static const String actualReturnToDate = "actualReturnToDate"; + static const String holdingPeriodText = "holdingPeriodText"; + static const String payoutDateText = "payoutDateText"; + static const String expectedExitDate = "expectedExitDate"; + static const String minimumInvestmentText = "minimumInvestmentText"; + static const String keyMeritsOfInvestmentText = "keyMeritsOfInvestmentText"; + static const String investmentDetailsText = "investmentDetailsText"; + static const String enterInvestmentAmountText = "enterInvestmentAmountText"; static const String thisIsUsdInvestmentOpportunityText = - "This is a USD investment opportunity. Funds will be converted into USD at a rate of x upon confirmation"; - static const String choosePaymentMethodText = "Choose payment method"; - static const String balanceText = "Balance"; - static const String applePayText = "Apple Pay"; - static const String gPayText = "Gpay Pay"; - static const String bankTransferText = - "Directly transfer funds from your bank account into your Tanami wallet."; + "thisIsUsdInvestmentOpportunityText"; + static const String choosePaymentMethodText = "choosePaymentMethodText"; + static const String balanceText = "balanceText"; + static const String applePayText = "applePayText"; + static const String gPayText = "gPayText"; + static const String bankTransferText = "bankTransferText"; static const String instantTransferFundsApplePayText = - "Instant transfer of funds using Apple Pay!"; + "instantTransferFundsApplePayText"; static const String instantTransferFundsGpayPayText = - "Instant transfer of funds using Gpay Pay!"; + "instantTransferFundsGpayPayText"; static const String retailInvestirCanInvestMaxText = - "Retail investors can invest a maximum of SAR 200,000 in this opportunity."; + "retailInvestirCanInvestMaxText"; static const String upgradeYourInvestorStatusToIncreaseText = - "Upgrade your investor status to increase your investment limit."; - static const String currentExchangeText = "Current Exchange"; - static const String feeText = "Fee"; - static const String processingFees = "Processing fee"; - static const String debitedAmountText = "Debited amount"; - static const String totalInvestmentAmountText = "Total Investment amount"; - static const String confirmInvestmentText = "Confirm investment"; - static const String paymentMethodText = "Payment method"; - static const String totalDebitedAmountText = "Total debited amount"; + "upgradeYourInvestorStatusToIncreaseText"; + static const String currentExchangeText = "currentExchangeText"; + static const String feeText = "feeText"; + static const String processingFees = "processingFees"; + static const String debitedAmountText = "debitedAmountText"; + static const String totalInvestmentAmountText = "totalInvestmentAmountText"; + static const String confirmInvestmentText = "confirmInvestmentText"; + static const String paymentMethodText = "paymentMethodText"; + static const String totalDebitedAmountText = "totalDebitedAmountText"; static const String unableToProcessTransactionText = - "Unable to process transaction"; + "unableToProcessTransactionText"; static const String investmentOpportunityHasReachedMaxcapText = - "Investment opportunity has reached maximum capacity"; - static const String backToInvestmentText = "Back to Investment"; - static const String otpCheckIsFailedText = "OTP Check is failed..."; - static const String pleaseTryAgainText = "Please try again"; - static const String tryAgainText = "Try again"; - static const String investmentConfirmationText = "Investment confirmation"; - static const String enterAmountText = "Enter Amount"; - static const String pleaseEnterAmountText = "Please Enter Amount"; + "investmentOpportunityHasReachedMaxcapText"; + static const String backToInvestmentText = "backToInvestmentText"; + static const String otpCheckIsFailedText = "otpCheckIsFailedText"; + static const String pleaseTryAgainText = "pleaseTryAgainText"; + static const String tryAgainText = "tryAgainText"; + static const String investmentConfirmationText = "investmentConfirmationText"; + static const String enterAmountText = "enterAmountText"; + static const String pleaseEnterAmountText = "pleaseEnterAmountText"; } diff --git a/lib/features/MainScreens/Settings/presentation/pages/settings_layout.dart b/lib/features/MainScreens/Settings/presentation/pages/settings_layout.dart index 7032e64..349615f 100644 --- a/lib/features/MainScreens/Settings/presentation/pages/settings_layout.dart +++ b/lib/features/MainScreens/Settings/presentation/pages/settings_layout.dart @@ -19,7 +19,7 @@ class SettingsLayout extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - kycCard(), + kycCard(context), const Gap(15), const GeneralSettingsSection(), const Gap(15), diff --git a/lib/features/MainScreens/Settings/presentation/widgets/general_settings_section.dart b/lib/features/MainScreens/Settings/presentation/widgets/general_settings_section.dart index fa743b9..06024bf 100644 --- a/lib/features/MainScreens/Settings/presentation/widgets/general_settings_section.dart +++ b/lib/features/MainScreens/Settings/presentation/widgets/general_settings_section.dart @@ -9,6 +9,7 @@ import 'package:tanami_app/core/styles/app_text.dart'; import 'package:tanami_app/shared/components/bloc/toggle/toggle_bloc.dart'; import 'package:tanami_app/shared/components/text_widget.dart'; +import '../../../../../core/utils/language/localizations_delegate.dart'; import '../../../../../shared/components/toggle_widget.dart'; import 'settings_list_tile_item.dart'; @@ -17,6 +18,7 @@ class GeneralSettingsSection extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return Padding( padding: const EdgeInsets.symmetric( horizontal: 16, @@ -25,7 +27,7 @@ class GeneralSettingsSection extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ TextWidget().text14W600( - AppText.generalText, + localizations.translate(AppText.generalText), clr: AppColor.hintTextColor, ), const Gap(5), @@ -33,7 +35,7 @@ class GeneralSettingsSection extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ TextWidget().text14W600( - AppText.allowNotificationText, + localizations.translate(AppText.allowNotificationText), clr: AppColor.textLabelColor, ), BlocProvider( @@ -47,7 +49,7 @@ class GeneralSettingsSection extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ TextWidget().text14W600( - AppText.biometricText, + localizations.translate(AppText.biometricText), clr: AppColor.textLabelColor, ), BlocProvider( @@ -62,8 +64,8 @@ class GeneralSettingsSection extends StatelessWidget { goRouter.pushNamed(RouteName.languageChangeScreen); }, icon: AppImages.languageIcon, - title: AppText.languageText, - trailing: AppText.englishText, + title: localizations.translate(AppText.languageText), + trailing: localizations.translate(AppText.englishText), ), const Gap(10), const Divider( diff --git a/lib/features/MainScreens/Settings/presentation/widgets/kyc_card.dart b/lib/features/MainScreens/Settings/presentation/widgets/kyc_card.dart index 191320b..c9f5900 100644 --- a/lib/features/MainScreens/Settings/presentation/widgets/kyc_card.dart +++ b/lib/features/MainScreens/Settings/presentation/widgets/kyc_card.dart @@ -6,7 +6,10 @@ import 'package:tanami_app/core/styles/app_images.dart'; import 'package:tanami_app/core/styles/app_text.dart'; import 'package:tanami_app/shared/components/text_widget.dart'; -Widget kycCard() { +import '../../../../../core/utils/language/localizations_delegate.dart'; + +Widget kycCard(BuildContext context) { + var localizations = AppLocalizations.of(context); return Padding( padding: const EdgeInsets.symmetric( horizontal: 16, @@ -49,11 +52,11 @@ Widget kycCard() { crossAxisAlignment: CrossAxisAlignment.start, children: [ TextWidget().text14W600( - AppText.removeInvestmentText, + localizations.translate(AppText.removeInvestmentText), clr: AppColor.kycCardTextColor, ), TextWidget().text11W500( - AppText.upgradeText, + localizations.translate(AppText.upgradeText), clr: AppColor.kycCardTextColor, ), ], diff --git a/lib/features/MainScreens/Settings/presentation/widgets/privacy_settings_section.dart b/lib/features/MainScreens/Settings/presentation/widgets/privacy_settings_section.dart index addc939..ba4aaf6 100644 --- a/lib/features/MainScreens/Settings/presentation/widgets/privacy_settings_section.dart +++ b/lib/features/MainScreens/Settings/presentation/widgets/privacy_settings_section.dart @@ -7,6 +7,7 @@ import 'package:tanami_app/shared/components/text_widget.dart'; import '../../../../../core/routes/route_name.dart'; import '../../../../../core/routes/routes.dart'; +import '../../../../../core/utils/language/localizations_delegate.dart'; import 'settings_list_tile_item.dart'; class PrivacySettingsSection extends StatelessWidget { @@ -14,6 +15,7 @@ class PrivacySettingsSection extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return Padding( padding: const EdgeInsets.symmetric( horizontal: 16, @@ -22,7 +24,7 @@ class PrivacySettingsSection extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ TextWidget().text14W600( - AppText.privacySettingsText, + localizations.translate(AppText.privacySettingsText), clr: AppColor.hintTextColor, ), const Gap(5), @@ -33,7 +35,7 @@ class PrivacySettingsSection extends StatelessWidget { ); }, icon: AppImages.resetPasswordIcon, - title: AppText.resetPasswordText, + title: localizations.translate(AppText.resetPasswordText), trailing: "", ), const Gap(8), @@ -44,7 +46,7 @@ class PrivacySettingsSection extends StatelessWidget { }); }, icon: AppImages.resetPinIcon, - title: AppText.resetPinCodeText, + title: localizations.translate(AppText.resetPinCodeText), trailing: "", ), const Gap(10), diff --git a/lib/features/MainScreens/Settings/presentation/widgets/settings_bottom_section.dart b/lib/features/MainScreens/Settings/presentation/widgets/settings_bottom_section.dart index 7de6115..6fc3a92 100644 --- a/lib/features/MainScreens/Settings/presentation/widgets/settings_bottom_section.dart +++ b/lib/features/MainScreens/Settings/presentation/widgets/settings_bottom_section.dart @@ -7,6 +7,7 @@ import 'package:tanami_app/core/routes/routes.dart'; import '../../../../../core/styles/app_color.dart'; import '../../../../../core/styles/app_text.dart'; +import '../../../../../core/utils/language/localizations_delegate.dart'; import '../../../../../shared/components/button_widget.dart'; import '../../../../../shared/components/log_out_dialog.dart'; @@ -15,6 +16,7 @@ class SettingsBottomSection extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return Column( children: [ const Gap(36), @@ -29,7 +31,7 @@ class SettingsBottomSection extends StatelessWidget { function: () { buildprofilelogoutdialog(context); }, - text: AppText.logoutText, + text: localizations.translate(AppText.logoutText), clr: AppColor.primaryColor2, ), ), @@ -43,7 +45,7 @@ class SettingsBottomSection extends StatelessWidget { function: () { goRouter.pushNamed(RouteName.deleteAccountScreen); }, - text: AppText.deleteAccountText, + text: localizations.translate(AppText.deleteAccountText), clr: AppColor.plainWhite, ), ), diff --git a/lib/features/MainScreens/Settings/presentation/widgets/settings_list_tile_item.dart b/lib/features/MainScreens/Settings/presentation/widgets/settings_list_tile_item.dart index 64d4cc3..6f82da4 100644 --- a/lib/features/MainScreens/Settings/presentation/widgets/settings_list_tile_item.dart +++ b/lib/features/MainScreens/Settings/presentation/widgets/settings_list_tile_item.dart @@ -4,6 +4,8 @@ import 'package:gap/gap.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:tanami_app/core/styles/app_color.dart'; +import '../../../../../core/utils/language/localizations_delegate.dart'; + class SettingsListItem extends StatelessWidget { final String icon; final String title; @@ -20,6 +22,7 @@ class SettingsListItem extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return Container( padding: const EdgeInsets.symmetric( vertical: 8.0, @@ -32,7 +35,7 @@ class SettingsListItem extends StatelessWidget { onTap: onTapFunc, leading: SvgPicture.asset(icon), title: Text( - title, + localizations.translate(title), style: GoogleFonts.dmSans( fontSize: 14, fontWeight: FontWeight.w600, @@ -42,7 +45,7 @@ class SettingsListItem extends StatelessWidget { mainAxisSize: MainAxisSize.min, children: [ Text( - trailing, + localizations.translate(trailing), style: GoogleFonts.dmSans( fontSize: 15, fontWeight: FontWeight.w500, diff --git a/lib/features/MainScreens/Settings/presentation/widgets/support_settings_section.dart b/lib/features/MainScreens/Settings/presentation/widgets/support_settings_section.dart index dd3c2b5..6c06b74 100644 --- a/lib/features/MainScreens/Settings/presentation/widgets/support_settings_section.dart +++ b/lib/features/MainScreens/Settings/presentation/widgets/support_settings_section.dart @@ -7,6 +7,7 @@ import 'package:tanami_app/core/styles/app_images.dart'; import 'package:tanami_app/core/styles/app_text.dart'; import 'package:tanami_app/shared/components/text_widget.dart'; +import '../../../../../core/utils/language/localizations_delegate.dart'; import 'settings_list_tile_item.dart'; class SupportSettingsSection extends StatelessWidget { @@ -14,6 +15,7 @@ class SupportSettingsSection extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return Padding( padding: const EdgeInsets.symmetric( horizontal: 16, @@ -22,7 +24,7 @@ class SupportSettingsSection extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ TextWidget().text14W600( - AppText.supportText, + localizations.translate(AppText.supportText), clr: AppColor.hintTextColor, ), const Gap(8), diff --git a/lib/features/changePassword/presentation/pages/change_password_screen.dart b/lib/features/changePassword/presentation/pages/change_password_screen.dart index dd48824..b84852d 100644 --- a/lib/features/changePassword/presentation/pages/change_password_screen.dart +++ b/lib/features/changePassword/presentation/pages/change_password_screen.dart @@ -5,6 +5,7 @@ import 'package:google_fonts/google_fonts.dart'; import '../../../../core/styles/app_color.dart'; import '../../../../core/styles/app_text.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../bloc/change_password_bloc.dart'; import 'change_password_layout.dart'; @@ -13,6 +14,7 @@ class ChangePasswordScreen extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return Scaffold( backgroundColor: AppColor.plainWhite, appBar: AppBar( @@ -21,7 +23,7 @@ class ChangePasswordScreen extends StatelessWidget { scrolledUnderElevation: 0.0, centerTitle: true, title: Text( - AppText.changePasswordText, + localizations.translate(AppText.changePasswordText), style: GoogleFonts.dmSans( color: const Color(0xFF272727), fontSize: 20.sp, diff --git a/lib/features/changePassword/presentation/widgets/change_password_bottom_section.dart b/lib/features/changePassword/presentation/widgets/change_password_bottom_section.dart index ce0e12d..f537bd4 100644 --- a/lib/features/changePassword/presentation/widgets/change_password_bottom_section.dart +++ b/lib/features/changePassword/presentation/widgets/change_password_bottom_section.dart @@ -8,6 +8,7 @@ import 'package:tanami_app/shared/components/toast_message.dart'; import '../../../../core/routes/routes.dart'; import '../../../../core/styles/app_color.dart'; import '../../../../core/styles/app_text.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/button_widget.dart'; import '../bloc/change_password_bloc.dart'; import '../bloc/change_password_event.dart'; @@ -20,6 +21,7 @@ class RestorePasswordBottomSection extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return Column( mainAxisSize: MainAxisSize.min, children: [ @@ -77,7 +79,7 @@ class RestorePasswordBottomSection extends StatelessWidget { ) : null; }, - text: AppText.submitText, + text: localizations.translate(AppText.submitText), clr: isButtonEnabled ? AppColor.primaryColor2 : AppColor.inactiveBtnColor, @@ -92,7 +94,7 @@ class RestorePasswordBottomSection extends StatelessWidget { function: () { goRouter.pop(); }, - text: AppText.cancelText, + text: localizations.translate(AppText.cancelText), ), const Gap(10), ], diff --git a/lib/features/changePassword/presentation/widgets/change_password_form.dart b/lib/features/changePassword/presentation/widgets/change_password_form.dart index 15fdfb1..012be1a 100644 --- a/lib/features/changePassword/presentation/widgets/change_password_form.dart +++ b/lib/features/changePassword/presentation/widgets/change_password_form.dart @@ -6,6 +6,7 @@ import 'package:tanami_app/core/styles/app_text.dart'; import '../../../../core/routes/route_name.dart'; import '../../../../core/routes/routes.dart'; import '../../../../core/styles/app_color.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/bloc/password_field/password_visibility_bloc.dart'; import '../../../../shared/components/button_widget.dart'; import '../../../../shared/components/form_label_textfield.dart'; @@ -17,6 +18,7 @@ class RestorePasswordForm extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); final restorePasswordBloc = context.read(); // Reset fields when the screen is built @@ -37,8 +39,8 @@ class RestorePasswordForm extends StatelessWidget { BlocProvider( create: (_) => PasswordVisibilityBloc(), child: FormLabelTextField( - hintText: AppText.enterPassword, - title: AppText.currentPsswordText, + hintText: localizations.translate(AppText.enterPassword), + title: localizations.translate(AppText.currentPsswordText), type: AppText.password.toLowerCase(), textEditingController: restorePasswordBloc.currentPasswordTextField, @@ -48,8 +50,8 @@ class RestorePasswordForm extends StatelessWidget { BlocProvider( create: (_) => PasswordVisibilityBloc(), child: FormLabelTextField( - hintText: AppText.enterPassword, - title: AppText.newPasswordText, + hintText: localizations.translate(AppText.enterPassword), + title: localizations.translate(AppText.newPasswordText), type: AppText.password.toLowerCase(), textEditingController: restorePasswordBloc.passwordTextField, ), @@ -58,8 +60,8 @@ class RestorePasswordForm extends StatelessWidget { BlocProvider( create: (_) => PasswordVisibilityBloc(), child: FormLabelTextField( - hintText: AppText.enterPassword, - title: AppText.repeatPasswordText, + hintText: localizations.translate(AppText.enterPassword), + title: localizations.translate(AppText.repeatPasswordText), type: AppText.password.toLowerCase(), textEditingController: restorePasswordBloc.repeatPasswordTextField, @@ -73,7 +75,8 @@ class RestorePasswordForm extends StatelessWidget { goRouter.pushNamed( RouteName.forgotPasswordPhoneVerificationScreen); }, - text: TextWidget().text15W400(AppText.forgotPassword, + text: TextWidget().text15W400( + localizations.translate(AppText.forgotPassword), clr: AppColor.forgotPassButtonColor, textDecoration: TextDecoration.underline), ), diff --git a/lib/features/contactAdmin/presentation/pages/contact_admin_screen.dart b/lib/features/contactAdmin/presentation/pages/contact_admin_screen.dart index 42e2947..f14deb1 100644 --- a/lib/features/contactAdmin/presentation/pages/contact_admin_screen.dart +++ b/lib/features/contactAdmin/presentation/pages/contact_admin_screen.dart @@ -19,8 +19,8 @@ class ContactAdminScreen extends StatelessWidget { ), body: ListView( children: [ - topSection(), - bottomSection(), + topSection(context), + bottomSection(context), ], ), ); diff --git a/lib/features/contactAdmin/presentation/widgets/bottom_section.dart b/lib/features/contactAdmin/presentation/widgets/bottom_section.dart index ffdc161..afb55a5 100644 --- a/lib/features/contactAdmin/presentation/widgets/bottom_section.dart +++ b/lib/features/contactAdmin/presentation/widgets/bottom_section.dart @@ -6,9 +6,11 @@ import 'package:tanami_app/core/styles/app_images.dart'; import 'package:tanami_app/core/styles/app_text.dart'; import 'package:tanami_app/core/utils/url_launcher/url_launcher.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/text_widget.dart'; -Widget bottomSection() { +Widget bottomSection(BuildContext context) { + var localizations = AppLocalizations.of(context); return Padding( padding: const EdgeInsets.all(22.0), child: Column( @@ -16,7 +18,7 @@ Widget bottomSection() { const Gap(50.0), contactOption( icon: AppImages.byPhoneIcon, - title: AppText.byPhoneText, + title: localizations.translate(AppText.byPhoneText), subtitle: '+973 12345678', onTap: () { launchPhone('+973 12345678'); @@ -25,7 +27,7 @@ Widget bottomSection() { const Gap(16.0), contactOption( icon: AppImages.byMailIcon, - title: AppText.byEmailText, + title: localizations.translate(AppText.byEmailText), subtitle: 'info@tanamicapital.com', onTap: () { launchEmail('info@tanamicapital.com'); diff --git a/lib/features/contactAdmin/presentation/widgets/top_section.dart b/lib/features/contactAdmin/presentation/widgets/top_section.dart index 12e9fbf..0d6bb9f 100644 --- a/lib/features/contactAdmin/presentation/widgets/top_section.dart +++ b/lib/features/contactAdmin/presentation/widgets/top_section.dart @@ -5,9 +5,11 @@ import 'package:gap/gap.dart'; import '../../../../core/styles/app_color.dart'; import '../../../../core/styles/app_images.dart'; import '../../../../core/styles/app_text.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/text_widget.dart'; -Widget topSection() { +Widget topSection(BuildContext context) { + var localizations = AppLocalizations.of(context); return Column( children: [ const Gap(85), @@ -18,7 +20,7 @@ Widget topSection() { ), const Gap(24), TextWidget().text17W700( - AppText.weAreHereToHelp, + localizations.translate(AppText.weAreHereToHelp), clr: AppColor.textLabelColor, ), const Gap(10), diff --git a/lib/features/countrySelection/presentation/bloc/GetCountry/getcountry_bloc.dart b/lib/features/countrySelection/presentation/bloc/GetCountry/getcountry_bloc.dart index 0902469..a5f1bda 100644 --- a/lib/features/countrySelection/presentation/bloc/GetCountry/getcountry_bloc.dart +++ b/lib/features/countrySelection/presentation/bloc/GetCountry/getcountry_bloc.dart @@ -20,6 +20,7 @@ class GetCountryBlock extends Bloc { print("//"); } catch (e) { emit(GetCountryState.failure); + } } } diff --git a/lib/features/countrySelection/presentation/pages/choose_country_layout.dart b/lib/features/countrySelection/presentation/pages/choose_country_layout.dart index 9160d4e..86eeb7b 100644 --- a/lib/features/countrySelection/presentation/pages/choose_country_layout.dart +++ b/lib/features/countrySelection/presentation/pages/choose_country_layout.dart @@ -5,6 +5,7 @@ import 'package:tanami_app/core/styles/app_text.dart'; import 'package:tanami_app/shared/components/appbar_widget.dart'; import '../../../../core/styles/app_color.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/button_widget.dart'; import '../widgets/country_selection_list.dart'; @@ -13,6 +14,7 @@ class ChooseCountryLayout extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return Scaffold( backgroundColor: AppColor.plainWhite, bottomNavigationBar: Container( @@ -27,13 +29,13 @@ class ChooseCountryLayout extends StatelessWidget { function: () { goRouter.pop(); }, - text: AppText.confirmSelectionText, + text: localizations.translate(AppText.confirmSelectionText), clr: AppColor.primaryColor2, ), ), - appBar: const AppBarWidget( + appBar: AppBarWidget( height: 75, - titleTxt: AppText.chooseCountry, + titleTxt: localizations.translate(AppText.chooseCountry), ), body: const CountrySelectionList(), ); diff --git a/lib/features/deleteAccount/presentation/pages/delete_account_screen.dart b/lib/features/deleteAccount/presentation/pages/delete_account_screen.dart index 72c414d..d738d1c 100644 --- a/lib/features/deleteAccount/presentation/pages/delete_account_screen.dart +++ b/lib/features/deleteAccount/presentation/pages/delete_account_screen.dart @@ -6,6 +6,7 @@ import 'package:tanami_app/shared/components/text_widget.dart'; import '../../../../core/styles/app_color.dart'; import '../../../../core/styles/app_text.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/bloc/checkbox/checkbox_bloc.dart'; import '../bloc/delete_account_bloc.dart'; @@ -14,6 +15,7 @@ class DeleteAccountScreen extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return Scaffold( backgroundColor: AppColor.plainWhite, appBar: AppBar( @@ -21,7 +23,7 @@ class DeleteAccountScreen extends StatelessWidget { elevation: 0, scrolledUnderElevation: 0, title: TextWidget().text20W700( - AppText.deleteAccountText, + localizations.translate(AppText.deleteAccountText), clr: AppColor.plainBlack, ), centerTitle: true, diff --git a/lib/features/deleteAccount/presentation/widgets/bottom_section.dart b/lib/features/deleteAccount/presentation/widgets/bottom_section.dart index 2040442..0edfd37 100644 --- a/lib/features/deleteAccount/presentation/widgets/bottom_section.dart +++ b/lib/features/deleteAccount/presentation/widgets/bottom_section.dart @@ -6,6 +6,7 @@ import 'package:gap/gap.dart'; import '../../../../core/routes/routes.dart'; import '../../../../core/styles/app_color.dart'; import '../../../../core/styles/app_text.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/bloc/checkbox/checkbox_bloc.dart'; import '../../../../shared/components/bloc/checkbox/checkbox_event.dart'; import '../../../../shared/components/bloc/checkbox/checkbox_state.dart'; @@ -19,6 +20,7 @@ import 'delete_account_dialog.dart'; Widget bottomSection(BuildContext context) { final deleteAccountBloc = context.read(); + var localizations = AppLocalizations.of(context); return Column( mainAxisSize: MainAxisSize.min, @@ -35,7 +37,7 @@ Widget bottomSection(BuildContext context) { function: () { goRouter.pop(); }, - text: AppText.noIWantToStay, + text: localizations.translate(AppText.noIWantToStay), clr: AppColor.primaryColor2, ), ), @@ -83,7 +85,7 @@ Widget bottomSection(BuildContext context) { } } }, - text: AppText.deleteAccountText, + text: localizations.translate(AppText.deleteAccountText), clr: AppColor.plainWhite, ), ); diff --git a/lib/features/deleteAccount/presentation/widgets/delete_account_dialog.dart b/lib/features/deleteAccount/presentation/widgets/delete_account_dialog.dart index ec11f08..81c76b6 100644 --- a/lib/features/deleteAccount/presentation/widgets/delete_account_dialog.dart +++ b/lib/features/deleteAccount/presentation/widgets/delete_account_dialog.dart @@ -4,6 +4,7 @@ import 'package:tanami_app/core/routes/routes.dart'; import 'package:tanami_app/core/styles/app_color.dart'; import 'package:tanami_app/core/styles/app_text.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/text_widget.dart'; class AccountDeletionDialog extends StatelessWidget { @@ -11,6 +12,7 @@ class AccountDeletionDialog extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return AlertDialog( backgroundColor: AppColor.plainWhite, shape: RoundedRectangleBorder( @@ -29,7 +31,8 @@ class AccountDeletionDialog extends StatelessWidget { }, ), TextWidget().text17W700( - AppText.weHaveReceivedYourRequestToDeleteAccount, + localizations + .translate(AppText.weHaveReceivedYourRequestToDeleteAccount), clr: AppColor.textLabelColor, ), ], @@ -38,7 +41,7 @@ class AccountDeletionDialog extends StatelessWidget { mainAxisSize: MainAxisSize.min, children: [ TextWidget().text15W500( - AppText.theRequestWillBeProcessed, + localizations.translate(AppText.theRequestWillBeProcessed), clr: AppColor.hintTextColor, ), const Gap(20), @@ -46,7 +49,8 @@ class AccountDeletionDialog extends StatelessWidget { onTap: () { goRouter.pop(); }, - child: TextWidget().text14W500(AppText.closeText, + child: TextWidget().text14W500( + localizations.translate(AppText.closeText), textDecoration: TextDecoration.underline, clr: AppColor.otpTextColor), ), diff --git a/lib/features/deleteAccount/presentation/widgets/form_section.dart b/lib/features/deleteAccount/presentation/widgets/form_section.dart index ba3d82f..dee204e 100644 --- a/lib/features/deleteAccount/presentation/widgets/form_section.dart +++ b/lib/features/deleteAccount/presentation/widgets/form_section.dart @@ -7,6 +7,7 @@ import 'package:tanami_app/core/styles/app_color.dart'; import 'package:tanami_app/core/styles/app_text.dart'; import 'package:tanami_app/shared/components/text_widget.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/bloc/checkbox/checkbox_bloc.dart'; import '../../../../shared/components/bloc/checkbox/checkbox_state.dart'; import '../../../../shared/components/checkbox_widget.dart'; @@ -21,6 +22,7 @@ class FormSection extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); final deleteAccountBloc = context.read(); return Form( key: deleteAccountBloc.formKey, @@ -44,11 +46,12 @@ class FormSection extends StatelessWidget { deleteAccountBloc.descriptionTextField.text, )); }, - hintText: AppText.enterAdescription, + hintText: + localizations.translate(AppText.enterAdescription), textEditingController: deleteAccountBloc.descriptionTextField, - title: AppText - .toHelpUsImprovePleaseLetusKnowWhyYouWantToDeleteAccount, + title: localizations.translate(AppText + .toHelpUsImprovePleaseLetusKnowWhyYouWantToDeleteAccount), type: "description", ); }, @@ -58,11 +61,11 @@ class FormSection extends StatelessWidget { builder: (context, state) { if (state is TextUpdated) { return TextWidget().text14W400( - "${state.charactersLeft} ${AppText.charactersLeft}", + "${state.charactersLeft} ${localizations.translate(AppText.charactersLeft)}", clr: AppColor.descriptionText); } return TextWidget().text14W400( - "350 ${AppText.charactersLeft}", + "350 ${localizations.translate(AppText.charactersLeft)}", clr: AppColor.descriptionText); }, ), @@ -82,7 +85,8 @@ class FormSection extends StatelessWidget { child: SizedBox( width: 0.85.sw, child: TextWidget().text14W500( - AppText.iUnderstandAndAgreeThatmyDataWillBeDeleted, + localizations.translate( + AppText.iUnderstandAndAgreeThatmyDataWillBeDeleted), clr: AppColor.charcoalColor, txtAlign: TextAlign.start, ), @@ -97,7 +101,7 @@ class FormSection extends StatelessWidget { child: SizedBox( width: 0.75.sw, child: TextWidget().text14W500( - AppText.pleaseCheckThisField, + localizations.translate(AppText.pleaseCheckThisField), clr: AppColor.txtErrorColor, txtAlign: TextAlign.start, ), diff --git a/lib/features/deleteAccount/presentation/widgets/top_section.dart b/lib/features/deleteAccount/presentation/widgets/top_section.dart index c2ff111..8212c0f 100644 --- a/lib/features/deleteAccount/presentation/widgets/top_section.dart +++ b/lib/features/deleteAccount/presentation/widgets/top_section.dart @@ -6,6 +6,8 @@ import 'package:tanami_app/core/styles/app_images.dart'; import 'package:tanami_app/core/styles/app_text.dart'; import 'package:tanami_app/shared/components/text_widget.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; + class TopSection extends StatelessWidget { const TopSection({ super.key, @@ -13,6 +15,7 @@ class TopSection extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ @@ -24,7 +27,7 @@ class TopSection extends StatelessWidget { ), const Gap(30), TextWidget().text20W700( - AppText.weAreSadToSeeYouGo, + localizations.translate(AppText.weAreSadToSeeYouGo), clr: AppColor.charcoalColor, ), ], diff --git a/lib/features/faq/presentation/pages/faq_screen.dart b/lib/features/faq/presentation/pages/faq_screen.dart index 1f763ef..4b7b753 100644 --- a/lib/features/faq/presentation/pages/faq_screen.dart +++ b/lib/features/faq/presentation/pages/faq_screen.dart @@ -6,6 +6,7 @@ import 'package:google_fonts/google_fonts.dart'; import 'package:tanami_app/core/styles/app_color.dart'; import 'package:tanami_app/core/styles/app_text.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/appbar_widget.dart'; class FAQScreen extends StatefulWidget { @@ -20,6 +21,7 @@ class _AccountappState extends State { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return Scaffold( backgroundColor: AppColor.plainWhite, appBar: const AppBarWidget( @@ -35,7 +37,7 @@ class _AccountappState extends State { Padding( padding: EdgeInsets.only(left: 16.w, top: 23.h), child: Text( - AppText.faqTitle, + localizations.translate(AppText.faqTitle), style: GoogleFonts.dmSans( fontSize: 18.sp, color: AppColor.charcoalColor, diff --git a/lib/features/forgotPassword/presentation/widgets/restore_password_bottom_section.dart b/lib/features/forgotPassword/presentation/widgets/restore_password_bottom_section.dart index 5942f4a..0545c8b 100644 --- a/lib/features/forgotPassword/presentation/widgets/restore_password_bottom_section.dart +++ b/lib/features/forgotPassword/presentation/widgets/restore_password_bottom_section.dart @@ -9,6 +9,7 @@ import '../../../../core/routes/route_name.dart'; import '../../../../core/routes/routes.dart'; import '../../../../core/styles/app_color.dart'; import '../../../../core/styles/app_text.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/button_widget.dart'; import '../../../../shared/components/text_widget.dart'; import '../../../countrySelection/presentation/bloc/choose_country_bloc.dart'; @@ -23,6 +24,7 @@ class RestorePasswordBottomSection extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); final radioBloc = context.read(); return Column( children: [ @@ -75,7 +77,7 @@ class RestorePasswordBottomSection extends StatelessWidget { ) : null; }, - text: AppText.submitText, + text: localizations.translate(AppText.submitText), clr: isButtonEnabled ? AppColor.primaryColor2 : AppColor.inactiveBtnColor, @@ -88,7 +90,8 @@ class RestorePasswordBottomSection extends StatelessWidget { function: () { goRouter.pop(); }, - text: TextWidget().text14W700(AppText.backText, + text: TextWidget().text14W700( + localizations.translate(AppText.backText), clr: AppColor.textLabelColor, textDecoration: TextDecoration.underline)), ], diff --git a/lib/features/forgotPassword/presentation/widgets/restore_password_form.dart b/lib/features/forgotPassword/presentation/widgets/restore_password_form.dart index 788a8fc..ce5c0b6 100644 --- a/lib/features/forgotPassword/presentation/widgets/restore_password_form.dart +++ b/lib/features/forgotPassword/presentation/widgets/restore_password_form.dart @@ -4,6 +4,7 @@ import 'package:gap/gap.dart'; import 'package:tanami_app/core/styles/app_text.dart'; import 'package:tanami_app/features/forgotPassword/presentation/bloc/restore_password_bloc.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/bloc/password_field/password_visibility_bloc.dart'; import '../../../../shared/components/form_label_textfield.dart'; @@ -12,6 +13,7 @@ class RestorePasswordForm extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); final restorePasswordBloc = context.read(); // Reset fields when the screen is built @@ -32,7 +34,7 @@ class RestorePasswordForm extends StatelessWidget { BlocProvider( create: (_) => PasswordVisibilityBloc(), child: FormLabelTextField( - hintText: AppText.enterPassword, + hintText: localizations.translate(AppText.enterPassword), title: "New Password", type: AppText.password.toLowerCase(), textEditingController: restorePasswordBloc.passwordTextField, @@ -42,8 +44,8 @@ class RestorePasswordForm extends StatelessWidget { BlocProvider( create: (_) => PasswordVisibilityBloc(), child: FormLabelTextField( - hintText: AppText.repeatPasswordText, - title: AppText.repeatPasswordText, + hintText: localizations.translate(AppText.repeatPasswordText), + title: localizations.translate(AppText.repeatPasswordText), type: AppText.password.toLowerCase(), textEditingController: restorePasswordBloc.repeatPasswordTextField, diff --git a/lib/features/forgotPassword/presentation/widgets/restore_password_phone_verification_bottom_section.dart b/lib/features/forgotPassword/presentation/widgets/restore_password_phone_verification_bottom_section.dart index 4b18b50..4fe8021 100644 --- a/lib/features/forgotPassword/presentation/widgets/restore_password_phone_verification_bottom_section.dart +++ b/lib/features/forgotPassword/presentation/widgets/restore_password_phone_verification_bottom_section.dart @@ -9,6 +9,7 @@ import '../../../../core/routes/route_name.dart'; import '../../../../core/routes/routes.dart'; import '../../../../core/styles/app_color.dart'; import '../../../../core/styles/app_text.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/button_widget.dart'; import '../../../../shared/components/text_widget.dart'; import '../../../countrySelection/presentation/bloc/choose_country_bloc.dart'; @@ -23,6 +24,7 @@ class RestorePasswordPhoneVerificationBottomSection extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); final radioBloc = context.read(); return Column( children: [ @@ -78,7 +80,7 @@ class RestorePasswordPhoneVerificationBottomSection extends StatelessWidget { ) : null; }, - text: AppText.nextText, + text: localizations.translate(AppText.nextText), clr: isButtonEnabled ? AppColor.primaryColor2 : AppColor.inactiveBtnColor, @@ -91,7 +93,8 @@ class RestorePasswordPhoneVerificationBottomSection extends StatelessWidget { function: () { goRouter.pop(); }, - text: TextWidget().text14W700(AppText.backText, + text: TextWidget().text14W700( + localizations.translate(AppText.backText), clr: AppColor.textLabelColor, textDecoration: TextDecoration.underline)), ], diff --git a/lib/features/forgotPassword/presentation/widgets/restore_password_phone_verification_form.dart b/lib/features/forgotPassword/presentation/widgets/restore_password_phone_verification_form.dart index a8c37df..11c6963 100644 --- a/lib/features/forgotPassword/presentation/widgets/restore_password_phone_verification_form.dart +++ b/lib/features/forgotPassword/presentation/widgets/restore_password_phone_verification_form.dart @@ -4,6 +4,7 @@ import 'package:gap/gap.dart'; import 'package:tanami_app/core/styles/app_text.dart'; import 'package:tanami_app/core/utils/constant/country_flag_data.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/form_label_textfield.dart'; import '../../../countrySelection/presentation/bloc/choose_country_bloc.dart'; import '../../../countrySelection/presentation/bloc/choose_country_state.dart'; @@ -14,6 +15,7 @@ class RestorePasswordPhoneVerificationForm extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); final restorePasswordBloc = context.read(); @@ -54,8 +56,8 @@ class RestorePasswordPhoneVerificationForm extends StatelessWidget { width: 20, height: 20, ), - hintText: AppText.chooseCountry, - title: AppText.countryOfResidence, + hintText: localizations.translate(AppText.chooseCountry), + title: localizations.translate(AppText.countryOfResidence), type: "country selection", textEditingController: restorePasswordBloc.countrySelectionTextField, @@ -70,7 +72,7 @@ class RestorePasswordPhoneVerificationForm extends StatelessWidget { height: 20, ), hintText: "+0 (000) 000 00 00", - title: AppText.phoneNumber, + title: localizations.translate(AppText.phoneNumber), type: "phone number", textEditingController: restorePasswordBloc.phoneNumberTextField, diff --git a/lib/features/forgotPassword/presentation/widgets/restore_password_phone_verification_top_section.dart b/lib/features/forgotPassword/presentation/widgets/restore_password_phone_verification_top_section.dart index c49e16e..4b1a47e 100644 --- a/lib/features/forgotPassword/presentation/widgets/restore_password_phone_verification_top_section.dart +++ b/lib/features/forgotPassword/presentation/widgets/restore_password_phone_verification_top_section.dart @@ -6,6 +6,8 @@ import 'package:tanami_app/core/styles/app_images.dart'; import 'package:tanami_app/core/styles/app_text.dart'; import 'package:tanami_app/shared/components/text_widget.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; + class RestorePasswordPhoneVerificationTopSection extends StatelessWidget { const RestorePasswordPhoneVerificationTopSection({ super.key, @@ -13,6 +15,7 @@ class RestorePasswordPhoneVerificationTopSection extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ @@ -24,14 +27,15 @@ class RestorePasswordPhoneVerificationTopSection extends StatelessWidget { ), const Gap(60), TextWidget().text20W700( - AppText.restorePasswordText, + localizations.translate(AppText.restorePasswordText), clr: AppColor.charcoalColor, ), const Gap(10), Padding( padding: const EdgeInsets.symmetric(horizontal: 75), child: TextWidget().text14W500( - AppText.toRestorePasswordPleaseEnterPhoneNumber, + localizations + .translate(AppText.toRestorePasswordPleaseEnterPhoneNumber), clr: AppColor.smokeGrayColor, ), ), diff --git a/lib/features/forgotPassword/presentation/widgets/restore_password_top_section.dart b/lib/features/forgotPassword/presentation/widgets/restore_password_top_section.dart index 5c15399..9ac52d2 100644 --- a/lib/features/forgotPassword/presentation/widgets/restore_password_top_section.dart +++ b/lib/features/forgotPassword/presentation/widgets/restore_password_top_section.dart @@ -6,6 +6,8 @@ import 'package:tanami_app/core/styles/app_images.dart'; import 'package:tanami_app/core/styles/app_text.dart'; import 'package:tanami_app/shared/components/text_widget.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; + class RestorePasswordTopSection extends StatelessWidget { const RestorePasswordTopSection({ super.key, @@ -13,6 +15,7 @@ class RestorePasswordTopSection extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ @@ -24,14 +27,14 @@ class RestorePasswordTopSection extends StatelessWidget { ), const Gap(60), TextWidget().text20W700( - AppText.restorePasswordText, + localizations.translate(AppText.restorePasswordText), clr: AppColor.charcoalColor, ), const Gap(10), Padding( padding: const EdgeInsets.symmetric(horizontal: 75), child: TextWidget().text14W500( - AppText.createNewPasswordText, + localizations.translate(AppText.createNewPasswordText), clr: AppColor.smokeGrayColor, ), ), diff --git a/lib/features/languageChange/presentation/pages/language_change_layout.dart b/lib/features/languageChange/presentation/pages/language_change_layout.dart index 7b9a2b9..fa0975f 100644 --- a/lib/features/languageChange/presentation/pages/language_change_layout.dart +++ b/lib/features/languageChange/presentation/pages/language_change_layout.dart @@ -7,6 +7,7 @@ import 'package:tanami_app/core/styles/app_text.dart'; import 'package:tanami_app/shared/components/appbar_widget.dart'; import 'package:tanami_app/shared/components/text_widget.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../widgets/bottom_section.dart'; import '../widgets/language_change_list.dart'; @@ -15,12 +16,13 @@ class LanguageChangeLayout extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return Scaffold( backgroundColor: AppColor.plainWhite, - bottomNavigationBar: bottomSection(), - appBar: const AppBarWidget( + bottomNavigationBar: bottomSection(context), + appBar: AppBarWidget( height: 75, - titleTxt: AppText.languageText, + titleTxt: localizations.translate(AppText.languageText), ), body: Padding( padding: const EdgeInsets.all(16.0), @@ -40,7 +42,8 @@ class LanguageChangeLayout extends StatelessWidget { SizedBox( width: 0.8.sw, child: TextWidget().text12W500( - AppText.changingTheLanguageWillReloadApp, + localizations + .translate(AppText.changingTheLanguageWillReloadApp), clr: AppColor.languageTextColor, ), ) diff --git a/lib/features/languageChange/presentation/widgets/bottom_section.dart b/lib/features/languageChange/presentation/widgets/bottom_section.dart index 8d0ebce..2bb7ea3 100644 --- a/lib/features/languageChange/presentation/widgets/bottom_section.dart +++ b/lib/features/languageChange/presentation/widgets/bottom_section.dart @@ -1,14 +1,19 @@ import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:gap/gap.dart'; import '../../../../core/routes/routes.dart'; import '../../../../core/styles/app_color.dart'; import '../../../../core/styles/app_text.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; +import '../../../../shared/components/bloc/language/lng_bloc.dart'; +import '../../../../shared/components/bloc/language/lng_event.dart'; import '../../../../shared/components/button_widget.dart'; import '../../../../shared/components/text_widget.dart'; -Widget bottomSection() { +Widget bottomSection(BuildContext context) { + var localizations = AppLocalizations.of(context); return Column( mainAxisSize: MainAxisSize.min, children: [ @@ -22,9 +27,15 @@ Widget bottomSection() { child: ButtonWidget().elevatedBtn( txtClr: AppColor.plainWhite, function: () { + var newLocale = + context.read().state.locale.languageCode == + 'en' + ? const Locale('ar') + : const Locale('en'); + context.read().add(ChangeLanguage(newLocale)); goRouter.pop(); }, - text: AppText.submitText, + text: localizations.translate(AppText.submitText), clr: AppColor.primaryColor2, ), ), @@ -32,7 +43,8 @@ Widget bottomSection() { function: () { goRouter.pop(); }, - text: TextWidget().text14W700(AppText.backText, + text: TextWidget().text14W700( + localizations.translate(AppText.backText), clr: AppColor.textLabelColor, textDecoration: TextDecoration.underline)), const Gap(20), diff --git a/lib/features/login/presentation/widgets/bottom_section.dart b/lib/features/login/presentation/widgets/bottom_section.dart index f1c3919..5e7726c 100644 --- a/lib/features/login/presentation/widgets/bottom_section.dart +++ b/lib/features/login/presentation/widgets/bottom_section.dart @@ -10,6 +10,7 @@ import '../../../../core/routes/route_name.dart'; import '../../../../core/routes/routes.dart'; import '../../../../core/styles/app_color.dart'; import '../../../../core/styles/app_text.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/button_widget.dart'; import '../../../../shared/components/text_widget.dart'; import '../../../countrySelection/presentation/bloc/choose_country_bloc.dart'; @@ -26,6 +27,7 @@ class BottomSection extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); SecureStorageService secureStorageService = SecureStorageService(); final radioBloc = context.read(); return Column( @@ -38,7 +40,8 @@ class BottomSection extends StatelessWidget { goRouter .pushNamed(RouteName.forgotPasswordPhoneVerificationScreen); }, - text: TextWidget().text15W400(AppText.forgotPassword, + text: TextWidget().text15W400( + localizations.translate(AppText.forgotPassword), clr: AppColor.forgotPassButtonColor, textDecoration: TextDecoration.underline)), ), @@ -98,7 +101,7 @@ class BottomSection extends StatelessWidget { ) : null; }, - text: AppText.loginText, + text: localizations.translate(AppText.loginText), clr: isButtonEnabled ? AppColor.primaryColor2 : AppColor.inactiveBtnColor, @@ -120,8 +123,8 @@ class BottomSection extends StatelessWidget { clr: AppColor.plainWhite, borderClr: AppColor.txtBorderColor, text: fromScreen == "forgot-pin" - ? AppText.backText - : AppText.signUpText, + ? localizations.translate(AppText.backText) + : localizations.translate(AppText.signUpText), ), const Gap(15), ], diff --git a/lib/features/login/presentation/widgets/login_form.dart b/lib/features/login/presentation/widgets/login_form.dart index f888dae..0cbbcb3 100644 --- a/lib/features/login/presentation/widgets/login_form.dart +++ b/lib/features/login/presentation/widgets/login_form.dart @@ -4,6 +4,7 @@ import 'package:gap/gap.dart'; import 'package:tanami_app/core/styles/app_text.dart'; import 'package:tanami_app/core/utils/constant/country_flag_data.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/bloc/password_field/password_visibility_bloc.dart'; import '../../../../shared/components/form_label_textfield.dart'; import '../../../countrySelection/presentation/bloc/choose_country_bloc.dart'; @@ -15,6 +16,7 @@ class LoginForm extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); final loginBloc = context.read(); // Reset fields when the screen is built @@ -53,8 +55,8 @@ class LoginForm extends StatelessWidget { width: 20, height: 20, ), - hintText: AppText.chooseCountry, - title: AppText.countryOfResidence, + hintText: localizations.translate(AppText.chooseCountry), + title: localizations.translate(AppText.countryOfResidence), type: "country selection", textEditingController: loginBloc.countrySelectionTextField, ), @@ -68,7 +70,7 @@ class LoginForm extends StatelessWidget { height: 20, ), hintText: "+0 (000) 000 00 00", - title: AppText.phoneNumber, + title: localizations.translate(AppText.phoneNumber), type: "phone number", textEditingController: loginBloc.phoneNumberTextField, ), @@ -76,8 +78,8 @@ class LoginForm extends StatelessWidget { BlocProvider( create: (_) => PasswordVisibilityBloc(), child: FormLabelTextField( - hintText: AppText.enterPassword, - title: AppText.password, + hintText: localizations.translate(AppText.enterPassword), + title: localizations.translate(AppText.password), type: "password", textEditingController: loginBloc.passwordTextField, ), diff --git a/lib/features/login/presentation/widgets/top_section.dart b/lib/features/login/presentation/widgets/top_section.dart index 02e1cde..8fa7a48 100644 --- a/lib/features/login/presentation/widgets/top_section.dart +++ b/lib/features/login/presentation/widgets/top_section.dart @@ -6,6 +6,8 @@ import 'package:tanami_app/core/styles/app_images.dart'; import 'package:tanami_app/core/styles/app_text.dart'; import 'package:tanami_app/shared/components/text_widget.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; + class TopSection extends StatelessWidget { final String fromScreen; const TopSection({ @@ -15,6 +17,7 @@ class TopSection extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ @@ -26,7 +29,7 @@ class TopSection extends StatelessWidget { ), const Gap(60), TextWidget().text20W700( - AppText.welcomeText, + localizations.translate(AppText.welcomeText), clr: AppColor.charcoalColor, ), const Gap(10), @@ -34,8 +37,9 @@ class TopSection extends StatelessWidget { padding: const EdgeInsets.symmetric(horizontal: 75), child: TextWidget().text14W500( fromScreen == "forgot-pin" - ? AppText.toGetYourAccountPleaseSetYourInfo - : AppText.pleaseEnterLoginDetails, + ? localizations + .translate(AppText.toGetYourAccountPleaseSetYourInfo) + : localizations.translate(AppText.pleaseEnterLoginDetails), clr: AppColor.smokeGrayColor, ), ), diff --git a/lib/features/otpVerification/presentation/widgets/otp_fill_section.dart b/lib/features/otpVerification/presentation/widgets/otp_fill_section.dart index 6220d39..02c4e43 100644 --- a/lib/features/otpVerification/presentation/widgets/otp_fill_section.dart +++ b/lib/features/otpVerification/presentation/widgets/otp_fill_section.dart @@ -9,6 +9,7 @@ import 'package:tanami_app/core/styles/app_text.dart'; import 'package:tanami_app/shared/components/loader.dart'; import 'package:tanami_app/shared/components/toast_message.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../bloc/otp_bloc.dart'; import '../bloc/otp_event.dart'; import '../bloc/otp_state.dart'; @@ -22,6 +23,7 @@ class OtpFillSection extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return BlocConsumer( listener: (context, state) { if (state is OtpSubmitting) { @@ -32,7 +34,7 @@ class OtpFillSection extends StatelessWidget { successToastMessage( context, - AppText.otpVerifiedSucessfully, + localizations.translate(AppText.otpVerifiedSucessfully), ); if (fromScreen == "forgot-password") { @@ -48,8 +50,8 @@ class OtpFillSection extends StatelessWidget { } } else if (state is OtpSubmissionFailure) { goRouter.pop(); - errorToastMessage( - context, '${AppText.otpVerifiedFailed} ${state.error}'); + errorToastMessage(context, + '${localizations.translate(AppText.otpVerifiedFailed)} ${state.error}'); } }, builder: (context, state) { diff --git a/lib/features/otpVerification/presentation/widgets/otp_top_section.dart b/lib/features/otpVerification/presentation/widgets/otp_top_section.dart index b3f6ad7..4cbe3da 100644 --- a/lib/features/otpVerification/presentation/widgets/otp_top_section.dart +++ b/lib/features/otpVerification/presentation/widgets/otp_top_section.dart @@ -5,6 +5,7 @@ import 'package:gap/gap.dart'; import '../../../../core/styles/app_color.dart'; import '../../../../core/styles/app_images.dart'; import '../../../../core/styles/app_text.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/text_widget.dart'; class OtpTopSection extends StatelessWidget { @@ -12,6 +13,7 @@ class OtpTopSection extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ @@ -23,14 +25,14 @@ class OtpTopSection extends StatelessWidget { ), const Gap(125), TextWidget().text20W700( - AppText.checkYourMessages, + localizations.translate(AppText.checkYourMessages), clr: AppColor.charcoalColor, ), const Gap(25), Padding( padding: const EdgeInsets.symmetric(horizontal: 35), child: TextWidget().text14W500( - AppText.referToSameOtpMessage, + localizations.translate(AppText.referToSameOtpMessage), clr: AppColor.smokeGrayColor, ), ), diff --git a/lib/features/otpVerification/presentation/widgets/resend_otp_section.dart b/lib/features/otpVerification/presentation/widgets/resend_otp_section.dart index 56e9dcf..4a50174 100644 --- a/lib/features/otpVerification/presentation/widgets/resend_otp_section.dart +++ b/lib/features/otpVerification/presentation/widgets/resend_otp_section.dart @@ -5,6 +5,7 @@ import 'package:tanami_app/core/styles/app_text.dart'; import 'package:tanami_app/shared/components/text_widget.dart'; import 'package:tanami_app/shared/components/toast_message.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../bloc/timer/timer_bloc.dart'; import '../bloc/timer/timer_state.dart'; @@ -13,6 +14,7 @@ class ResendOtpSection extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return BlocBuilder( builder: (context, state) { return Padding( @@ -29,7 +31,7 @@ class ResendOtpSection extends StatelessWidget { successToastMessage(context, "OTP Resend Sucessfully !"); }, child: TextWidget().text14W500( - AppText.resendSms, + localizations.translate(AppText.resendSms), clr: AppColor.plainBlack, textDecoration: TextDecoration.underline, ), diff --git a/lib/features/register/presentation/widgets/register_bottom_section.dart b/lib/features/register/presentation/widgets/register_bottom_section.dart index 4584c6c..c29da35 100644 --- a/lib/features/register/presentation/widgets/register_bottom_section.dart +++ b/lib/features/register/presentation/widgets/register_bottom_section.dart @@ -11,6 +11,7 @@ import '../../../../core/routes/route_name.dart'; import '../../../../core/routes/routes.dart'; import '../../../../core/styles/app_color.dart'; import '../../../../core/styles/app_text.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/button_widget.dart'; import '../../../countrySelection/presentation/bloc/choose_country_bloc.dart'; import '../bloc/register_bloc.dart'; @@ -22,6 +23,7 @@ class RegisterBottomSection extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); final radioBloc = context.read(); return Column( children: [ @@ -79,7 +81,7 @@ class RegisterBottomSection extends StatelessWidget { ) : null; }, - text: AppText.nextText, + text: localizations.translate(AppText.nextText), clr: isButtonEnabled ? AppColor.primaryColor2 : AppColor.inactiveBtnColor, @@ -95,7 +97,7 @@ class RegisterBottomSection extends StatelessWidget { radioBloc.resetSelection(); goRouter.pop(); }, - text: AppText.backText, + text: localizations.translate(AppText.backText), ) ], ); diff --git a/lib/features/register/presentation/widgets/register_form.dart b/lib/features/register/presentation/widgets/register_form.dart index e5a9fb3..a29c542 100644 --- a/lib/features/register/presentation/widgets/register_form.dart +++ b/lib/features/register/presentation/widgets/register_form.dart @@ -4,6 +4,7 @@ import 'package:gap/gap.dart'; import 'package:tanami_app/core/styles/app_text.dart'; import 'package:tanami_app/core/utils/constant/country_flag_data.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/form_label_textfield.dart'; import '../../../countrySelection/presentation/bloc/choose_country_bloc.dart'; import '../../../countrySelection/presentation/bloc/choose_country_state.dart'; @@ -14,6 +15,7 @@ class RegisterForm extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); final loginBloc = context.read(); int selectedCountry = -1; return BlocConsumer(listener: (context, state) { @@ -49,8 +51,8 @@ class RegisterForm extends StatelessWidget { width: 20, height: 20, ), - hintText: AppText.chooseCountry, - title: AppText.countryOfResidence, + hintText: localizations.translate(AppText.chooseCountry), + title: localizations.translate(AppText.countryOfResidence), type: "country selection", textEditingController: loginBloc.countrySelectionTextField, ), @@ -64,7 +66,7 @@ class RegisterForm extends StatelessWidget { height: 20, ), hintText: "+0 (000) 000 00 00", - title: AppText.phoneNumber, + title: localizations.translate(AppText.phoneNumber), type: "phone number", textEditingController: loginBloc.phoneNumberTextField, ), diff --git a/lib/features/register/presentation/widgets/register_step_bottom_section.dart b/lib/features/register/presentation/widgets/register_step_bottom_section.dart index 77d20ee..9c93c8f 100644 --- a/lib/features/register/presentation/widgets/register_step_bottom_section.dart +++ b/lib/features/register/presentation/widgets/register_step_bottom_section.dart @@ -7,12 +7,14 @@ import 'package:tanami_app/core/styles/app_color.dart'; import 'package:tanami_app/shared/components/button_widget.dart'; import '../../../../core/styles/app_text.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; class RegisterStepBottomSection extends StatelessWidget { const RegisterStepBottomSection({super.key}); @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return Padding( padding: const EdgeInsets.symmetric(vertical: 40.0), child: Column( @@ -29,7 +31,7 @@ class RegisterStepBottomSection extends StatelessWidget { RouteName.registerScreen, ); }, - text: AppText.getStarted, + text: localizations.translate(AppText.getStarted), txtClr: AppColor.plainWhite, clr: AppColor.primaryColor2, ), @@ -43,7 +45,7 @@ class RegisterStepBottomSection extends StatelessWidget { "fromScreen": "registerStep", }); }, - text: AppText.loginText, + text: localizations.translate(AppText.loginText), ) ], ), diff --git a/lib/features/register/presentation/widgets/register_step_top_section.dart b/lib/features/register/presentation/widgets/register_step_top_section.dart index cc4bc04..51c884d 100644 --- a/lib/features/register/presentation/widgets/register_step_top_section.dart +++ b/lib/features/register/presentation/widgets/register_step_top_section.dart @@ -6,11 +6,14 @@ import 'package:tanami_app/core/styles/app_images.dart'; import 'package:tanami_app/core/styles/app_text.dart'; import 'package:tanami_app/shared/components/text_widget.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; + class RegisterStepTopSection extends StatelessWidget { const RegisterStepTopSection({super.key}); @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ @@ -22,14 +25,14 @@ class RegisterStepTopSection extends StatelessWidget { ), const Gap(30), TextWidget().text20W700( - AppText.getStartedToday, + localizations.translate(AppText.getStartedToday), clr: AppColor.charcoalColor, ), const Gap(10), Padding( padding: const EdgeInsets.symmetric(horizontal: 75), child: TextWidget().text14W500( - AppText.setupYourTanamiAccountToBegin, + localizations.translate(AppText.setupYourTanamiAccountToBegin), clr: AppColor.smokeGrayColor, ), ), diff --git a/lib/features/register/presentation/widgets/register_top_section.dart b/lib/features/register/presentation/widgets/register_top_section.dart index c82dfd5..bf8e949 100644 --- a/lib/features/register/presentation/widgets/register_top_section.dart +++ b/lib/features/register/presentation/widgets/register_top_section.dart @@ -6,11 +6,14 @@ import 'package:tanami_app/core/styles/app_images.dart'; import 'package:tanami_app/core/styles/app_text.dart'; import 'package:tanami_app/shared/components/text_widget.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; + class RegisterTopSection extends StatelessWidget { const RegisterTopSection({super.key}); @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ @@ -22,14 +25,14 @@ class RegisterTopSection extends StatelessWidget { ), const Gap(60), TextWidget().text20W700( - AppText.welcome, + localizations.translate(AppText.welcome), clr: AppColor.charcoalColor, ), const Gap(10), Padding( padding: const EdgeInsets.symmetric(horizontal: 75), child: TextWidget().text14W500( - AppText.selectYourCountryOfResidence, + localizations.translate(AppText.selectYourCountryOfResidence), clr: AppColor.smokeGrayColor, ), ), diff --git a/lib/features/register/presentation/widgets/register_user_bottom_section.dart b/lib/features/register/presentation/widgets/register_user_bottom_section.dart index b9e776a..233fe3f 100644 --- a/lib/features/register/presentation/widgets/register_user_bottom_section.dart +++ b/lib/features/register/presentation/widgets/register_user_bottom_section.dart @@ -16,6 +16,7 @@ import 'package:tanami_app/shared/components/toast_message.dart'; import '../../../../core/routes/routes.dart'; import '../../../../core/styles/app_color.dart'; import '../../../../core/styles/app_text.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/bloc/checkbox/checkbox_bloc.dart'; import '../../../../shared/components/bloc/checkbox/checkbox_state.dart'; import '../../../../shared/components/button_widget.dart'; @@ -29,6 +30,7 @@ class RegisterUserBottomSection extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return Column( children: [ const Gap(40), @@ -39,7 +41,7 @@ class RegisterUserBottomSection extends StatelessWidget { Expanded( child: RichText( text: TextSpan( - text: AppText.iAgreeToThe, + text: localizations.translate(AppText.iAgreeToThe), style: GoogleFonts.dmSans( color: AppColor.charcoalColor, fontSize: 14, @@ -53,20 +55,21 @@ class RegisterUserBottomSection extends StatelessWidget { fontWeight: FontWeight.w500, decoration: TextDecoration.underline, ), - text: AppText.termsAndCondition, + text: + localizations.translate(AppText.termsAndCondition), recognizer: TapGestureRecognizer() ..onTap = () => log('Tap Here onTap'), ), - const TextSpan( - text: AppText.andThe, - style: TextStyle( + TextSpan( + text: localizations.translate(AppText.andThe), + style: const TextStyle( color: AppColor.charcoalColor, fontSize: 14, fontWeight: FontWeight.w500, ), ), TextSpan( - text: AppText.privacyPolicy, + text: localizations.translate(AppText.privacyPolicy), recognizer: TapGestureRecognizer() ..onTap = () => log('Tap Here onTap'), style: const TextStyle( @@ -152,7 +155,7 @@ class RegisterUserBottomSection extends StatelessWidget { ) : null; }, - text: AppText.nextText, + text: localizations.translate(AppText.nextText), clr: isButtonEnabled ? AppColor.primaryColor2 : AppColor.inactiveBtnColor, @@ -166,7 +169,7 @@ class RegisterUserBottomSection extends StatelessWidget { function: () { goRouter.pop(); }, - text: AppText.backText, + text: localizations.translate(AppText.backText), borderClr: AppColor.txtBorderColor, ), ], diff --git a/lib/features/register/presentation/widgets/register_user_form.dart b/lib/features/register/presentation/widgets/register_user_form.dart index d4e077c..98a4885 100644 --- a/lib/features/register/presentation/widgets/register_user_form.dart +++ b/lib/features/register/presentation/widgets/register_user_form.dart @@ -3,6 +3,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:gap/gap.dart'; import 'package:tanami_app/core/styles/app_text.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/bloc/password_field/password_visibility_bloc.dart'; import '../../../../shared/components/form_label_textfield.dart'; import '../bloc/register_user_bloc.dart'; @@ -12,6 +13,7 @@ class RegisterUserForm extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); final registerUserBloc = context.read(); return Form( @@ -27,22 +29,22 @@ class RegisterUserForm extends StatelessWidget { children: [ const Gap(50), FormLabelTextField( - hintText: AppText.enterFirstName, - title: AppText.firstNameText, - type: AppText.firstNameText, + hintText: localizations.translate(AppText.enterFirstName), + title: localizations.translate(AppText.firstNameText), + type: localizations.translate(AppText.firstNameText), textEditingController: registerUserBloc.firstNameTextField, ), const Gap(12), FormLabelTextField( - hintText: AppText.enterLastName, - title: AppText.lastNameText, + hintText: localizations.translate(AppText.enterLastName), + title: localizations.translate(AppText.lastNameText), type: AppText.lastNameText, textEditingController: registerUserBloc.lastNameTextField, ), const Gap(12), FormLabelTextField( - hintText: AppText.enterEmail, - title: AppText.emailText, + hintText: localizations.translate(AppText.enterEmail), + title: localizations.translate(AppText.emailText), type: AppText.emailText, textEditingController: registerUserBloc.emailTextField, ), @@ -50,8 +52,8 @@ class RegisterUserForm extends StatelessWidget { BlocProvider( create: (_) => PasswordVisibilityBloc(), child: FormLabelTextField( - hintText: AppText.enterPassword, - title: AppText.password, + hintText: localizations.translate(AppText.enterPassword), + title: localizations.translate(AppText.password), type: AppText.password.toLowerCase(), textEditingController: registerUserBloc.passwordTextField, ), @@ -60,8 +62,8 @@ class RegisterUserForm extends StatelessWidget { BlocProvider( create: (_) => PasswordVisibilityBloc(), child: FormLabelTextField( - hintText: AppText.repeatPasswordText, - title: AppText.repeatPasswordText, + hintText: localizations.translate(AppText.repeatPasswordText), + title: localizations.translate(AppText.repeatPasswordText), type: AppText.password.toLowerCase(), textEditingController: registerUserBloc.repeatPasswordTextField, diff --git a/lib/features/register/presentation/widgets/register_user_top_section.dart b/lib/features/register/presentation/widgets/register_user_top_section.dart index b90091c..35f9804 100644 --- a/lib/features/register/presentation/widgets/register_user_top_section.dart +++ b/lib/features/register/presentation/widgets/register_user_top_section.dart @@ -6,11 +6,14 @@ import 'package:tanami_app/core/styles/app_images.dart'; import 'package:tanami_app/core/styles/app_text.dart'; import 'package:tanami_app/shared/components/text_widget.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; + class RegisterUserTopSection extends StatelessWidget { const RegisterUserTopSection({super.key}); @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ @@ -24,7 +27,7 @@ class RegisterUserTopSection extends StatelessWidget { Padding( padding: const EdgeInsets.symmetric(horizontal: 75), child: TextWidget().text14W500( - AppText.enterNameEmailUniquePassword, + localizations.translate(AppText.enterNameEmailUniquePassword), clr: AppColor.smokeGrayColor, ), ), diff --git a/lib/features/securePin/presentation/pages/confirm_pin_screen.dart b/lib/features/securePin/presentation/pages/confirm_pin_screen.dart index c3edded..2d0386f 100644 --- a/lib/features/securePin/presentation/pages/confirm_pin_screen.dart +++ b/lib/features/securePin/presentation/pages/confirm_pin_screen.dart @@ -3,6 +3,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import '../../../../core/styles/app_color.dart'; import '../../../../core/styles/app_text.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../core/utils/secure/secure_storage_service.dart'; import '../../../../shared/components/appbar_widget.dart'; import '../bloc/pin_bloc.dart'; @@ -13,12 +14,13 @@ class ConfirmPinScreen extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); final secureStorageService = SecureStorageService(); return Scaffold( backgroundColor: AppColor.plainWhite, - appBar: const AppBarWidget( + appBar: AppBarWidget( height: 75, - titleTxt: AppText.createPinCode, + titleTxt: localizations.translate(AppText.createPinCode), showLeading: true, ), resizeToAvoidBottomInset: true, diff --git a/lib/features/securePin/presentation/pages/pin_screen.dart b/lib/features/securePin/presentation/pages/pin_screen.dart index 725fc75..d985269 100644 --- a/lib/features/securePin/presentation/pages/pin_screen.dart +++ b/lib/features/securePin/presentation/pages/pin_screen.dart @@ -3,6 +3,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import '../../../../core/styles/app_color.dart'; import '../../../../core/styles/app_text.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../core/utils/secure/secure_storage_service.dart'; import '../../../../shared/components/appbar_widget.dart'; import '../../../../shared/components/exit_app_dialog.dart'; @@ -15,6 +16,7 @@ class PinScreen extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); final secureStorageService = SecureStorageService(); return WillPopScope( onWillPop: () async { @@ -31,8 +33,8 @@ class PinScreen extends StatelessWidget { ? AppBarWidget( height: 75, titleTxt: fromScreen == "reset-pin" - ? AppText.changePinCode - : AppText.createPinCode, + ? localizations.translate(AppText.changePinCode) + : localizations.translate(AppText.createPinCode), showLeading: fromScreen == "reset-pin" ? true : false, ) : null, diff --git a/lib/features/securePin/presentation/widgets/confirm_pin_top_section.dart b/lib/features/securePin/presentation/widgets/confirm_pin_top_section.dart index 09eb8f7..aca3739 100644 --- a/lib/features/securePin/presentation/widgets/confirm_pin_top_section.dart +++ b/lib/features/securePin/presentation/widgets/confirm_pin_top_section.dart @@ -6,12 +6,14 @@ import 'package:tanami_app/shared/components/text_widget.dart'; import '../../../../core/styles/app_images.dart'; import '../../../../core/styles/app_text.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; class ConfirmPinTopSection extends StatelessWidget { const ConfirmPinTopSection({super.key}); @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return Column( children: [ const Gap(70), @@ -22,7 +24,7 @@ class ConfirmPinTopSection extends StatelessWidget { ), const Gap(40), TextWidget().text14W500( - AppText.confirmPinCode, + localizations.translate(AppText.confirmPinCode), clr: AppColor.textLabelColor, ) ], diff --git a/lib/features/securePin/presentation/widgets/forgot_pin_dialog.dart b/lib/features/securePin/presentation/widgets/forgot_pin_dialog.dart index b8d5a37..7e555cc 100644 --- a/lib/features/securePin/presentation/widgets/forgot_pin_dialog.dart +++ b/lib/features/securePin/presentation/widgets/forgot_pin_dialog.dart @@ -8,7 +8,10 @@ import 'package:tanami_app/core/styles/app_text.dart'; import 'package:tanami_app/shared/components/button_widget.dart'; import 'package:tanami_app/shared/components/text_widget.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; + void forgotPinDialog(BuildContext context) { + var localizations = AppLocalizations.of(context); showDialog( context: context, builder: (BuildContext context) { @@ -26,7 +29,8 @@ void forgotPinDialog(BuildContext context) { child: Column( mainAxisSize: MainAxisSize.min, children: [ - TextWidget().text17W700(AppText.notificationText, + TextWidget().text17W700( + localizations.translate(AppText.notificationText), clr: AppColor.plainBlack), const Gap(25), Padding( @@ -34,7 +38,8 @@ void forgotPinDialog(BuildContext context) { horizontal: 25, ), child: TextWidget().text15W500( - AppText.toRestorePinYouWillBeLoggedOut, + localizations + .translate(AppText.toRestorePinYouWillBeLoggedOut), clr: AppColor.hintTextColor, ), ), @@ -44,7 +49,7 @@ void forgotPinDialog(BuildContext context) { height: 55.h, child: ButtonWidget().elevatedBtn( txtClr: AppColor.plainWhite, - text: AppText.allowText, + text: localizations.translate(AppText.allowText), clr: AppColor.primaryColor2, function: () { goRouter.pushNamed(RouteName.loginScreen, pathParameters: { @@ -57,7 +62,7 @@ void forgotPinDialog(BuildContext context) { const Gap(10), ButtonWidget().textBtn( text: TextWidget().text14W700( - AppText.declineText, + localizations.translate(AppText.declineText), textDecoration: TextDecoration.underline, clr: AppColor.textLabelColor, ), diff --git a/lib/features/securePin/presentation/widgets/pin_keypad_section.dart b/lib/features/securePin/presentation/widgets/pin_keypad_section.dart index 692e5f8..df792de 100644 --- a/lib/features/securePin/presentation/widgets/pin_keypad_section.dart +++ b/lib/features/securePin/presentation/widgets/pin_keypad_section.dart @@ -11,6 +11,7 @@ import 'package:tanami_app/features/securePin/presentation/widgets/forgot_pin_di import 'package:tanami_app/shared/components/text_widget.dart'; import 'package:tanami_app/shared/components/toast_message.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../bloc/pin_bloc.dart'; class PinKey extends StatelessWidget { @@ -22,6 +23,7 @@ class PinKey extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return Column( crossAxisAlignment: CrossAxisAlignment.end, children: [ @@ -32,11 +34,13 @@ class PinKey extends StatelessWidget { state.error.isEmpty && !state.verifiedOnce) { if (fromScreen == "login" || fromScreen == "LoginedInUser") { - successToastMessage(context, AppText.pinVerifiedSucess); + successToastMessage(context, + localizations.translate(AppText.pinVerifiedSucess)); goRouter.pushNamed(RouteName.mainScreen); } else if (fromScreen == "reset-pin") { log("Running this"); - successToastMessage(context, AppText.pinUpdatedSucess); + successToastMessage( + context, localizations.translate(AppText.pinUpdatedSucess)); goRouter.pop(); } else { context.read().add(SavePinPressed()); @@ -81,7 +85,7 @@ class PinKey extends StatelessWidget { right: 50, ), child: TextWidget().text15W500( - AppText.forgotPinCode, + localizations.translate(AppText.forgotPinCode), clr: AppColor.hintTextColor, textDecoration: TextDecoration.underline, ), diff --git a/lib/features/securePin/presentation/widgets/pin_top_section.dart b/lib/features/securePin/presentation/widgets/pin_top_section.dart index 8adceb3..24f5195 100644 --- a/lib/features/securePin/presentation/widgets/pin_top_section.dart +++ b/lib/features/securePin/presentation/widgets/pin_top_section.dart @@ -6,6 +6,7 @@ import 'package:tanami_app/core/styles/app_text.dart'; import 'package:tanami_app/shared/components/text_widget.dart'; import '../../../../core/styles/app_images.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; class PinTopSection extends StatelessWidget { final String fromScreen; @@ -16,6 +17,7 @@ class PinTopSection extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return Column( children: [ const Gap(70), @@ -33,29 +35,31 @@ class PinTopSection extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ - TextWidget().text14W500(AppText.welcomeBackText, + TextWidget().text14W500( + localizations.translate(AppText.welcomeBackText), clr: AppColor.smokeGrayColor), TextWidget() .text14W700(", Jayesh", clr: AppColor.plainBlack), ], ), TextWidget().text14W500( - AppText.userYourAppPinToLoginEnterTanami, + localizations + .translate(AppText.userYourAppPinToLoginEnterTanami), clr: AppColor.smokeGrayColor), const Gap(25), TextWidget().text14W400( - AppText.pinCode, + localizations.translate(AppText.pinCode), clr: AppColor.textLabelColor, ) ], ) : fromScreen == "forgot-pin" || fromScreen == "reset-pin" ? TextWidget().text14W500( - AppText.changePinCode, + localizations.translate(AppText.changePinCode), clr: AppColor.textLabelColor, ) : TextWidget().text14W500( - AppText.createPinCode, + localizations.translate(AppText.createPinCode), clr: AppColor.textLabelColor, ) ], diff --git a/lib/features/splash/presentation/widgets/bottom_version_widget.dart b/lib/features/splash/presentation/widgets/bottom_version_widget.dart index 6c8c9bc..e54f69f 100644 --- a/lib/features/splash/presentation/widgets/bottom_version_widget.dart +++ b/lib/features/splash/presentation/widgets/bottom_version_widget.dart @@ -2,15 +2,18 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:tanami_app/core/styles/app_text.dart'; + +import '../../../../core/utils/language/localizations_delegate.dart'; +import '../../../../shared/components/text_widget.dart'; import '../bloc/app_version/app_version_bloc.dart'; import '../bloc/app_version/app_version_state.dart'; -import '../../../../shared/components/text_widget.dart'; class BottomVersionWidget extends StatelessWidget { const BottomVersionWidget({super.key}); @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); // A BlocBuilder widget that builds the UI based on the state of the AppVersionBloc return BlocBuilder( builder: (context, state) { @@ -30,8 +33,9 @@ class BottomVersionWidget extends StatelessWidget { children: [ // Display the application version text TextWidget().text12W400( - '${AppText.splashVersionText}${state.version}'), - TextWidget().text12W400(AppText.splashCopyrightText), + '${localizations.translate(AppText.splashVersionText)}${state.version}'), + TextWidget().text12W400( + localizations.translate(AppText.splashCopyrightText)), ], )); // If the state is AppVersionError, display an error message diff --git a/lib/features/welcome/presentation/widgets/build_page_widget.dart b/lib/features/welcome/presentation/widgets/build_page_widget.dart index c2ac5a3..c2dfd78 100644 --- a/lib/features/welcome/presentation/widgets/build_page_widget.dart +++ b/lib/features/welcome/presentation/widgets/build_page_widget.dart @@ -2,10 +2,12 @@ import 'package:flutter/material.dart'; import 'package:tanami_app/core/styles/app_images.dart'; import 'package:tanami_app/core/styles/app_text.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import 'build_onboarding_page_widget.dart'; Widget buildPage( BuildContext context, int index, PageController pageController) { + var localizations = AppLocalizations.of(context); switch (index) { case 0: return buildOnboardingPage( @@ -13,8 +15,8 @@ Widget buildPage( index: index, context, imageAsset: AppImages.firstWelcome, - title: AppText.welcomeTitle1Text, - description: AppText.welcomeDescription1Text, + title: localizations.translate(AppText.welcomeTitle1Text), + description: localizations.translate(AppText.welcomeDescription1Text), ); case 1: return buildOnboardingPage( @@ -22,8 +24,8 @@ Widget buildPage( index: index, context, imageAsset: AppImages.secondWelcome, - title: AppText.welcomeTitle2Text, - description: AppText.welcomeDescription2Text, + title: localizations.translate(AppText.welcomeTitle2Text), + description: localizations.translate(AppText.welcomeDescription2Text), ); case 2: return buildOnboardingPage( @@ -31,8 +33,8 @@ Widget buildPage( index: index, context, imageAsset: AppImages.thirdWelcome, - title: AppText.welcomeTitle3Text, - description: AppText.welcomeDescription3Text, + title: localizations.translate(AppText.welcomeTitle3Text), + description: localizations.translate(AppText.welcomeDescription3Text), isLastPage: true, ); default: diff --git a/lib/features/welcome/presentation/widgets/login_signup_button.dart b/lib/features/welcome/presentation/widgets/login_signup_button.dart index 5dae6ae..0b03ee8 100644 --- a/lib/features/welcome/presentation/widgets/login_signup_button.dart +++ b/lib/features/welcome/presentation/widgets/login_signup_button.dart @@ -10,6 +10,7 @@ import 'package:tanami_app/features/countrySelection/presentation/bloc/GetCountr import 'package:tanami_app/shared/components/button_widget.dart'; import '../../../../core/styles/app_text.dart'; +import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/text_widget.dart'; class LoginSignUpButton extends StatelessWidget { @@ -17,6 +18,7 @@ class LoginSignUpButton extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return Padding( padding: const EdgeInsets.only(top: 20.0), child: Column( @@ -34,7 +36,7 @@ class LoginSignUpButton extends StatelessWidget { "fromScreentype": "welcome", }); */ }, - text: AppText.signUpText, + text: localizations.translate(AppText.signUpText), txtClr: AppColor.plainWhite, clr: AppColor.primaryColor, ), @@ -47,7 +49,7 @@ class LoginSignUpButton extends StatelessWidget { }); }, text: TextWidget().text14W700( - AppText.loginText, + localizations.translate(AppText.loginText), clr: AppColor.darkGreyColor, textDecoration: TextDecoration.underline, )) diff --git a/lib/shared/components/device_locked_dialog.dart b/lib/shared/components/device_locked_dialog.dart index 91e362d..f229164 100644 --- a/lib/shared/components/device_locked_dialog.dart +++ b/lib/shared/components/device_locked_dialog.dart @@ -8,6 +8,7 @@ import 'package:tanami_app/core/styles/app_color.dart'; import 'package:tanami_app/core/styles/app_text.dart'; import 'package:tanami_app/features/biometric/presentation/bloc/biometric_bloc.dart'; +import '../../core/utils/language/localizations_delegate.dart'; import '../../features/biometric/presentation/bloc/biometric_event.dart'; import '../../features/biometric/presentation/bloc/biometric_state.dart'; import 'text_widget.dart'; @@ -15,6 +16,7 @@ import 'text_widget.dart'; deviceLockedDialog( context, ) { + var localizations = AppLocalizations.of(context); return showDialog( barrierDismissible: false, context: context, @@ -60,7 +62,7 @@ deviceLockedDialog( child: Container( margin: const EdgeInsets.symmetric(horizontal: 30), child: TextWidget().text17W700( - AppText.tanamiAppIsLocked, + localizations.translate(AppText.tanamiAppIsLocked), clr: AppColor.textLabelColor, ), ), @@ -71,7 +73,7 @@ deviceLockedDialog( child: Container( // margin: const EdgeInsets.symmetric(horizontal: 30), child: TextWidget().text14W400( - AppText.securityMssgText, + localizations.translate(AppText.securityMssgText), clr: AppColor.textLabelColor, ), ), @@ -96,7 +98,7 @@ deviceLockedDialog( ), child: Center( child: TextWidget().text18W700( - AppText.cancelText, + localizations.translate(AppText.cancelText), clr: AppColor.primaryColor2, ), ), @@ -118,7 +120,7 @@ deviceLockedDialog( color: AppColor.primaryColor), child: Center( child: TextWidget().text18W700( - AppText.unlockText, + localizations.translate(AppText.unlockText), clr: AppColor.plainWhite, ), ), diff --git a/lib/shared/components/exit_app_dialog.dart b/lib/shared/components/exit_app_dialog.dart index bd68334..31dfce2 100644 --- a/lib/shared/components/exit_app_dialog.dart +++ b/lib/shared/components/exit_app_dialog.dart @@ -8,11 +8,13 @@ import 'package:tanami_app/core/styles/app_color.dart'; import 'package:tanami_app/core/styles/app_images.dart'; import 'package:tanami_app/core/styles/app_text.dart'; +import '../../core/utils/language/localizations_delegate.dart'; import 'text_widget.dart'; exitAppDialog( context, ) { + var localizations = AppLocalizations.of(context); return showDialog( context: context, builder: (context) => Column( @@ -55,7 +57,8 @@ exitAppDialog( child: Container( margin: const EdgeInsets.symmetric(horizontal: 30), child: TextWidget().text17W700( - AppText.areYouSureYouWantToExitText, + localizations + .translate(AppText.areYouSureYouWantToExitText), clr: AppColor.textLabelColor, ), ), @@ -80,7 +83,7 @@ exitAppDialog( ), child: Center( child: TextWidget().text18W700( - AppText.cancelText, + localizations.translate(AppText.cancelText), clr: AppColor.primaryColor2, ), ), @@ -100,7 +103,7 @@ exitAppDialog( color: AppColor.primaryColor), child: Center( child: TextWidget().text18W700( - AppText.exitText, + localizations.translate(AppText.exitText), clr: AppColor.plainWhite, ), ), diff --git a/lib/shared/components/form_label_textfield.dart b/lib/shared/components/form_label_textfield.dart index c6f8acb..8009c74 100644 --- a/lib/shared/components/form_label_textfield.dart +++ b/lib/shared/components/form_label_textfield.dart @@ -8,6 +8,7 @@ import 'package:tanami_app/shared/components/text_widget.dart'; import '../../core/routes/route_name.dart'; import '../../core/routes/routes.dart'; +import '../../core/utils/language/localizations_delegate.dart'; import 'text_from_field_widget.dart'; class FormLabelTextField extends StatelessWidget { @@ -29,6 +30,7 @@ class FormLabelTextField extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -48,17 +50,18 @@ class FormLabelTextField extends StatelessWidget { validator: (value) { if (type == "phone number") { if (value != null && value.isEmpty) { - return AppText.enterPhoneNo; + return localizations.translate(AppText.enterPhoneNo); } return null; } else if (type == "country selection") { if (textEditingController.text.isEmpty) { - return AppText.chooseCountry; + return localizations.translate(AppText.chooseCountry); } return null; } else if (type == "description") { if (textEditingController.text.isEmpty) { - return AppText.pleaseEnteraDescription; + return localizations + .translate(AppText.pleaseEnteraDescription); } return null; } else { diff --git a/lib/shared/components/log_out_dialog.dart b/lib/shared/components/log_out_dialog.dart index 1142c57..2c35a7b 100644 --- a/lib/shared/components/log_out_dialog.dart +++ b/lib/shared/components/log_out_dialog.dart @@ -7,12 +7,14 @@ import '../../core/routes/route_name.dart'; import '../../core/routes/routes.dart'; import '../../core/styles/app_color.dart'; import '../../core/styles/app_text.dart'; +import '../../core/utils/language/localizations_delegate.dart'; import '../../core/utils/secure/secure_storage_service.dart'; import 'bloc/bottom_nav_bar/bottom_navigation_bloc.dart'; import 'bloc/bottom_nav_bar/bottom_navigation_event.dart'; import 'text_widget.dart'; buildprofilelogoutdialog(context) { + var localizations = AppLocalizations.of(context); SecureStorageService secureStorageService = SecureStorageService(); return showDialog( context: context, @@ -52,7 +54,7 @@ buildprofilelogoutdialog(context) { child: Container( margin: const EdgeInsets.symmetric(horizontal: 20), child: TextWidget().text17W700( - AppText.areYouSureWantToLogoutText, + localizations.translate(AppText.areYouSureWantToLogoutText), clr: AppColor.textLabelColor, ), ), @@ -76,7 +78,7 @@ buildprofilelogoutdialog(context) { color: AppColor.plainWhite), child: Center( child: TextWidget().text18W700( - AppText.noText, + localizations.translate(AppText.noText), clr: AppColor.primaryColor2, ), ), @@ -99,7 +101,7 @@ buildprofilelogoutdialog(context) { color: AppColor.primaryColor), child: Center( child: TextWidget().text18W700( - AppText.yesText, + localizations.translate(AppText.yesText), clr: AppColor.plainWhite, ), ), diff --git a/lib/shared/components/password_text_form_field.dart b/lib/shared/components/password_text_form_field.dart index d25a951..35b5f32 100644 --- a/lib/shared/components/password_text_form_field.dart +++ b/lib/shared/components/password_text_form_field.dart @@ -7,6 +7,7 @@ import 'package:tanami_app/core/styles/app_images.dart'; import '../../core/styles/app_color.dart'; import '../../core/styles/app_text.dart'; +import '../../core/utils/language/localizations_delegate.dart'; import 'bloc/password_field/password_visibility_bloc.dart'; import 'bloc/password_field/password_visibility_event.dart'; import 'bloc/password_field/password_visibility_state.dart'; @@ -19,12 +20,13 @@ class PasswordField extends StatelessWidget { @override Widget build(BuildContext context) { + var localizations = AppLocalizations.of(context); return BlocBuilder( builder: (context, state) { return TextFormField( validator: (value) { if (value != null && value.isEmpty) { - return AppText.enterPassword; + return localizations.translate(AppText.enterPassword); } return null; }, diff --git a/lib/shared/components/permission_dialog.dart b/lib/shared/components/permission_dialog.dart index d597782..3bebdf7 100644 --- a/lib/shared/components/permission_dialog.dart +++ b/lib/shared/components/permission_dialog.dart @@ -6,6 +6,7 @@ import 'package:tanami_app/core/styles/app_color.dart'; import '../../core/routes/route_name.dart'; import '../../core/routes/routes.dart'; import '../../core/styles/app_text.dart'; +import '../../core/utils/language/localizations_delegate.dart'; import '../../core/utils/secure/secure_storage_service.dart'; import 'text_widget.dart'; import 'toast_message.dart'; @@ -13,6 +14,7 @@ import 'toast_message.dart'; permissionDialog( context, ) { + var localizations = AppLocalizations.of(context); final SecureStorageService secureStorageService = SecureStorageService(); return showDialog( @@ -49,7 +51,7 @@ permissionDialog( child: Container( margin: const EdgeInsets.symmetric(horizontal: 30), child: TextWidget().text17W600( - AppText.biometricText, + localizations.translate(AppText.biometricText), clr: AppColor.plainBlack, ), ), @@ -60,7 +62,8 @@ permissionDialog( child: Container( // margin: const EdgeInsets.symmetric(horizontal: 30), child: TextWidget().text13W400( - AppText.appAskPermissionText, + localizations + .translate(AppText.appAskPermissionText), txtAlign: TextAlign.center, clr: AppColor.plainBlack, ), @@ -92,7 +95,7 @@ permissionDialog( width: 140.w, child: Center( child: TextWidget().text17W600( - AppText.declineText, + localizations.translate(AppText.declineText), clr: AppColor.permissionTextClr, ), ), @@ -120,7 +123,7 @@ permissionDialog( width: 140.w, child: Center( child: TextWidget().text17W600( - AppText.allowText, + localizations.translate(AppText.allowText), clr: AppColor.permissionTextClr, ), ), From feb9aa2efd14c0808e1d6a5802a36b2bb3902324 Mon Sep 17 00:00:00 2001 From: poojapandeyx Date: Thu, 11 Jul 2024 10:51:29 +0530 Subject: [PATCH 3/5] get country api --- .../bloc/GetCountry/GetCountryAPI.dart | 3 +- .../bloc/GetCountry/getcountry_bloc.dart | 19 ++- .../bloc/GetCountry/getcountryevent_bloc.dart | 23 ++- .../widgets/country_selection_list.dart | 142 ++++++++++++------ .../widgets/login_signup_button.dart | 6 +- lib/shared/api/network_api_services.dart | 27 +++- 6 files changed, 156 insertions(+), 64 deletions(-) diff --git a/lib/features/countrySelection/presentation/bloc/GetCountry/GetCountryAPI.dart b/lib/features/countrySelection/presentation/bloc/GetCountry/GetCountryAPI.dart index d020d42..7cc0a8b 100644 --- a/lib/features/countrySelection/presentation/bloc/GetCountry/GetCountryAPI.dart +++ b/lib/features/countrySelection/presentation/bloc/GetCountry/GetCountryAPI.dart @@ -5,10 +5,11 @@ import '../../../../../shared/api/network_api_services.dart'; class GetCountryAPI { GetCountryAPI(); - Future getcountryAPI() async { + Future getcountryAPI() async { String url=ApiEndpoints.getcountryurl; final response = await NetworkApiService().get( url, ); + return response; } } \ No newline at end of file diff --git a/lib/features/countrySelection/presentation/bloc/GetCountry/getcountry_bloc.dart b/lib/features/countrySelection/presentation/bloc/GetCountry/getcountry_bloc.dart index a5f1bda..564c41c 100644 --- a/lib/features/countrySelection/presentation/bloc/GetCountry/getcountry_bloc.dart +++ b/lib/features/countrySelection/presentation/bloc/GetCountry/getcountry_bloc.dart @@ -2,26 +2,29 @@ import 'package:bloc/bloc.dart'; import 'package:tanami_app/features/countrySelection/presentation/bloc/GetCountry/getcountryevent_bloc.dart'; import '../../../../../Api_Helper/base_manager.dart'; +import '../../../../../domain/model/GetCountry_model.dart'; import 'GetCountryAPI.dart'; -dynamic responseFromApi = []; - class GetCountryBlock extends Bloc { - GetCountryBlock() : super(GetCountryState.initial) { + GetCountryBlock() : super(CountryInitial()) { on(mapEventToState); } Future mapEventToState( GetCountry event, Emitter emit) async { if (event is GetCountry) { - emit(GetCountryState.loading); + emit(CountryLoading()); try { - var resp = await GetCountryAPI().getcountryAPI(); + ResponseData response = await GetCountryAPI().getcountryAPI(); + if (response.status == ResponseStatus.SUCCESS) { + GetCountryModel countryModel = + GetCountryModel.fromJson(response.data); + emit(CountryLoaded(countryModel)); + } print("//"); } catch (e) { - emit(GetCountryState.failure); - + emit(CountryError("Oops Something went wrong")); } } } -} \ No newline at end of file +} diff --git a/lib/features/countrySelection/presentation/bloc/GetCountry/getcountryevent_bloc.dart b/lib/features/countrySelection/presentation/bloc/GetCountry/getcountryevent_bloc.dart index dea2a67..bc6bb65 100644 --- a/lib/features/countrySelection/presentation/bloc/GetCountry/getcountryevent_bloc.dart +++ b/lib/features/countrySelection/presentation/bloc/GetCountry/getcountryevent_bloc.dart @@ -1,7 +1,9 @@ +import '../../../../../domain/model/GetCountry_model.dart'; + abstract class GetCountryEvent { const GetCountryEvent(); - List get props => []; + get props => []; } class GetCountry extends GetCountryEvent { @@ -9,6 +11,21 @@ class GetCountry extends GetCountryEvent { } - +abstract class GetCountryState{} // Define states -enum GetCountryState { initial, loading, success, failure, error } \ No newline at end of file +//enum GetCountryState { initial, loading, success, failure, error } +class CountryInitial extends GetCountryState {} + +class CountryLoading extends GetCountryState {} + +class CountryLoaded extends GetCountryState { + final GetCountryModel countryModel; + + CountryLoaded(this.countryModel); +} + +class CountryError extends GetCountryState { + final String message; + + CountryError(this.message); +} \ No newline at end of file diff --git a/lib/features/countrySelection/presentation/widgets/country_selection_list.dart b/lib/features/countrySelection/presentation/widgets/country_selection_list.dart index 2785e44..db26358 100644 --- a/lib/features/countrySelection/presentation/widgets/country_selection_list.dart +++ b/lib/features/countrySelection/presentation/widgets/country_selection_list.dart @@ -17,68 +17,118 @@ class CountrySelectionList extends StatelessWidget { @override Widget build(BuildContext context) { final radioBloc = context.read(); - return BlocConsumer( + /* return BlocConsumer( listener: (context, state) { - if (state == GetCountryState.success) { + /* if (state == GetCountryState.success) { const SnackBar(content: Text("Successfully fetch")); } else if (state == GetCountryState.error) { const SnackBar(content: Text(" error")); } else { const SnackBar(content: Text(" not fetch")); - } + } */ }, builder: (context, state) { print(state); - if (state == GetCountryState.loading) { - return const Center( - child: SizedBox( - height: 40, - width: 40, - child: // ShimmerCommon(), - CircularProgressIndicator( - color: Color(0xFF0093FF), - ), - ), - ); - } - return Text("wait"); - }); - /* BlocBuilder( + if (state is CountryLoading) { + return Center(child: CircularProgressIndicator()); + } else if (state is CountryLoaded) { + return ListView.builder( + itemCount: state.countryModel.data?.length ?? 0, + itemBuilder: (context, index) { + var country = state.countryModel.data![index]; + return ListTile( + title: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + // Adjust according to how you handle flags + Image.asset( + countryFlag[index], + width: 24, + height: 24, + ), + const SizedBox(width: 10), + Text(country.countryName ?? ''), + ], + ), + leading: Radio( + activeColor: Colors.blue, + value: index, + groupValue: -1, // You can update this to manage selected index + onChanged: (int? value) { + // Handle radio button change + }, + ), + ); + }, + ); + } else if (state is CountryError) { + return Center(child: Text(state.message)); + } else { + return Center(child: Text('Press button to fetch country data')); + } + }); */ + + return BlocBuilder( builder: (context, state) { int selectedIndex = -1; if (state is RadioSelectionChanged) { selectedIndex = state.selectedIndex; } - return Column( - children: List.generate(countryFlag.length, (int index) { - return ListTile( - title: Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Image.asset( - countryFlag[index], - width: 24, - height: 24, + return BlocConsumer( + listener: (context, state) { + if (state == CountryLoaded) { + const SnackBar(content: Text("Successfully fetch")); + } else if (state == CountryError) { + const SnackBar(content: Text("error while fetching data")); + Future.delayed(Duration(milliseconds: 3), () { + context.read().add(GetCountry()); + }); + } else { + const SnackBar(content: Text(" not fetch")); + } + }, builder: (context, state) { + print(state); + if (state is CountryLoading) { + return Center(child: CircularProgressIndicator()); + } else if (state is CountryLoaded) { + return ListView.builder( + itemCount: state.countryModel.data?.length ?? 0, + itemBuilder: (context, index) { + var country = state.countryModel.data![index]; + return ListTile( + title: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Image.asset( + countryFlag[index], + width: 24, + height: 24, + ), + const Gap(10), + TextWidget().text14W500(country.countryName.toString(), + clr: AppColor.charcoalColor), + ], ), - const Gap(10), - TextWidget().text14W500(countryName[index], - clr: AppColor.charcoalColor), - ], - ), - leading: Radio( - activeColor: AppColor.radioActiveColor, - value: index, - groupValue: selectedIndex, - onChanged: (int? value) { - if (value != null) { - radioBloc.add(RadioSelected(value)); - } - }, - ), + leading: Radio( + activeColor: AppColor.radioActiveColor, + value: index, + groupValue: selectedIndex, + onChanged: (int? value) { + if (value != null) { + radioBloc.add(RadioSelected(value)); + } + }, + ), + ); + }, ); - }), - ); + } else if (state is CountryError) { + return Center(child: Text(state.message)); + } else { + return Center(child: Text('Press button to fetch country data')); + } + }); }, - ); */ + ); } } diff --git a/lib/features/welcome/presentation/widgets/login_signup_button.dart b/lib/features/welcome/presentation/widgets/login_signup_button.dart index 0b03ee8..7770381 100644 --- a/lib/features/welcome/presentation/widgets/login_signup_button.dart +++ b/lib/features/welcome/presentation/widgets/login_signup_button.dart @@ -31,10 +31,10 @@ class LoginSignUpButton extends StatelessWidget { height: 56.h, child: ButtonWidget().elevatedBtn( function: () { - context.read().add(GetCountry()); - /* goRouter.goNamed(RouteName.registerStepScreen, pathParameters: { + context.read().add(GetCountry()); + goRouter.goNamed(RouteName.registerStepScreen, pathParameters: { "fromScreentype": "welcome", - }); */ + }); }, text: localizations.translate(AppText.signUpText), txtClr: AppColor.plainWhite, diff --git a/lib/shared/api/network_api_services.dart b/lib/shared/api/network_api_services.dart index 09f30ed..b3a486a 100644 --- a/lib/shared/api/network_api_services.dart +++ b/lib/shared/api/network_api_services.dart @@ -1,17 +1,38 @@ // common_api.dart import 'package:dio/dio.dart'; +import 'package:flutter/foundation.dart'; + +import '../../Api_Helper/base_manager.dart'; class NetworkApiService { final Dio _dio = Dio(); // Common function for GET requests - Future get(String url, + Future get(String url, {Map? queryParameters}) async { + if (kDebugMode) { + print("api url is >>> $url"); + } + Response response; try { - return await _dio.get(url); + response = await _dio.get(url); + if (response.statusCode == 201 || response.statusCode == 200) { + return ResponseData("success", ResponseStatus.SUCCESS, + data: response.data); + } else { + try { + return ResponseData( + response.data['message'].toString(), ResponseStatus.FAILED); + } catch (_) { + return ResponseData( + data: response.data, + response.statusMessage!, + ResponseStatus.FAILED); + }} } catch (e) { - throw _handleError(e); + return ResponseData( + "Something went wrong", ResponseStatus.FAILED); } } From a24febc95d417e4a13277089424bda40fcc25556 Mon Sep 17 00:00:00 2001 From: poojapandeyx Date: Thu, 11 Jul 2024 11:05:57 +0530 Subject: [PATCH 4/5] project structure --- .../payment/invest_pay_bottom_section.dart | 4 +- .../payment/invest_pay_method_section.dart | 6 +- .../payment/invest_pay_top_section.dart | 4 +- .../pages/deposit/deposit_layout.dart | 4 +- .../widgets/deposit_pay_method_section.dart | 6 +- .../bloc/GetCountry/GetCountryAPI.dart | 6 +- .../bloc/GetCountry/getcountry_bloc.dart | 6 +- .../bloc/GetCountry/getcountryevent_bloc.dart | 2 +- .../bloc/choose_country_bloc.dart | 0 .../bloc/choose_country_event.dart | 0 .../bloc/choose_country_state.dart | 0 .../domain/model/GetCountry_model.dart | 0 .../widgets/country_selection_list.dart | 59 ++----------------- .../restore_password_bottom_section.dart | 2 +- ...ord_phone_verification_bottom_section.dart | 2 +- ...tore_password_phone_verification_form.dart | 4 +- .../presentation/pages/login_screen.dart | 2 +- .../presentation/widgets/bottom_section.dart | 2 +- .../presentation/widgets/login_form.dart | 4 +- .../presentation/pages/register_screen.dart | 2 +- .../widgets/register_bottom_section.dart | 2 +- .../presentation/widgets/register_form.dart | 4 +- .../widgets/login_signup_button.dart | 4 +- lib/main.dart | 4 +- 24 files changed, 40 insertions(+), 89 deletions(-) rename lib/features/countrySelection/{presentation => }/bloc/GetCountry/GetCountryAPI.dart (57%) rename lib/features/countrySelection/{presentation => }/bloc/GetCountry/getcountry_bloc.dart (77%) rename lib/features/countrySelection/{presentation => }/bloc/GetCountry/getcountryevent_bloc.dart (90%) rename lib/features/countrySelection/{presentation => }/bloc/choose_country_bloc.dart (100%) rename lib/features/countrySelection/{presentation => }/bloc/choose_country_event.dart (100%) rename lib/features/countrySelection/{presentation => }/bloc/choose_country_state.dart (100%) rename lib/{ => features/countrySelection}/domain/model/GetCountry_model.dart (100%) diff --git a/lib/features/MainScreens/Invest/presentation/widgets/payment/invest_pay_bottom_section.dart b/lib/features/MainScreens/Invest/presentation/widgets/payment/invest_pay_bottom_section.dart index 346ff99..8bc6639 100644 --- a/lib/features/MainScreens/Invest/presentation/widgets/payment/invest_pay_bottom_section.dart +++ b/lib/features/MainScreens/Invest/presentation/widgets/payment/invest_pay_bottom_section.dart @@ -12,8 +12,8 @@ import '../../../../../../core/styles/app_images.dart'; import '../../../../../../core/styles/app_text.dart'; import '../../../../../../core/utils/language/localizations_delegate.dart'; import '../../../../../../shared/components/button_widget.dart'; -import '../../../../../countrySelection/presentation/bloc/choose_country_bloc.dart'; -import '../../../../../countrySelection/presentation/bloc/choose_country_state.dart'; +import '../../../../../countrySelection/bloc/choose_country_bloc.dart'; +import '../../../../../countrySelection/bloc/choose_country_state.dart'; import '../../bloc/payment/invest_payment_bloc.dart'; import '../../bloc/payment/invest_payment_state.dart'; diff --git a/lib/features/MainScreens/Invest/presentation/widgets/payment/invest_pay_method_section.dart b/lib/features/MainScreens/Invest/presentation/widgets/payment/invest_pay_method_section.dart index 85bc65d..1e9d482 100644 --- a/lib/features/MainScreens/Invest/presentation/widgets/payment/invest_pay_method_section.dart +++ b/lib/features/MainScreens/Invest/presentation/widgets/payment/invest_pay_method_section.dart @@ -9,9 +9,9 @@ import 'package:tanami_app/shared/components/text_widget.dart'; import '../../../../../../core/styles/app_color.dart'; import '../../../../../../core/utils/language/localizations_delegate.dart'; -import '../../../../../countrySelection/presentation/bloc/choose_country_bloc.dart'; -import '../../../../../countrySelection/presentation/bloc/choose_country_event.dart'; -import '../../../../../countrySelection/presentation/bloc/choose_country_state.dart'; +import '../../../../../countrySelection/bloc/choose_country_bloc.dart'; +import '../../../../../countrySelection/bloc/choose_country_event.dart'; +import '../../../../../countrySelection/bloc/choose_country_state.dart'; class InvestPayMethodSection extends StatelessWidget { const InvestPayMethodSection({super.key}); diff --git a/lib/features/MainScreens/Invest/presentation/widgets/payment/invest_pay_top_section.dart b/lib/features/MainScreens/Invest/presentation/widgets/payment/invest_pay_top_section.dart index f2e9b1c..cc305b7 100644 --- a/lib/features/MainScreens/Invest/presentation/widgets/payment/invest_pay_top_section.dart +++ b/lib/features/MainScreens/Invest/presentation/widgets/payment/invest_pay_top_section.dart @@ -10,8 +10,8 @@ import 'package:tanami_app/shared/components/text_widget.dart'; import '../../../../../../core/utils/language/localizations_delegate.dart'; import '../../../../../../core/utils/text_formatter/comma_input_text_formatter.dart'; import '../../../../../../shared/components/text_from_field_widget.dart'; -import '../../../../../countrySelection/presentation/bloc/choose_country_bloc.dart'; -import '../../../../../countrySelection/presentation/bloc/choose_country_state.dart'; +import '../../../../../countrySelection/bloc/choose_country_bloc.dart'; +import '../../../../../countrySelection/bloc/choose_country_state.dart'; import '../../bloc/payment/invest_payment_bloc.dart'; import '../../bloc/payment/invest_payment_event.dart'; import '../../bloc/payment/invest_payment_state.dart'; diff --git a/lib/features/MainScreens/Wallet/presentation/pages/deposit/deposit_layout.dart b/lib/features/MainScreens/Wallet/presentation/pages/deposit/deposit_layout.dart index 9824250..83788bf 100644 --- a/lib/features/MainScreens/Wallet/presentation/pages/deposit/deposit_layout.dart +++ b/lib/features/MainScreens/Wallet/presentation/pages/deposit/deposit_layout.dart @@ -14,8 +14,8 @@ import '../../../../../../core/styles/app_images.dart'; import '../../../../../../core/styles/app_text.dart'; import '../../../../../../core/utils/language/localizations_delegate.dart'; import '../../../../../../core/utils/text_formatter/comma_input_text_formatter.dart'; -import '../../../../../countrySelection/presentation/bloc/choose_country_bloc.dart'; -import '../../../../../countrySelection/presentation/bloc/choose_country_state.dart'; +import '../../../../../countrySelection/bloc/choose_country_bloc.dart'; +import '../../../../../countrySelection/bloc/choose_country_state.dart'; import '../../bloc/deposit/deposit_payment_bloc.dart'; import '../../bloc/deposit/deposit_payment_event.dart'; import '../../bloc/deposit/deposit_payment_state.dart'; diff --git a/lib/features/MainScreens/Wallet/presentation/widgets/deposit_pay_method_section.dart b/lib/features/MainScreens/Wallet/presentation/widgets/deposit_pay_method_section.dart index f454d57..8c97d6b 100644 --- a/lib/features/MainScreens/Wallet/presentation/widgets/deposit_pay_method_section.dart +++ b/lib/features/MainScreens/Wallet/presentation/widgets/deposit_pay_method_section.dart @@ -8,9 +8,9 @@ import 'package:tanami_app/shared/components/text_widget.dart'; import '../../../../../../core/styles/app_color.dart'; import '../../../../../core/utils/language/localizations_delegate.dart'; -import '../../../../countrySelection/presentation/bloc/choose_country_bloc.dart'; -import '../../../../countrySelection/presentation/bloc/choose_country_event.dart'; -import '../../../../countrySelection/presentation/bloc/choose_country_state.dart'; +import '../../../../countrySelection/bloc/choose_country_bloc.dart'; +import '../../../../countrySelection/bloc/choose_country_event.dart'; +import '../../../../countrySelection/bloc/choose_country_state.dart'; class DepositPayMethodSection extends StatelessWidget { const DepositPayMethodSection({super.key}); diff --git a/lib/features/countrySelection/presentation/bloc/GetCountry/GetCountryAPI.dart b/lib/features/countrySelection/bloc/GetCountry/GetCountryAPI.dart similarity index 57% rename from lib/features/countrySelection/presentation/bloc/GetCountry/GetCountryAPI.dart rename to lib/features/countrySelection/bloc/GetCountry/GetCountryAPI.dart index 7cc0a8b..bf736bf 100644 --- a/lib/features/countrySelection/presentation/bloc/GetCountry/GetCountryAPI.dart +++ b/lib/features/countrySelection/bloc/GetCountry/GetCountryAPI.dart @@ -1,7 +1,7 @@ -import '../../../../../Api_Helper/base_manager.dart'; -import '../../../../../shared/api/api_endpoints.dart'; -import '../../../../../shared/api/network_api_services.dart'; +import '../../../../Api_Helper/base_manager.dart'; +import '../../../../shared/api/api_endpoints.dart'; +import '../../../../shared/api/network_api_services.dart'; class GetCountryAPI { GetCountryAPI(); diff --git a/lib/features/countrySelection/presentation/bloc/GetCountry/getcountry_bloc.dart b/lib/features/countrySelection/bloc/GetCountry/getcountry_bloc.dart similarity index 77% rename from lib/features/countrySelection/presentation/bloc/GetCountry/getcountry_bloc.dart rename to lib/features/countrySelection/bloc/GetCountry/getcountry_bloc.dart index 564c41c..7584cd5 100644 --- a/lib/features/countrySelection/presentation/bloc/GetCountry/getcountry_bloc.dart +++ b/lib/features/countrySelection/bloc/GetCountry/getcountry_bloc.dart @@ -1,8 +1,8 @@ import 'package:bloc/bloc.dart'; -import 'package:tanami_app/features/countrySelection/presentation/bloc/GetCountry/getcountryevent_bloc.dart'; +import 'package:tanami_app/features/countrySelection/bloc/GetCountry/getcountryevent_bloc.dart'; -import '../../../../../Api_Helper/base_manager.dart'; -import '../../../../../domain/model/GetCountry_model.dart'; +import '../../../../Api_Helper/base_manager.dart'; +import '../../domain/model/GetCountry_model.dart'; import 'GetCountryAPI.dart'; diff --git a/lib/features/countrySelection/presentation/bloc/GetCountry/getcountryevent_bloc.dart b/lib/features/countrySelection/bloc/GetCountry/getcountryevent_bloc.dart similarity index 90% rename from lib/features/countrySelection/presentation/bloc/GetCountry/getcountryevent_bloc.dart rename to lib/features/countrySelection/bloc/GetCountry/getcountryevent_bloc.dart index bc6bb65..01b4751 100644 --- a/lib/features/countrySelection/presentation/bloc/GetCountry/getcountryevent_bloc.dart +++ b/lib/features/countrySelection/bloc/GetCountry/getcountryevent_bloc.dart @@ -1,4 +1,4 @@ -import '../../../../../domain/model/GetCountry_model.dart'; +import '../../domain/model/GetCountry_model.dart'; abstract class GetCountryEvent { const GetCountryEvent(); diff --git a/lib/features/countrySelection/presentation/bloc/choose_country_bloc.dart b/lib/features/countrySelection/bloc/choose_country_bloc.dart similarity index 100% rename from lib/features/countrySelection/presentation/bloc/choose_country_bloc.dart rename to lib/features/countrySelection/bloc/choose_country_bloc.dart diff --git a/lib/features/countrySelection/presentation/bloc/choose_country_event.dart b/lib/features/countrySelection/bloc/choose_country_event.dart similarity index 100% rename from lib/features/countrySelection/presentation/bloc/choose_country_event.dart rename to lib/features/countrySelection/bloc/choose_country_event.dart diff --git a/lib/features/countrySelection/presentation/bloc/choose_country_state.dart b/lib/features/countrySelection/bloc/choose_country_state.dart similarity index 100% rename from lib/features/countrySelection/presentation/bloc/choose_country_state.dart rename to lib/features/countrySelection/bloc/choose_country_state.dart diff --git a/lib/domain/model/GetCountry_model.dart b/lib/features/countrySelection/domain/model/GetCountry_model.dart similarity index 100% rename from lib/domain/model/GetCountry_model.dart rename to lib/features/countrySelection/domain/model/GetCountry_model.dart diff --git a/lib/features/countrySelection/presentation/widgets/country_selection_list.dart b/lib/features/countrySelection/presentation/widgets/country_selection_list.dart index db26358..6330367 100644 --- a/lib/features/countrySelection/presentation/widgets/country_selection_list.dart +++ b/lib/features/countrySelection/presentation/widgets/country_selection_list.dart @@ -3,13 +3,13 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:gap/gap.dart'; import 'package:tanami_app/core/styles/app_color.dart'; import 'package:tanami_app/core/utils/constant/country_flag_data.dart'; -import 'package:tanami_app/features/countrySelection/presentation/bloc/GetCountry/getcountry_bloc.dart'; -import 'package:tanami_app/features/countrySelection/presentation/bloc/GetCountry/getcountryevent_bloc.dart'; +import 'package:tanami_app/features/countrySelection/bloc/GetCountry/getcountry_bloc.dart'; +import 'package:tanami_app/features/countrySelection/bloc/GetCountry/getcountryevent_bloc.dart'; import 'package:tanami_app/shared/components/text_widget.dart'; -import '../bloc/choose_country_bloc.dart'; -import '../bloc/choose_country_event.dart'; -import '../bloc/choose_country_state.dart'; +import '../../bloc/choose_country_bloc.dart'; +import '../../bloc/choose_country_event.dart'; +import '../../bloc/choose_country_state.dart'; class CountrySelectionList extends StatelessWidget { const CountrySelectionList({super.key}); @@ -17,55 +17,6 @@ class CountrySelectionList extends StatelessWidget { @override Widget build(BuildContext context) { final radioBloc = context.read(); - /* return BlocConsumer( - listener: (context, state) { - /* if (state == GetCountryState.success) { - const SnackBar(content: Text("Successfully fetch")); - } else if (state == GetCountryState.error) { - const SnackBar(content: Text(" error")); - } else { - const SnackBar(content: Text(" not fetch")); - } */ - }, builder: (context, state) { - print(state); - if (state is CountryLoading) { - return Center(child: CircularProgressIndicator()); - } else if (state is CountryLoaded) { - return ListView.builder( - itemCount: state.countryModel.data?.length ?? 0, - itemBuilder: (context, index) { - var country = state.countryModel.data![index]; - return ListTile( - title: Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - // Adjust according to how you handle flags - Image.asset( - countryFlag[index], - width: 24, - height: 24, - ), - const SizedBox(width: 10), - Text(country.countryName ?? ''), - ], - ), - leading: Radio( - activeColor: Colors.blue, - value: index, - groupValue: -1, // You can update this to manage selected index - onChanged: (int? value) { - // Handle radio button change - }, - ), - ); - }, - ); - } else if (state is CountryError) { - return Center(child: Text(state.message)); - } else { - return Center(child: Text('Press button to fetch country data')); - } - }); */ return BlocBuilder( builder: (context, state) { diff --git a/lib/features/forgotPassword/presentation/widgets/restore_password_bottom_section.dart b/lib/features/forgotPassword/presentation/widgets/restore_password_bottom_section.dart index 0545c8b..4d98022 100644 --- a/lib/features/forgotPassword/presentation/widgets/restore_password_bottom_section.dart +++ b/lib/features/forgotPassword/presentation/widgets/restore_password_bottom_section.dart @@ -12,7 +12,7 @@ import '../../../../core/styles/app_text.dart'; import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/button_widget.dart'; import '../../../../shared/components/text_widget.dart'; -import '../../../countrySelection/presentation/bloc/choose_country_bloc.dart'; +import '../../../countrySelection/bloc/choose_country_bloc.dart'; import '../bloc/restore_password_bloc.dart'; import '../bloc/restore_password_event.dart'; import '../bloc/restore_password_state.dart'; diff --git a/lib/features/forgotPassword/presentation/widgets/restore_password_phone_verification_bottom_section.dart b/lib/features/forgotPassword/presentation/widgets/restore_password_phone_verification_bottom_section.dart index 4fe8021..e682d2e 100644 --- a/lib/features/forgotPassword/presentation/widgets/restore_password_phone_verification_bottom_section.dart +++ b/lib/features/forgotPassword/presentation/widgets/restore_password_phone_verification_bottom_section.dart @@ -12,7 +12,7 @@ import '../../../../core/styles/app_text.dart'; import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/button_widget.dart'; import '../../../../shared/components/text_widget.dart'; -import '../../../countrySelection/presentation/bloc/choose_country_bloc.dart'; +import '../../../countrySelection/bloc/choose_country_bloc.dart'; import '../bloc/restore_password_phone_verification_bloc.dart'; import '../bloc/restore_password_phone_verification_event.dart'; import '../bloc/restore_password_phone_verification_state.dart'; diff --git a/lib/features/forgotPassword/presentation/widgets/restore_password_phone_verification_form.dart b/lib/features/forgotPassword/presentation/widgets/restore_password_phone_verification_form.dart index 11c6963..127f8ad 100644 --- a/lib/features/forgotPassword/presentation/widgets/restore_password_phone_verification_form.dart +++ b/lib/features/forgotPassword/presentation/widgets/restore_password_phone_verification_form.dart @@ -6,8 +6,8 @@ import 'package:tanami_app/core/utils/constant/country_flag_data.dart'; import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/form_label_textfield.dart'; -import '../../../countrySelection/presentation/bloc/choose_country_bloc.dart'; -import '../../../countrySelection/presentation/bloc/choose_country_state.dart'; +import '../../../countrySelection/bloc/choose_country_bloc.dart'; +import '../../../countrySelection/bloc/choose_country_state.dart'; import '../bloc/restore_password_phone_verification_bloc.dart'; class RestorePasswordPhoneVerificationForm extends StatelessWidget { diff --git a/lib/features/login/presentation/pages/login_screen.dart b/lib/features/login/presentation/pages/login_screen.dart index 3ff586e..9a89c17 100644 --- a/lib/features/login/presentation/pages/login_screen.dart +++ b/lib/features/login/presentation/pages/login_screen.dart @@ -3,7 +3,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import '../../../../core/styles/app_color.dart'; import '../../../../shared/components/exit_app_dialog.dart'; -import '../../../countrySelection/presentation/bloc/choose_country_bloc.dart'; +import '../../../countrySelection/bloc/choose_country_bloc.dart'; import '../bloc/login_bloc.dart'; import 'login_layout.dart'; diff --git a/lib/features/login/presentation/widgets/bottom_section.dart b/lib/features/login/presentation/widgets/bottom_section.dart index 5e7726c..3c943df 100644 --- a/lib/features/login/presentation/widgets/bottom_section.dart +++ b/lib/features/login/presentation/widgets/bottom_section.dart @@ -13,7 +13,7 @@ import '../../../../core/styles/app_text.dart'; import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/button_widget.dart'; import '../../../../shared/components/text_widget.dart'; -import '../../../countrySelection/presentation/bloc/choose_country_bloc.dart'; +import '../../../countrySelection/bloc/choose_country_bloc.dart'; import '../bloc/login_bloc.dart'; import '../bloc/login_event.dart'; import '../bloc/login_state.dart'; diff --git a/lib/features/login/presentation/widgets/login_form.dart b/lib/features/login/presentation/widgets/login_form.dart index 0cbbcb3..6c29693 100644 --- a/lib/features/login/presentation/widgets/login_form.dart +++ b/lib/features/login/presentation/widgets/login_form.dart @@ -7,8 +7,8 @@ import 'package:tanami_app/core/utils/constant/country_flag_data.dart'; import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/bloc/password_field/password_visibility_bloc.dart'; import '../../../../shared/components/form_label_textfield.dart'; -import '../../../countrySelection/presentation/bloc/choose_country_bloc.dart'; -import '../../../countrySelection/presentation/bloc/choose_country_state.dart'; +import '../../../countrySelection/bloc/choose_country_bloc.dart'; +import '../../../countrySelection/bloc/choose_country_state.dart'; import '../bloc/login_bloc.dart'; class LoginForm extends StatelessWidget { diff --git a/lib/features/register/presentation/pages/register_screen.dart b/lib/features/register/presentation/pages/register_screen.dart index 02bafe3..1edc0c2 100644 --- a/lib/features/register/presentation/pages/register_screen.dart +++ b/lib/features/register/presentation/pages/register_screen.dart @@ -3,7 +3,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:tanami_app/features/register/presentation/bloc/register_bloc.dart'; import '../../../../core/styles/app_color.dart'; -import '../../../countrySelection/presentation/bloc/choose_country_bloc.dart'; +import '../../../countrySelection/bloc/choose_country_bloc.dart'; import 'register_layout.dart'; class RegisterScreen extends StatelessWidget { diff --git a/lib/features/register/presentation/widgets/register_bottom_section.dart b/lib/features/register/presentation/widgets/register_bottom_section.dart index c29da35..a678fd4 100644 --- a/lib/features/register/presentation/widgets/register_bottom_section.dart +++ b/lib/features/register/presentation/widgets/register_bottom_section.dart @@ -13,7 +13,7 @@ import '../../../../core/styles/app_color.dart'; import '../../../../core/styles/app_text.dart'; import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/button_widget.dart'; -import '../../../countrySelection/presentation/bloc/choose_country_bloc.dart'; +import '../../../countrySelection/bloc/choose_country_bloc.dart'; import '../bloc/register_bloc.dart'; import '../bloc/register_event.dart'; import '../bloc/register_state.dart'; diff --git a/lib/features/register/presentation/widgets/register_form.dart b/lib/features/register/presentation/widgets/register_form.dart index a29c542..e93007a 100644 --- a/lib/features/register/presentation/widgets/register_form.dart +++ b/lib/features/register/presentation/widgets/register_form.dart @@ -6,8 +6,8 @@ import 'package:tanami_app/core/utils/constant/country_flag_data.dart'; import '../../../../core/utils/language/localizations_delegate.dart'; import '../../../../shared/components/form_label_textfield.dart'; -import '../../../countrySelection/presentation/bloc/choose_country_bloc.dart'; -import '../../../countrySelection/presentation/bloc/choose_country_state.dart'; +import '../../../countrySelection/bloc/choose_country_bloc.dart'; +import '../../../countrySelection/bloc/choose_country_state.dart'; import '../bloc/register_bloc.dart'; class RegisterForm extends StatelessWidget { diff --git a/lib/features/welcome/presentation/widgets/login_signup_button.dart b/lib/features/welcome/presentation/widgets/login_signup_button.dart index 7770381..bf41f12 100644 --- a/lib/features/welcome/presentation/widgets/login_signup_button.dart +++ b/lib/features/welcome/presentation/widgets/login_signup_button.dart @@ -5,8 +5,8 @@ import 'package:gap/gap.dart'; import 'package:tanami_app/core/routes/route_name.dart'; import 'package:tanami_app/core/routes/routes.dart'; import 'package:tanami_app/core/styles/app_color.dart'; -import 'package:tanami_app/features/countrySelection/presentation/bloc/GetCountry/getcountry_bloc.dart'; -import 'package:tanami_app/features/countrySelection/presentation/bloc/GetCountry/getcountryevent_bloc.dart'; +import 'package:tanami_app/features/countrySelection/bloc/GetCountry/getcountry_bloc.dart'; +import 'package:tanami_app/features/countrySelection/bloc/GetCountry/getcountryevent_bloc.dart'; import 'package:tanami_app/shared/components/button_widget.dart'; import '../../../../core/styles/app_text.dart'; diff --git a/lib/main.dart b/lib/main.dart index 0bfa343..f486a07 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -11,8 +11,8 @@ import 'core/utils/language/localizations_delegate.dart'; import 'core/utils/secure/secure_storage_service.dart'; import 'features/biometric/presentation/bloc/biometric_bloc.dart'; import 'features/biometric/presentation/bloc/biometric_event.dart'; -import 'features/countrySelection/presentation/bloc/GetCountry/getcountry_bloc.dart'; -import 'features/countrySelection/presentation/bloc/choose_country_bloc.dart'; +import 'features/countrySelection/bloc/GetCountry/getcountry_bloc.dart'; +import 'features/countrySelection/bloc/choose_country_bloc.dart'; import 'shared/components/bloc/bottom_nav_bar/bottom_navigation_bloc.dart'; import 'shared/components/bloc/language/lng_bloc.dart'; import 'shared/components/bloc/language/lng_event.dart'; From acf7f8980f8f04f81fa3fe40d63f0c20c33ffe36 Mon Sep 17 00:00:00 2001 From: poojapandeyx Date: Thu, 11 Jul 2024 19:36:40 +0530 Subject: [PATCH 5/5] otp flow --- lib/Globalconst.dart | 6 + .../utils/constant/country_flag_data.dart | 12 ++ lib/features/OTP/Repository/OTP_API.dart | 23 ++++ lib/features/OTP/bloc/OTPStateEvent.dart | 37 ++++++ lib/features/OTP/bloc/OTP_bloc.dart | 48 ++++++++ .../pages/choose_country_layout.dart | 1 + .../widgets/country_selection_list.dart | 31 ++++- .../presentation/bloc/otp_bloc.dart | 12 +- .../presentation/pages/otp_screen.dart | 9 +- .../widgets/resend_otp_section.dart | 71 +++++++++++- .../presentation/bloc/register_bloc.dart | 43 +++++-- .../presentation/bloc/register_event.dart | 16 ++- .../presentation/bloc/register_state.dart | 9 +- .../widgets/register_bottom_section.dart | 18 ++- .../presentation/widgets/register_form.dart | 108 ++++++++++++++++-- lib/main.dart | 10 ++ lib/shared/api/api_endpoints.dart | 4 + lib/shared/api/network_api_services.dart | 25 +++- 18 files changed, 447 insertions(+), 36 deletions(-) create mode 100644 lib/Globalconst.dart create mode 100644 lib/features/OTP/Repository/OTP_API.dart create mode 100644 lib/features/OTP/bloc/OTPStateEvent.dart create mode 100644 lib/features/OTP/bloc/OTP_bloc.dart diff --git a/lib/Globalconst.dart b/lib/Globalconst.dart new file mode 100644 index 0000000..6a8a72d --- /dev/null +++ b/lib/Globalconst.dart @@ -0,0 +1,6 @@ +class Globalconst { + static String token = ""; + static String name = ""; + static String phonenumber = ""; + static String isdcode = ""; +} diff --git a/lib/core/utils/constant/country_flag_data.dart b/lib/core/utils/constant/country_flag_data.dart index 4623908..1f313e2 100644 --- a/lib/core/utils/constant/country_flag_data.dart +++ b/lib/core/utils/constant/country_flag_data.dart @@ -27,3 +27,15 @@ List isoCountryCode = [ "+966", "+971", ]; + +/* List countryFlag = [ + AppImages.bahrainFlag, + // AppImages.kuwaitFlag, + // AppImages.omanFlag, + AppImages.qatarFlag, + AppImages.bahrainFlag, + AppImages.qatarFlag, + + // AppImages.saudiArabiaflag, + // AppImages.unitedArabEmiratesFlag, +]; */ \ No newline at end of file diff --git a/lib/features/OTP/Repository/OTP_API.dart b/lib/features/OTP/Repository/OTP_API.dart new file mode 100644 index 0000000..e0560c2 --- /dev/null +++ b/lib/features/OTP/Repository/OTP_API.dart @@ -0,0 +1,23 @@ +import '../../../../Api_Helper/base_manager.dart'; +import '../../../../shared/api/api_endpoints.dart'; +import '../../../../shared/api/network_api_services.dart'; + +class OTPAPI { + OTPAPI(); + Future RequestOTP(Map data) async { + String url = ApiEndpoints.requestotpapi; + final response = await NetworkApiService().post(url, data); + return response; + } + Future ResendOTPRequest(Map data) async { + String url = ApiEndpoints.requestresendotp; + final response = await NetworkApiService().post(url, data); + return response; + } + + Future VerifyOTP(Map data) async { + String url = ApiEndpoints.verifyotp; + final response = await NetworkApiService().post(url, data); + return response; + } +} diff --git a/lib/features/OTP/bloc/OTPStateEvent.dart b/lib/features/OTP/bloc/OTPStateEvent.dart new file mode 100644 index 0000000..53b7f73 --- /dev/null +++ b/lib/features/OTP/bloc/OTPStateEvent.dart @@ -0,0 +1,37 @@ + +abstract class OTPEvent { + const OTPEvent(); + + List get props => []; +} + +class RequestOTP extends OTPEvent { + final Map OTPRequestData; + RequestOTP(this.OTPRequestData); + + @override + List get props => [OTPRequestData]; + +} +class VerifyOTP extends OTPEvent { + VerifyOTP(); + + +} +abstract class OTPState{} +class OTPInitial extends OTPState {} + +class OTPLoading extends OTPState {} + +class OTPLoaded extends OTPState {} + +class OTPFailed extends OTPState { + final String failedmessage; + + OTPFailed(this.failedmessage); +} +class OTPError extends OTPState { + final String errormessage; + + OTPError(this.errormessage); +} diff --git a/lib/features/OTP/bloc/OTP_bloc.dart b/lib/features/OTP/bloc/OTP_bloc.dart new file mode 100644 index 0000000..ede3651 --- /dev/null +++ b/lib/features/OTP/bloc/OTP_bloc.dart @@ -0,0 +1,48 @@ +import 'package:bloc/bloc.dart'; +import 'package:tanami_app/features/OTP/bloc/OTPStateEvent.dart'; + +import '../../../Api_Helper/base_manager.dart'; +import '../Repository/OTP_API.dart'; + +class OTPBloc extends Bloc { + OTPBloc() : super (OTPInitial()) { + on(RequestOTPCall); + // on(VerifyOTPCall); + } + Future RequestOTPCall(RequestOTP event, Emitter emit) async { + if (event is RequestOTP) { + emit(OTPLoading()); + final otprequestdata = event.OTPRequestData; + + try { + ResponseData response = await OTPAPI().RequestOTP(otprequestdata); + if (response.status == ResponseStatus.SUCCESS) { + emit(OTPLoaded()); + } else { + emit(OTPFailed("Oops something went wrong")); + } + print("//"); + } catch (e) { + emit(OTPError("Oops something went wrong")); + } + } + } + + /* Future VerifyOTPCall( + GetCountry event, Emitter emit) async { + if (event is GetCountry) { + emit(CountryLoading()); + try { + ResponseData response = await GetCountryAPI().getcountryAPI(); + if (response.status == ResponseStatus.SUCCESS) { + GetCountryModel countryModel = + GetCountryModel.fromJson(response.data); + emit(CountryLoaded(countryModel)); + } + print("//"); + } catch (e) { + emit(CountryError("Oops Something went wrong")); + } + } + } */ +} diff --git a/lib/features/countrySelection/presentation/pages/choose_country_layout.dart b/lib/features/countrySelection/presentation/pages/choose_country_layout.dart index 86eeb7b..a37d19b 100644 --- a/lib/features/countrySelection/presentation/pages/choose_country_layout.dart +++ b/lib/features/countrySelection/presentation/pages/choose_country_layout.dart @@ -27,6 +27,7 @@ class ChooseCountryLayout extends StatelessWidget { child: ButtonWidget().elevatedBtn( txtClr: AppColor.plainWhite, function: () { + print("//"); goRouter.pop(); }, text: localizations.translate(AppText.confirmSelectionText), diff --git a/lib/features/countrySelection/presentation/widgets/country_selection_list.dart b/lib/features/countrySelection/presentation/widgets/country_selection_list.dart index 6330367..9887941 100644 --- a/lib/features/countrySelection/presentation/widgets/country_selection_list.dart +++ b/lib/features/countrySelection/presentation/widgets/country_selection_list.dart @@ -1,5 +1,7 @@ +import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:gap/gap.dart'; import 'package:tanami_app/core/styles/app_color.dart'; import 'package:tanami_app/core/utils/constant/country_flag_data.dart'; @@ -7,6 +9,7 @@ import 'package:tanami_app/features/countrySelection/bloc/GetCountry/getcountry_ import 'package:tanami_app/features/countrySelection/bloc/GetCountry/getcountryevent_bloc.dart'; import 'package:tanami_app/shared/components/text_widget.dart'; +import '../../../../shared/api/api_endpoints.dart'; import '../../bloc/choose_country_bloc.dart'; import '../../bloc/choose_country_event.dart'; import '../../bloc/choose_country_state.dart'; @@ -46,15 +49,39 @@ class CountrySelectionList extends StatelessWidget { itemCount: state.countryModel.data?.length ?? 0, itemBuilder: (context, index) { var country = state.countryModel.data![index]; + print("${ApiEndpoints.base}${country.flagIcon}"); return ListTile( title: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ - Image.asset( + Container( + height: 24.h, + width: 24.w, + child: ClipRRect( + borderRadius: BorderRadius.all(Radius.circular(100)), + child: CachedNetworkImage( + maxHeightDiskCache: 200, + maxWidthDiskCache: 200, + cacheKey: country.countryName, + key: UniqueKey(), + imageUrl: "${ApiEndpoints.base}${country.flagIcon}", + height: 24.h, + width: 24.w, + placeholder: (context, url) => Container( + height: 24.h, + width: 24.w, + child: CircularProgressIndicator(), + ), + errorWidget: (context, url, error) => + Icon(Icons.error), + fit: BoxFit.cover), + ), + ), + /* Image.asset( countryFlag[index], width: 24, height: 24, - ), + ), */ const Gap(10), TextWidget().text14W500(country.countryName.toString(), clr: AppColor.charcoalColor), diff --git a/lib/features/otpVerification/presentation/bloc/otp_bloc.dart b/lib/features/otpVerification/presentation/bloc/otp_bloc.dart index 021580b..c26a9dd 100644 --- a/lib/features/otpVerification/presentation/bloc/otp_bloc.dart +++ b/lib/features/otpVerification/presentation/bloc/otp_bloc.dart @@ -2,6 +2,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:sms_autofill/sms_autofill.dart'; +import 'package:tanami_app/Api_Helper/base_manager.dart'; +import 'package:tanami_app/Globalconst.dart'; +import '../../../OTP/Repository/OTP_API.dart'; import 'otp_event.dart'; import 'otp_state.dart'; @@ -28,9 +31,14 @@ class OtpBloc extends Bloc { void _onOtpSubmit(OtpSubmit event, Emitter emit) async { emit(OtpSubmitting()); try { + Map otpdata= { + "token":Globalconst.token, + "otp":otpController.text + }; + ResponseData response= await OTPAPI().VerifyOTP(otpdata); // Add your OTP verification logic here - await Future.delayed(const Duration(seconds: 2)); - if (otpController.text == "123456") { + // await Future.delayed(const Duration(seconds: 2)); + if (response.status==ResponseStatus.SUCCESS) { emit(OtpSubmissionSuccess()); } else { emit(const OtpSubmissionFailure("Otp Invalid !")); diff --git a/lib/features/otpVerification/presentation/pages/otp_screen.dart b/lib/features/otpVerification/presentation/pages/otp_screen.dart index de03fb2..bb89f72 100644 --- a/lib/features/otpVerification/presentation/pages/otp_screen.dart +++ b/lib/features/otpVerification/presentation/pages/otp_screen.dart @@ -4,12 +4,14 @@ import 'package:tanami_app/features/otpVerification/presentation/bloc/otp_bloc.d import 'package:tanami_app/features/otpVerification/presentation/pages/otp_layout.dart'; import '../../../../core/styles/app_color.dart'; +import '../../../register/presentation/bloc/register_bloc.dart'; import '../bloc/otp_event.dart'; import '../bloc/timer/timer_bloc.dart'; import '../bloc/timer/timer_event.dart'; class OtpScreen extends StatelessWidget { final String fromScreen; + const OtpScreen({ super.key, required this.fromScreen, @@ -20,7 +22,7 @@ class OtpScreen extends StatelessWidget { return Scaffold( backgroundColor: AppColor.plainWhite, resizeToAvoidBottomInset: true, - body: MultiBlocProvider( + body: MultiBlocProvider( providers: [ BlocProvider( // Create an instance of the OnboardingBloc @@ -30,6 +32,11 @@ class OtpScreen extends StatelessWidget { create: (context) => TimerBloc()..add(StartTimer()), // Start the timer here ), + //RegisterBloc + BlocProvider( + create: (context) => + RegisterBloc(), // Start the timer here + ), ], child: OtpLayout(fromScreen: fromScreen), ), diff --git a/lib/features/otpVerification/presentation/widgets/resend_otp_section.dart b/lib/features/otpVerification/presentation/widgets/resend_otp_section.dart index 4a50174..fe6b195 100644 --- a/lib/features/otpVerification/presentation/widgets/resend_otp_section.dart +++ b/lib/features/otpVerification/presentation/widgets/resend_otp_section.dart @@ -1,11 +1,19 @@ + import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:tanami_app/core/styles/app_color.dart'; import 'package:tanami_app/core/styles/app_text.dart'; import 'package:tanami_app/shared/components/text_widget.dart'; import 'package:tanami_app/shared/components/toast_message.dart'; +import '../../../../Globalconst.dart'; +import '../../../../core/routes/routes.dart'; import '../../../../core/utils/language/localizations_delegate.dart'; +import '../../../../shared/components/loader.dart'; +import '../../../register/presentation/bloc/register_bloc.dart'; +import '../../../register/presentation/bloc/register_event.dart'; +import '../../../register/presentation/bloc/register_state.dart'; import '../bloc/timer/timer_bloc.dart'; import '../bloc/timer/timer_state.dart'; @@ -14,6 +22,11 @@ class ResendOtpSection extends StatelessWidget { @override Widget build(BuildContext context) { + String token = ""; + var loginBloc = context.read(); + loginBloc.isdcode=Globalconst.isdcode; + loginBloc.phoneNumberTextField.text=Globalconst.phonenumber; + loginBloc.countrySelectionTextField.text=Globalconst.name; var localizations = AppLocalizations.of(context); return BlocBuilder( builder: (context, state) { @@ -26,16 +39,68 @@ class ResendOtpSection extends StatelessWidget { state.formattedDuration, clr: AppColor.plainBlack, ), - GestureDetector( + BlocConsumer( + listener: (context, state) { + print(loginBloc.state); + if (state is RegisterLoading) { + Loader.loader(context); + } else if (state is RegisterSuccess) { + successToastMessage(context, "OTP Resend Sucessfully !"); + goRouter.pop(); + } else if (state is RegisterFailure) { + goRouter.pop(); + errorToastMessage( + context, + state.error, + ); + } + }, + builder: (context, state) { + bool isButtonEnabled = false; + + if (state is RegisterFieldsState) { + isButtonEnabled = state.areFieldsFilled; + } else if (state is RegisterSuccess || + state is RegisterFailure) { + isButtonEnabled = true; + } + return GestureDetector( + onTap: () { + loginBloc.add( + Resendotp(Globalconst.token), + ); + print("///"); + + // successToastMessage(context, "OTP Resend Sucessfully !"); + }, + child: TextWidget().text14W500( + localizations.translate(AppText.resendSms), + clr: isButtonEnabled + ? AppColor.plainBlack + : AppColor.indicatorInactiveColor, + textDecoration: TextDecoration.underline, + ), + ); + }, + ), + /* GestureDetector( onTap: () { - successToastMessage(context, "OTP Resend Sucessfully !"); + regbloc.add( + RegisterSubmitted( + loginBloc.phoneNumberTextField.text, + loginBloc.countrySelectionTextField.text, + loginBloc.isdcode + ), + ); + print("///"); + // successToastMessage(context, "OTP Resend Sucessfully !"); }, child: TextWidget().text14W500( localizations.translate(AppText.resendSms), clr: AppColor.plainBlack, textDecoration: TextDecoration.underline, ), - ) + ) */ ], ), ); diff --git a/lib/features/register/presentation/bloc/register_bloc.dart b/lib/features/register/presentation/bloc/register_bloc.dart index 7811fe6..82f63bb 100644 --- a/lib/features/register/presentation/bloc/register_bloc.dart +++ b/lib/features/register/presentation/bloc/register_bloc.dart @@ -1,5 +1,8 @@ import 'package:bloc/bloc.dart'; import 'package:flutter/material.dart'; +import '../../../../Api_Helper/base_manager.dart'; +import '../../../../Globalconst.dart'; +import '../../../OTP/Repository/OTP_API.dart'; import 'register_event.dart'; import 'register_state.dart'; @@ -7,6 +10,7 @@ class RegisterBloc extends Bloc { final GlobalKey formKey = GlobalKey(); final TextEditingController countrySelectionTextField = TextEditingController(); + String isdcode=""; final TextEditingController phoneNumberTextField = TextEditingController(); GlobalKey getFormKey() { @@ -15,7 +19,6 @@ class RegisterBloc extends Bloc { RegisterBloc() : super(RegisterInitial()) { phoneNumberTextField.addListener(_onFormFieldChanged); - countrySelectionTextField.addListener(_onFormFieldChanged); on(_onLoginFormChanged); on((event, emit) async { @@ -24,16 +27,40 @@ class RegisterBloc extends Bloc { } emit(RegisterLoading()); try { - // Simulate API call - await Future.delayed(const Duration(seconds: 2)); - // Replace the next line with actual API call - final isSuccess = - await _mockLoginApi(event.phoneNumber, event.countryResidence); - if (isSuccess) { - emit(RegisterSuccess()); + Map requestdata={ + "isdCode":event.isdcode, + "phoneNumber":event.phoneNumber + }; + ResponseData response = await OTPAPI().RequestOTP(requestdata); + if (response.status == ResponseStatus.SUCCESS) { + print("///////success"); + var data=response.data["data"]; + String token=data["token"]; + Globalconst.token=token; + emit(RegisterSuccess(token));//emit(OTPLoaded()); } else { emit(const RegisterFailure( "Register failed. Please check your credentials.")); + //emit(OTPFailed("Oops something went wrong")); + } + } catch (e) { + emit(RegisterFailure(e.toString())); + } + }); + + on((event, emit) async { + emit(RegisterLoading()); + try { + Map requestdata={ + "token":Globalconst.token, + }; + ResponseData response = await OTPAPI().ResendOTPRequest(requestdata); + if (response.status == ResponseStatus.SUCCESS) { + emit(RegisterSuccess(event.token));//emit(OTPLoaded()); + } else { + emit(const RegisterFailure( + "Register failed. Please check your credentials.")); + //emit(OTPFailed("Oops something went wrong")); } } catch (e) { emit(RegisterFailure(e.toString())); diff --git a/lib/features/register/presentation/bloc/register_event.dart b/lib/features/register/presentation/bloc/register_event.dart index 2481914..a826600 100644 --- a/lib/features/register/presentation/bloc/register_event.dart +++ b/lib/features/register/presentation/bloc/register_event.dart @@ -9,18 +9,32 @@ abstract class RegisterEvent extends Equatable { class RegisterSubmitted extends RegisterEvent { final String phoneNumber; - final String countryResidence; + final String isdcode; const RegisterSubmitted( this.phoneNumber, this.countryResidence, + this.isdcode ); @override List get props => [phoneNumber, countryResidence]; } +class Resendotp extends RegisterEvent { + final String token; + + + const Resendotp( + this.token, + + ); + + @override + List get props => [token]; +} + class RegisterFormChanged extends RegisterEvent { final String phoneNumber; final String country; diff --git a/lib/features/register/presentation/bloc/register_state.dart b/lib/features/register/presentation/bloc/register_state.dart index 8f23bcb..04ab37a 100644 --- a/lib/features/register/presentation/bloc/register_state.dart +++ b/lib/features/register/presentation/bloc/register_state.dart @@ -11,7 +11,14 @@ class RegisterInitial extends RegisterState {} class RegisterLoading extends RegisterState {} -class RegisterSuccess extends RegisterState {} +class RegisterSuccess extends RegisterState { + final String token; + + const RegisterSuccess(this.token); + @override + List get props => [token]; + +} class RegisterFailure extends RegisterState { final String error; diff --git a/lib/features/register/presentation/widgets/register_bottom_section.dart b/lib/features/register/presentation/widgets/register_bottom_section.dart index a678fd4..c88b474 100644 --- a/lib/features/register/presentation/widgets/register_bottom_section.dart +++ b/lib/features/register/presentation/widgets/register_bottom_section.dart @@ -7,6 +7,7 @@ import 'package:tanami_app/core/styles/app_images.dart'; import 'package:tanami_app/shared/components/loader.dart'; import 'package:tanami_app/shared/components/toast_message.dart'; +import '../../../../Globalconst.dart'; import '../../../../core/routes/route_name.dart'; import '../../../../core/routes/routes.dart'; import '../../../../core/styles/app_color.dart'; @@ -25,6 +26,8 @@ class RegisterBottomSection extends StatelessWidget { Widget build(BuildContext context) { var localizations = AppLocalizations.of(context); final radioBloc = context.read(); + final loginBloc = context.read(); + return Column( children: [ const Gap(90), @@ -34,8 +37,9 @@ class RegisterBottomSection extends StatelessWidget { height: 12, ), const Gap(36), - BlocConsumer( + BlocConsumer( listener: (context, state) { + print(loginBloc.state); if (state is RegisterLoading) { Loader.loader(context); } else if (state is RegisterSuccess) { @@ -44,6 +48,7 @@ class RegisterBottomSection extends StatelessWidget { goRouter.pushNamed(RouteName.otpScreen, pathParameters: {"fromScreen": "register"}); + } else if (state is RegisterFailure) { goRouter.pop(); errorToastMessage( @@ -70,14 +75,15 @@ class RegisterBottomSection extends StatelessWidget { ? AppColor.plainWhite : AppColor.inactiveBtnTxtColor, function: () { + Globalconst.phonenumber=loginBloc.phoneNumberTextField.text; + isButtonEnabled ? context.read().add( RegisterSubmitted( - context - .read() - .phoneNumberTextField - .text, - ""), + loginBloc.phoneNumberTextField.text, + loginBloc.countrySelectionTextField.text, + loginBloc.isdcode + ), ) : null; }, diff --git a/lib/features/register/presentation/widgets/register_form.dart b/lib/features/register/presentation/widgets/register_form.dart index e93007a..5af77bb 100644 --- a/lib/features/register/presentation/widgets/register_form.dart +++ b/lib/features/register/presentation/widgets/register_form.dart @@ -1,11 +1,16 @@ +import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:gap/gap.dart'; import 'package:tanami_app/core/styles/app_text.dart'; -import 'package:tanami_app/core/utils/constant/country_flag_data.dart'; +import 'package:tanami_app/features/countrySelection/bloc/GetCountry/getcountryevent_bloc.dart'; +import '../../../../Globalconst.dart'; import '../../../../core/utils/language/localizations_delegate.dart'; +import '../../../../shared/api/api_endpoints.dart'; import '../../../../shared/components/form_label_textfield.dart'; +import '../../../countrySelection/bloc/GetCountry/getcountry_bloc.dart'; import '../../../countrySelection/bloc/choose_country_bloc.dart'; import '../../../countrySelection/bloc/choose_country_state.dart'; import '../bloc/register_bloc.dart'; @@ -17,13 +22,29 @@ class RegisterForm extends StatelessWidget { Widget build(BuildContext context) { var localizations = AppLocalizations.of(context); final loginBloc = context.read(); + final countrydata = context.read(); int selectedCountry = -1; + String flag = ""; return BlocConsumer(listener: (context, state) { if (state is RadioSelectionChanged) { selectedCountry = state.selectedIndex; - loginBloc.countrySelectionTextField.text = countryName[selectedCountry]; - loginBloc.phoneNumberTextField.text = - "${isoCountryCode[selectedCountry]} "; + final countryState = countrydata.state; + if (countryState is CountryLoaded) { + loginBloc.countrySelectionTextField.text = countryState + .countryModel.data![selectedCountry].countryName + .toString(); + loginBloc.phoneNumberTextField.text = + "${countryState.countryModel.data![selectedCountry].isdCode}"; + loginBloc.isdcode="${countryState.countryModel.data![selectedCountry].isdCode}"; + flag = + "${ApiEndpoints.base}${countryState.countryModel.data![selectedCountry].flagIcon}"; + Globalconst.phonenumber=loginBloc.phoneNumberTextField.text; + + Globalconst.name=countryState + .countryModel.data![selectedCountry].countryName + .toString(); + Globalconst.isdcode="${countryState.countryModel.data![selectedCountry].isdCode}"; + } } }, builder: (context, state) { if (state is RadioSelectionChanged) { @@ -46,11 +67,46 @@ class RegisterForm extends StatelessWidget { FormLabelTextField( prefixWidget: selectedCountry == -1 ? null - : Image.asset( + : Padding( + padding: EdgeInsets.only(left: 12.w), + child: SizedBox( + height: 50.h, + width: 30.w, + child: Align( + alignment: Alignment.centerLeft, + child: SizedBox( + height: 30.h, + width: 30.w, + child: ClipRRect( + borderRadius: + BorderRadius.all(Radius.circular(100)), + child: CachedNetworkImage( + maxHeightDiskCache: 200, + maxWidthDiskCache: 200, + cacheKey: loginBloc + .countrySelectionTextField.text, + key: UniqueKey(), + imageUrl: flag, + height: 30.h, + width: 30.w, + placeholder: (context, url) => Container( + height: 30.h, + width: 30.w, + child: CircularProgressIndicator(), + ), + errorWidget: (context, url, error) => + Icon(Icons.error), + fit: BoxFit.cover), + ), + ), + ), + ), + ), + /* Image.asset( countryFlag[selectedCountry], width: 20, height: 20, - ), + ), */ hintText: localizations.translate(AppText.chooseCountry), title: localizations.translate(AppText.countryOfResidence), type: "country selection", @@ -58,13 +114,47 @@ class RegisterForm extends StatelessWidget { ), const Gap(20), FormLabelTextField( - prefixWidget: selectedCountry == -1 + prefixWidget: selectedCountry == -1 ||flag.isEmpty ? null - : Image.asset( + : Padding( + padding: EdgeInsets.only(left: 12.w), + child: SizedBox( + height: 50.h, + width: 30.w, + child: Align( + alignment: Alignment.centerLeft, + child: SizedBox( + height: 30.h, + width: 30.w, + child: ClipRRect( + borderRadius: + BorderRadius.all(Radius.circular(100)), + child: CachedNetworkImage( + maxHeightDiskCache: 200, + maxWidthDiskCache: 200, + cacheKey: loginBloc + .countrySelectionTextField.text, + key: UniqueKey(), + imageUrl: flag, + height: 30.h, + width: 30.w, + placeholder: (context, url) => Container( + height: 30.h, + width: 30.w, + child: CircularProgressIndicator(), + ), + errorWidget: (context, url, error) => + Icon(Icons.error), + fit: BoxFit.cover), + ), + ), + ), + ), + ),/* Image.asset( countryFlag[selectedCountry], width: 20, height: 20, - ), + ), */ hintText: "+0 (000) 000 00 00", title: localizations.translate(AppText.phoneNumber), type: "phone number", diff --git a/lib/main.dart b/lib/main.dart index f486a07..9818507 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -9,10 +9,16 @@ import 'core/routes/routes.dart'; import 'core/utils/connectivity/network_connectivity.dart'; import 'core/utils/language/localizations_delegate.dart'; import 'core/utils/secure/secure_storage_service.dart'; +import 'features/OTP/bloc/OTP_bloc.dart'; import 'features/biometric/presentation/bloc/biometric_bloc.dart'; import 'features/biometric/presentation/bloc/biometric_event.dart'; import 'features/countrySelection/bloc/GetCountry/getcountry_bloc.dart'; import 'features/countrySelection/bloc/choose_country_bloc.dart'; +import 'features/otpVerification/presentation/bloc/otp_bloc.dart'; +import 'features/otpVerification/presentation/bloc/otp_event.dart'; +import 'features/otpVerification/presentation/bloc/timer/timer_bloc.dart'; +import 'features/otpVerification/presentation/bloc/timer/timer_event.dart'; +import 'features/register/presentation/bloc/register_bloc.dart'; import 'shared/components/bloc/bottom_nav_bar/bottom_navigation_bloc.dart'; import 'shared/components/bloc/language/lng_bloc.dart'; import 'shared/components/bloc/language/lng_event.dart'; @@ -105,6 +111,10 @@ class _MyAppState extends State with WidgetsBindingObserver { BlocProvider( create: (_) => GetCountryBlock(), ), + BlocProvider( + create: (_) => OTPBloc(), + ), + ], child: ScreenUtilInit( builder: (BuildContext context, Widget? child) => diff --git a/lib/shared/api/api_endpoints.dart b/lib/shared/api/api_endpoints.dart index 800a206..bca8cc1 100644 --- a/lib/shared/api/api_endpoints.dart +++ b/lib/shared/api/api_endpoints.dart @@ -1,6 +1,10 @@ class ApiEndpoints { + static const base="https://tanami.betadelivery.com/"; static const baseurl = "https://tanami.betadelivery.com/api/development/v1/"; //App Base url static const getcountryurl = baseurl + "country/getAllCountry"; + static const requestotpapi=baseurl +"auth/public/register"; + static const requestresendotp=baseurl+"auth/public/resend-otp"; + static const verifyotp=baseurl+"auth/public/verify-otp"; } diff --git a/lib/shared/api/network_api_services.dart b/lib/shared/api/network_api_services.dart index b3a486a..7382fc3 100644 --- a/lib/shared/api/network_api_services.dart +++ b/lib/shared/api/network_api_services.dart @@ -37,11 +37,30 @@ class NetworkApiService { } // Common function for POST requests - Future post(String url, dynamic data) async { + Future post(String url, dynamic data) async { + if (kDebugMode) { + print("data >>> $data"); + print("api url is >>> $url"); + } try { - return await _dio.post(url, data: data); + var response= await _dio.post(url, data: data); + if (response.statusCode == 201 || response.statusCode == 200) { + return ResponseData("success", ResponseStatus.SUCCESS, + data: response.data); + }else { + try { + return ResponseData( + response.data['message'].toString(), ResponseStatus.FAILED); + } catch (_) { + return ResponseData( + data: response.data, + response.statusMessage!, + ResponseStatus.FAILED); + }} } catch (e) { - throw _handleError(e); + return ResponseData( + "Oops something went wrong", + ResponseStatus.FAILED); } }