From 2345ce849616e3d0b8acc02c6b503788a7a40bf6 Mon Sep 17 00:00:00 2001 From: jayesh Date: Fri, 12 Jul 2024 09:14:15 +0530 Subject: [PATCH] changes --- lib/core/routes/routes.dart | 4 +- .../pages/deposit/deposit_layout.dart | 176 +++++++++--------- ...walletDetails.dart => wallet_details.dart} | 0 ...awalScreen.dart => withdrawal_screen.dart} | 0 lib/features/OTP/bloc/OTPStateEvent.dart | 37 ---- .../bloc/GetCountry/get_country_bloc.dart | 27 +++ .../bloc/GetCountry/get_country_event.dart | 9 + ...event_bloc.dart => get_country_state.dart} | 16 +- .../bloc/GetCountry/getcountry_bloc.dart | 30 --- ...ntry_model.dart => get_country_model.dart} | 33 ++-- .../repositories/get_country_api.dart} | 0 .../widgets/country_selection_list.dart | 31 +-- .../bloc/otp_bloc.dart} | 35 ++-- .../otpVerification/bloc/otp_event.dart | 17 ++ .../otpVerification/bloc/otp_state.dart | 19 ++ .../domain/Repository/otp_api.dart} | 13 +- .../presentation/bloc/otp_bloc.dart | 15 +- .../widgets/resend_otp_section.dart | 20 +- .../presentation/bloc/register_bloc.dart | 31 +-- .../presentation/widgets/register_form.dart | 55 +++--- .../widgets/login_signup_button.dart | 6 +- lib/main.dart | 10 +- lib/shared/api/api_endpoints.dart | 10 +- 23 files changed, 292 insertions(+), 302 deletions(-) rename lib/features/MainScreens/Wallet/presentation/pages/{walletDetails.dart => wallet_details.dart} (100%) rename lib/features/MainScreens/Wallet/presentation/pages/withdrawal/{withdrawalScreen.dart => withdrawal_screen.dart} (100%) delete mode 100644 lib/features/OTP/bloc/OTPStateEvent.dart create mode 100644 lib/features/countrySelection/bloc/GetCountry/get_country_bloc.dart create mode 100644 lib/features/countrySelection/bloc/GetCountry/get_country_event.dart rename lib/features/countrySelection/bloc/GetCountry/{getcountryevent_bloc.dart => get_country_state.dart} (64%) delete mode 100644 lib/features/countrySelection/bloc/GetCountry/getcountry_bloc.dart rename lib/features/countrySelection/domain/model/{GetCountry_model.dart => get_country_model.dart} (64%) rename lib/features/countrySelection/{bloc/GetCountry/GetCountryAPI.dart => domain/repositories/get_country_api.dart} (100%) rename lib/features/{OTP/bloc/OTP_bloc.dart => otpVerification/bloc/otp_bloc.dart} (52%) create mode 100644 lib/features/otpVerification/bloc/otp_event.dart create mode 100644 lib/features/otpVerification/bloc/otp_state.dart rename lib/features/{OTP/Repository/OTP_API.dart => otpVerification/domain/Repository/otp_api.dart} (55%) diff --git a/lib/core/routes/routes.dart b/lib/core/routes/routes.dart index d5a3fbc..3b439e2 100644 --- a/lib/core/routes/routes.dart +++ b/lib/core/routes/routes.dart @@ -12,10 +12,10 @@ import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/deposi import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/deposit/preview.dart'; import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/deposit/select_deposit_method_screen.dart'; import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/filter_screen.dart'; -import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/walletDetails.dart'; +import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/wallet_details.dart'; import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/withdrawal/confirmation.dart'; import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/withdrawal/preview.dart'; -import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/withdrawal/withdrawalScreen.dart'; +import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/withdrawal/withdrawal_screen.dart'; import 'package:tanami_app/features/biometric/presentation/pages/biometric_screen.dart'; import 'package:tanami_app/features/changePassword/presentation/pages/change_password_screen.dart'; import 'package:tanami_app/features/contactAdmin/presentation/pages/contact_admin_screen.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 3167de3..c1ce836 100644 --- a/lib/features/MainScreens/Wallet/presentation/pages/deposit/deposit_layout.dart +++ b/lib/features/MainScreens/Wallet/presentation/pages/deposit/deposit_layout.dart @@ -169,106 +169,100 @@ class DepositLayout extends StatelessWidget { ], ), ), - Container( - // decoration: BoxDecoration( - // color: const Color(0xFFD8D8D8).withOpacity(0.4), - // ), - child: Padding( - padding: const EdgeInsets.symmetric( - vertical: 16.0, horizontal: 12.0), - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Text( - 'SAR', + Padding( + padding: const EdgeInsets.symmetric( + vertical: 16.0, horizontal: 12.0), + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + 'SAR', + style: GoogleFonts.dmSans( + color: const Color(0xFF363636), + fontSize: 15.sp, + fontWeight: FontWeight.w400, + ), + ), + SizedBox( + width: 12.w, + ), + SizedBox( + width: 280.w, + child: TextFormField( + inputFormatters: [ + CommaTextInputFormatter(), + FilteringTextInputFormatter.deny( + RegExp(r'\s')), + LengthLimitingTextInputFormatter(20), + ], + validator: (value) { + if (depositPaymentBloc + .amountController.text.isEmpty) { + return localizations.translate( + AppText.pleaseEnterAmountText); + } + return null; + }, + onChanged: (value) { + depositPaymentBloc + .add(FormTextChanged(text: value)); + }, + controller: depositPaymentBloc.amountController, + cursorColor: Colors.black, + keyboardType: TextInputType.number, + textAlign: TextAlign.center, style: GoogleFonts.dmSans( - color: const Color(0xFF363636), - fontSize: 15.sp, + color: Colors.black, + fontSize: 16.sp, fontWeight: FontWeight.w400, ), - ), - SizedBox( - width: 12.w, - ), - SizedBox( - width: 280.w, - child: TextFormField( - inputFormatters: [ - CommaTextInputFormatter(), - FilteringTextInputFormatter.deny( - RegExp(r'\s')), - LengthLimitingTextInputFormatter(20), - ], - validator: (value) { - if (depositPaymentBloc - .amountController.text.isEmpty) { - return localizations.translate( - AppText.pleaseEnterAmountText); - } - return null; - }, - onChanged: (value) { - depositPaymentBloc - .add(FormTextChanged(text: value)); - }, - controller: - depositPaymentBloc.amountController, - cursorColor: Colors.black, - keyboardType: TextInputType.number, - textAlign: TextAlign.center, - style: GoogleFonts.dmSans( - color: Colors.black, + decoration: InputDecoration( + hintText: '1000', + hintStyle: GoogleFonts.dmSans( + color: const Color(0xFFC6C6C6), fontSize: 16.sp, fontWeight: FontWeight.w400, ), - decoration: InputDecoration( - hintText: '1000', - hintStyle: GoogleFonts.dmSans( - color: const Color(0xFFC6C6C6), - fontSize: 16.sp, - fontWeight: FontWeight.w400, - ), - labelStyle: - const TextStyle(color: Colors.black), - contentPadding: const EdgeInsets.symmetric( - vertical: 15, horizontal: 10), - filled: true, - fillColor: Colors.white, - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(12), - borderSide: const BorderSide( - color: Colors.white, width: 1), - ), - enabledBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(12), - borderSide: const BorderSide( - color: Colors.white, width: 1), - ), - disabledBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(12), - borderSide: const BorderSide( - color: Colors.white, width: 1), - ), - focusedBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(12), - borderSide: const BorderSide( - color: Colors.white, width: 1), - ), - errorBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(12), - borderSide: const BorderSide( - color: Colors.red, width: 1), - ), - focusedErrorBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(12), - borderSide: const BorderSide( - color: Colors.red, width: 1), - ), + labelStyle: + const TextStyle(color: Colors.black), + contentPadding: const EdgeInsets.symmetric( + vertical: 15, horizontal: 10), + filled: true, + fillColor: Colors.white, + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: const BorderSide( + color: Colors.white, width: 1), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: const BorderSide( + color: Colors.white, width: 1), + ), + disabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: const BorderSide( + color: Colors.white, width: 1), + ), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: const BorderSide( + color: Colors.white, width: 1), + ), + errorBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: const BorderSide( + color: Colors.red, width: 1), + ), + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: const BorderSide( + color: Colors.red, width: 1), ), ), ), - ], - ), + ), + ], ), ), // Container( diff --git a/lib/features/MainScreens/Wallet/presentation/pages/walletDetails.dart b/lib/features/MainScreens/Wallet/presentation/pages/wallet_details.dart similarity index 100% rename from lib/features/MainScreens/Wallet/presentation/pages/walletDetails.dart rename to lib/features/MainScreens/Wallet/presentation/pages/wallet_details.dart diff --git a/lib/features/MainScreens/Wallet/presentation/pages/withdrawal/withdrawalScreen.dart b/lib/features/MainScreens/Wallet/presentation/pages/withdrawal/withdrawal_screen.dart similarity index 100% rename from lib/features/MainScreens/Wallet/presentation/pages/withdrawal/withdrawalScreen.dart rename to lib/features/MainScreens/Wallet/presentation/pages/withdrawal/withdrawal_screen.dart diff --git a/lib/features/OTP/bloc/OTPStateEvent.dart b/lib/features/OTP/bloc/OTPStateEvent.dart deleted file mode 100644 index 53b7f73..0000000 --- a/lib/features/OTP/bloc/OTPStateEvent.dart +++ /dev/null @@ -1,37 +0,0 @@ - -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/countrySelection/bloc/GetCountry/get_country_bloc.dart b/lib/features/countrySelection/bloc/GetCountry/get_country_bloc.dart new file mode 100644 index 0000000..cb671fd --- /dev/null +++ b/lib/features/countrySelection/bloc/GetCountry/get_country_bloc.dart @@ -0,0 +1,27 @@ +import 'package:bloc/bloc.dart'; +import 'package:tanami_app/features/countrySelection/bloc/GetCountry/get_country_event.dart'; + +import '../../../../Api_Helper/base_manager.dart'; +import '../../domain/model/get_country_model.dart'; +import '../../domain/repositories/get_country_api.dart'; +import 'get_country_state.dart'; + +class GetCountryBlock extends Bloc { + GetCountryBlock() : super(CountryInitial()) { + on(mapEventToState); + } + Future mapEventToState( + GetCountry event, Emitter emit) async { + 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/bloc/GetCountry/get_country_event.dart b/lib/features/countrySelection/bloc/GetCountry/get_country_event.dart new file mode 100644 index 0000000..f9b1eb5 --- /dev/null +++ b/lib/features/countrySelection/bloc/GetCountry/get_country_event.dart @@ -0,0 +1,9 @@ +abstract class GetCountryEvent { + const GetCountryEvent(); + + get props => []; +} + +class GetCountry extends GetCountryEvent { + GetCountry(); +} diff --git a/lib/features/countrySelection/bloc/GetCountry/getcountryevent_bloc.dart b/lib/features/countrySelection/bloc/GetCountry/get_country_state.dart similarity index 64% rename from lib/features/countrySelection/bloc/GetCountry/getcountryevent_bloc.dart rename to lib/features/countrySelection/bloc/GetCountry/get_country_state.dart index 01b4751..b7dddf1 100644 --- a/lib/features/countrySelection/bloc/GetCountry/getcountryevent_bloc.dart +++ b/lib/features/countrySelection/bloc/GetCountry/get_country_state.dart @@ -1,17 +1,7 @@ -import '../../domain/model/GetCountry_model.dart'; +import '../../domain/model/get_country_model.dart'; -abstract class GetCountryEvent { - const GetCountryEvent(); +abstract class GetCountryState {} - get props => []; -} - -class GetCountry extends GetCountryEvent { - GetCountry(); - - -} -abstract class GetCountryState{} // Define states //enum GetCountryState { initial, loading, success, failure, error } class CountryInitial extends GetCountryState {} @@ -28,4 +18,4 @@ class CountryError extends GetCountryState { final String message; CountryError(this.message); -} \ No newline at end of file +} diff --git a/lib/features/countrySelection/bloc/GetCountry/getcountry_bloc.dart b/lib/features/countrySelection/bloc/GetCountry/getcountry_bloc.dart deleted file mode 100644 index 7584cd5..0000000 --- a/lib/features/countrySelection/bloc/GetCountry/getcountry_bloc.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'package:bloc/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 'GetCountryAPI.dart'; - - -class GetCountryBlock extends Bloc { - GetCountryBlock() : super(CountryInitial()) { - on(mapEventToState); - } - Future mapEventToState( - 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/domain/model/GetCountry_model.dart b/lib/features/countrySelection/domain/model/get_country_model.dart similarity index 64% rename from lib/features/countrySelection/domain/model/GetCountry_model.dart rename to lib/features/countrySelection/domain/model/get_country_model.dart index 78638a3..d62df32 100644 --- a/lib/features/countrySelection/domain/model/GetCountry_model.dart +++ b/lib/features/countrySelection/domain/model/get_country_model.dart @@ -1,20 +1,19 @@ class GetCountryModel { List? data; - GetCountryModel({ this.data}); + GetCountryModel({this.data}); GetCountryModel.fromJson(Map json) { if (json['data'] != null) { data = []; json['data'].forEach((v) { - data!.add(new Data.fromJson(v)); + data!.add(Data.fromJson(v)); }); } - } Map toJson() { - final Map data = new Map(); + final Map data = {}; if (this.data != null) { data['data'] = this.data!.map((v) => v.toJson()).toList(); } @@ -28,10 +27,10 @@ class Data { String? countryCode; String? isdCode; String? flagIcon; - Null? currencyXid; + Null currencyXid; bool? isActive; - Null? createdBy; - Null? modifiedBy; + Null createdBy; + Null modifiedBy; Data( {this.id, @@ -57,16 +56,16 @@ class Data { } 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; + final Map data = {}; + data['id'] = id; + data['countryName'] = countryName; + data['countryCode'] = countryCode; + data['isdCode'] = isdCode; + data['flagIcon'] = flagIcon; + data['currency_xid'] = currencyXid; + data['isActive'] = isActive; + data['createdBy'] = createdBy; + data['modifiedBy'] = modifiedBy; return data; } } diff --git a/lib/features/countrySelection/bloc/GetCountry/GetCountryAPI.dart b/lib/features/countrySelection/domain/repositories/get_country_api.dart similarity index 100% rename from lib/features/countrySelection/bloc/GetCountry/GetCountryAPI.dart rename to lib/features/countrySelection/domain/repositories/get_country_api.dart diff --git a/lib/features/countrySelection/presentation/widgets/country_selection_list.dart b/lib/features/countrySelection/presentation/widgets/country_selection_list.dart index 9887941..8767478 100644 --- a/lib/features/countrySelection/presentation/widgets/country_selection_list.dart +++ b/lib/features/countrySelection/presentation/widgets/country_selection_list.dart @@ -4,12 +4,12 @@ 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'; -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/features/countrySelection/bloc/GetCountry/get_country_bloc.dart'; +import 'package:tanami_app/features/countrySelection/bloc/GetCountry/get_country_event.dart'; import 'package:tanami_app/shared/components/text_widget.dart'; import '../../../../shared/api/api_endpoints.dart'; +import '../../bloc/GetCountry/get_country_state.dart'; import '../../bloc/choose_country_bloc.dart'; import '../../bloc/choose_country_event.dart'; import '../../bloc/choose_country_state.dart'; @@ -30,11 +30,11 @@ class CountrySelectionList extends StatelessWidget { return BlocConsumer( listener: (context, state) { - if (state == CountryLoaded) { + if (state is CountryLoaded) { const SnackBar(content: Text("Successfully fetch")); - } else if (state == CountryError) { + } else if (state is CountryError) { const SnackBar(content: Text("error while fetching data")); - Future.delayed(Duration(milliseconds: 3), () { + Future.delayed(const Duration(milliseconds: 3), () { context.read().add(GetCountry()); }); } else { @@ -43,7 +43,7 @@ class CountrySelectionList extends StatelessWidget { }, builder: (context, state) { print(state); if (state is CountryLoading) { - return Center(child: CircularProgressIndicator()); + return const Center(child: CircularProgressIndicator()); } else if (state is CountryLoaded) { return ListView.builder( itemCount: state.countryModel.data?.length ?? 0, @@ -54,26 +54,28 @@ class CountrySelectionList extends StatelessWidget { title: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ - Container( + SizedBox( height: 24.h, width: 24.w, child: ClipRRect( - borderRadius: BorderRadius.all(Radius.circular(100)), + borderRadius: + const BorderRadius.all(Radius.circular(100)), child: CachedNetworkImage( maxHeightDiskCache: 200, maxWidthDiskCache: 200, cacheKey: country.countryName, key: UniqueKey(), - imageUrl: "${ApiEndpoints.base}${country.flagIcon}", + imageUrl: + "${ApiEndpoints.base}${country.flagIcon}", height: 24.h, width: 24.w, - placeholder: (context, url) => Container( + placeholder: (context, url) => SizedBox( height: 24.h, width: 24.w, - child: CircularProgressIndicator(), + child: const CircularProgressIndicator(), ), errorWidget: (context, url, error) => - Icon(Icons.error), + const Icon(Icons.error), fit: BoxFit.cover), ), ), @@ -103,7 +105,8 @@ class CountrySelectionList extends StatelessWidget { } else if (state is CountryError) { return Center(child: Text(state.message)); } else { - return Center(child: Text('Press button to fetch country data')); + return const Center( + child: Text('Press button to fetch country data')); } }); }, diff --git a/lib/features/OTP/bloc/OTP_bloc.dart b/lib/features/otpVerification/bloc/otp_bloc.dart similarity index 52% rename from lib/features/OTP/bloc/OTP_bloc.dart rename to lib/features/otpVerification/bloc/otp_bloc.dart index ede3651..021cb28 100644 --- a/lib/features/OTP/bloc/OTP_bloc.dart +++ b/lib/features/otpVerification/bloc/otp_bloc.dart @@ -1,30 +1,29 @@ 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'; +import '../domain/Repository/otp_api.dart'; +import 'otp_event.dart'; +import 'otp_state.dart'; class OTPBloc extends Bloc { - OTPBloc() : super (OTPInitial()) { - on(RequestOTPCall); + OTPBloc() : super(OTPInitial()) { + on(requestOTPCall); // on(VerifyOTPCall); } - Future RequestOTPCall(RequestOTP event, Emitter emit) async { - if (event is RequestOTP) { - emit(OTPLoading()); - final otprequestdata = event.OTPRequestData; + Future requestOTPCall(RequestOTP event, Emitter emit) async { + 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")); + 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")); } } diff --git a/lib/features/otpVerification/bloc/otp_event.dart b/lib/features/otpVerification/bloc/otp_event.dart new file mode 100644 index 0000000..f994462 --- /dev/null +++ b/lib/features/otpVerification/bloc/otp_event.dart @@ -0,0 +1,17 @@ +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(); +} diff --git a/lib/features/otpVerification/bloc/otp_state.dart b/lib/features/otpVerification/bloc/otp_state.dart new file mode 100644 index 0000000..5d35cba --- /dev/null +++ b/lib/features/otpVerification/bloc/otp_state.dart @@ -0,0 +1,19 @@ +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/Repository/OTP_API.dart b/lib/features/otpVerification/domain/Repository/otp_api.dart similarity index 55% rename from lib/features/OTP/Repository/OTP_API.dart rename to lib/features/otpVerification/domain/Repository/otp_api.dart index e0560c2..6837ecf 100644 --- a/lib/features/OTP/Repository/OTP_API.dart +++ b/lib/features/otpVerification/domain/Repository/otp_api.dart @@ -1,21 +1,22 @@ -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 OTPAPI { OTPAPI(); - Future RequestOTP(Map data) async { + Future requestOTP(Map data) async { String url = ApiEndpoints.requestotpapi; final response = await NetworkApiService().post(url, data); return response; } - Future ResendOTPRequest(Map data) async { + + Future resendOTPRequest(Map data) async { String url = ApiEndpoints.requestresendotp; final response = await NetworkApiService().post(url, data); return response; } - Future VerifyOTP(Map data) async { + Future verifyOTP(Map data) async { String url = ApiEndpoints.verifyotp; final response = await NetworkApiService().post(url, data); return response; diff --git a/lib/features/otpVerification/presentation/bloc/otp_bloc.dart b/lib/features/otpVerification/presentation/bloc/otp_bloc.dart index c26a9dd..01ed9a9 100644 --- a/lib/features/otpVerification/presentation/bloc/otp_bloc.dart +++ b/lib/features/otpVerification/presentation/bloc/otp_bloc.dart @@ -4,7 +4,8 @@ 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 '../../domain/Repository/otp_api.dart'; import 'otp_event.dart'; import 'otp_state.dart'; @@ -31,14 +32,14 @@ class OtpBloc extends Bloc { void _onOtpSubmit(OtpSubmit event, Emitter emit) async { emit(OtpSubmitting()); try { - Map otpdata= { - "token":Globalconst.token, - "otp":otpController.text + Map otpdata = { + "token": Globalconst.token, + "otp": otpController.text }; - ResponseData response= await OTPAPI().VerifyOTP(otpdata); + ResponseData response = await OTPAPI().verifyOTP(otpdata); // Add your OTP verification logic here - // await Future.delayed(const Duration(seconds: 2)); - if (response.status==ResponseStatus.SUCCESS) { + // 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/widgets/resend_otp_section.dart b/lib/features/otpVerification/presentation/widgets/resend_otp_section.dart index fe6b195..a3028f3 100644 --- a/lib/features/otpVerification/presentation/widgets/resend_otp_section.dart +++ b/lib/features/otpVerification/presentation/widgets/resend_otp_section.dart @@ -1,7 +1,5 @@ - 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'; @@ -24,9 +22,9 @@ class ResendOtpSection extends StatelessWidget { Widget build(BuildContext context) { String token = ""; var loginBloc = context.read(); - loginBloc.isdcode=Globalconst.isdcode; - loginBloc.phoneNumberTextField.text=Globalconst.phonenumber; - loginBloc.countrySelectionTextField.text=Globalconst.name; + loginBloc.isdcode = Globalconst.isdcode; + loginBloc.phoneNumberTextField.text = Globalconst.phonenumber; + loginBloc.countrySelectionTextField.text = Globalconst.name; var localizations = AppLocalizations.of(context); return BlocBuilder( builder: (context, state) { @@ -45,14 +43,14 @@ class ResendOtpSection extends StatelessWidget { if (state is RegisterLoading) { Loader.loader(context); } else if (state is RegisterSuccess) { - successToastMessage(context, "OTP Resend Sucessfully !"); + successToastMessage(context, "OTP Resend Sucessfully !"); goRouter.pop(); } else if (state is RegisterFailure) { goRouter.pop(); errorToastMessage( - context, - state.error, - ); + context, + state.error, + ); } }, builder: (context, state) { @@ -66,11 +64,11 @@ class ResendOtpSection extends StatelessWidget { } return GestureDetector( onTap: () { - loginBloc.add( + loginBloc.add( Resendotp(Globalconst.token), ); print("///"); - + // successToastMessage(context, "OTP Resend Sucessfully !"); }, child: TextWidget().text14W500( diff --git a/lib/features/register/presentation/bloc/register_bloc.dart b/lib/features/register/presentation/bloc/register_bloc.dart index 82f63bb..7f78a49 100644 --- a/lib/features/register/presentation/bloc/register_bloc.dart +++ b/lib/features/register/presentation/bloc/register_bloc.dart @@ -1,8 +1,9 @@ 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 '../../../otpVerification/domain/Repository/otp_api.dart'; import 'register_event.dart'; import 'register_state.dart'; @@ -10,7 +11,7 @@ class RegisterBloc extends Bloc { final GlobalKey formKey = GlobalKey(); final TextEditingController countrySelectionTextField = TextEditingController(); - String isdcode=""; + String isdcode = ""; final TextEditingController phoneNumberTextField = TextEditingController(); GlobalKey getFormKey() { @@ -27,17 +28,17 @@ class RegisterBloc extends Bloc { } emit(RegisterLoading()); try { - Map requestdata={ - "isdCode":event.isdcode, - "phoneNumber":event.phoneNumber + Map requestdata = { + "isdCode": event.isdcode, + "phoneNumber": event.phoneNumber }; - ResponseData response = await OTPAPI().RequestOTP(requestdata); + 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()); + 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.")); @@ -48,15 +49,15 @@ class RegisterBloc extends Bloc { } }); - on((event, emit) async { + on((event, emit) async { emit(RegisterLoading()); try { - Map requestdata={ - "token":Globalconst.token, + Map requestdata = { + "token": Globalconst.token, }; - ResponseData response = await OTPAPI().ResendOTPRequest(requestdata); + ResponseData response = await OTPAPI().resendOTPRequest(requestdata); if (response.status == ResponseStatus.SUCCESS) { - emit(RegisterSuccess(event.token));//emit(OTPLoaded()); + emit(RegisterSuccess(event.token)); //emit(OTPLoaded()); } else { emit(const RegisterFailure( "Register failed. Please check your credentials.")); diff --git a/lib/features/register/presentation/widgets/register_form.dart b/lib/features/register/presentation/widgets/register_form.dart index 5af77bb..df56600 100644 --- a/lib/features/register/presentation/widgets/register_form.dart +++ b/lib/features/register/presentation/widgets/register_form.dart @@ -4,13 +4,13 @@ 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/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/GetCountry/get_country_bloc.dart'; +import '../../../countrySelection/bloc/GetCountry/get_country_state.dart'; import '../../../countrySelection/bloc/choose_country_bloc.dart'; import '../../../countrySelection/bloc/choose_country_state.dart'; import '../bloc/register_bloc.dart'; @@ -35,16 +35,18 @@ class RegisterForm extends StatelessWidget { .toString(); loginBloc.phoneNumberTextField.text = "${countryState.countryModel.data![selectedCountry].isdCode}"; - loginBloc.isdcode="${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.phonenumber = loginBloc.phoneNumberTextField.text; - Globalconst.name=countryState + Globalconst.name = countryState .countryModel.data![selectedCountry].countryName .toString(); - Globalconst.isdcode="${countryState.countryModel.data![selectedCountry].isdCode}"; - } + Globalconst.isdcode = + "${countryState.countryModel.data![selectedCountry].isdCode}"; + } } }, builder: (context, state) { if (state is RadioSelectionChanged) { @@ -68,8 +70,8 @@ class RegisterForm extends StatelessWidget { prefixWidget: selectedCountry == -1 ? null : Padding( - padding: EdgeInsets.only(left: 12.w), - child: SizedBox( + padding: EdgeInsets.only(left: 12.w), + child: SizedBox( height: 50.h, width: 30.w, child: Align( @@ -78,8 +80,8 @@ class RegisterForm extends StatelessWidget { height: 30.h, width: 30.w, child: ClipRRect( - borderRadius: - BorderRadius.all(Radius.circular(100)), + borderRadius: const BorderRadius.all( + Radius.circular(100)), child: CachedNetworkImage( maxHeightDiskCache: 200, maxWidthDiskCache: 200, @@ -89,19 +91,20 @@ class RegisterForm extends StatelessWidget { imageUrl: flag, height: 30.h, width: 30.w, - placeholder: (context, url) => Container( + placeholder: (context, url) => SizedBox( height: 30.h, width: 30.w, - child: CircularProgressIndicator(), + child: + const CircularProgressIndicator(), ), errorWidget: (context, url, error) => - Icon(Icons.error), + const Icon(Icons.error), fit: BoxFit.cover), ), ), ), ), - ), + ), /* Image.asset( countryFlag[selectedCountry], width: 20, @@ -114,11 +117,11 @@ class RegisterForm extends StatelessWidget { ), const Gap(20), FormLabelTextField( - prefixWidget: selectedCountry == -1 ||flag.isEmpty + prefixWidget: selectedCountry == -1 || flag.isEmpty ? null - : Padding( - padding: EdgeInsets.only(left: 12.w), - child: SizedBox( + : Padding( + padding: EdgeInsets.only(left: 12.w), + child: SizedBox( height: 50.h, width: 30.w, child: Align( @@ -127,8 +130,8 @@ class RegisterForm extends StatelessWidget { height: 30.h, width: 30.w, child: ClipRRect( - borderRadius: - BorderRadius.all(Radius.circular(100)), + borderRadius: const BorderRadius.all( + Radius.circular(100)), child: CachedNetworkImage( maxHeightDiskCache: 200, maxWidthDiskCache: 200, @@ -138,19 +141,21 @@ class RegisterForm extends StatelessWidget { imageUrl: flag, height: 30.h, width: 30.w, - placeholder: (context, url) => Container( + placeholder: (context, url) => SizedBox( height: 30.h, width: 30.w, - child: CircularProgressIndicator(), + child: + const CircularProgressIndicator(), ), errorWidget: (context, url, error) => - Icon(Icons.error), + const Icon(Icons.error), fit: BoxFit.cover), ), ), ), ), - ),/* Image.asset( + ), + /* Image.asset( countryFlag[selectedCountry], width: 20, height: 20, diff --git a/lib/features/welcome/presentation/widgets/login_signup_button.dart b/lib/features/welcome/presentation/widgets/login_signup_button.dart index bf41f12..aea6d19 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/bloc/GetCountry/getcountry_bloc.dart'; -import 'package:tanami_app/features/countrySelection/bloc/GetCountry/getcountryevent_bloc.dart'; +import 'package:tanami_app/features/countrySelection/bloc/GetCountry/get_country_bloc.dart'; +import 'package:tanami_app/features/countrySelection/bloc/GetCountry/get_country_event.dart'; import 'package:tanami_app/shared/components/button_widget.dart'; import '../../../../core/styles/app_text.dart'; @@ -31,7 +31,7 @@ class LoginSignUpButton extends StatelessWidget { height: 56.h, child: ButtonWidget().elevatedBtn( function: () { - context.read().add(GetCountry()); + context.read().add(GetCountry()); goRouter.goNamed(RouteName.registerStepScreen, pathParameters: { "fromScreentype": "welcome", }); diff --git a/lib/main.dart b/lib/main.dart index 9818507..5e73ba0 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -9,16 +9,11 @@ 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/GetCountry/get_country_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 'features/otpVerification/bloc/otp_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'; @@ -114,7 +109,6 @@ class _MyAppState extends State with WidgetsBindingObserver { 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 bca8cc1..8b00684 100644 --- a/lib/shared/api/api_endpoints.dart +++ b/lib/shared/api/api_endpoints.dart @@ -1,10 +1,10 @@ class ApiEndpoints { - static const base="https://tanami.betadelivery.com/"; + 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"; + 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"; }