From bf5406fec807527538a6fcee84667ac3cb655c4f Mon Sep 17 00:00:00 2001 From: maxxkim Date: Mon, 25 Dec 2023 15:35:13 +0300 Subject: [PATCH] Added logic for gender --- .../gender_screen/bloc/gender_bloc.dart | 22 +++++- .../gender_screen/bloc/gender_event.dart | 12 ++- .../gender_screen/bloc/gender_state.dart | 14 +++- .../gender_screen/gender_screen.dart | 77 ++++++++++--------- .../gender_screen/models/gender_model.dart | 12 ++- lib/presentation/name_screen/name_screen.dart | 7 +- 6 files changed, 93 insertions(+), 51 deletions(-) diff --git a/lib/presentation/gender_screen/bloc/gender_bloc.dart b/lib/presentation/gender_screen/bloc/gender_bloc.dart index 2d2b2618..b30f421a 100644 --- a/lib/presentation/gender_screen/bloc/gender_bloc.dart +++ b/lib/presentation/gender_screen/bloc/gender_bloc.dart @@ -9,10 +9,30 @@ part 'gender_state.dart'; class GenderBloc extends Bloc { GenderBloc(GenderState initialState) : super(initialState) { on(_onInitialize); + on(_GenderSelect); } _onInitialize( GenderInitialEvent event, Emitter emit, - ) async {} + ) async { + emit(state.copyWith(genderModelObj: state.genderModelObj)); + } + + _GenderSelect( + GenderSelectEvent event, + Emitter emit, + ) { + emit(state.copyWith(selectedRadioValue: event.value)); + state.genderModelObj?.userRegistrationSheet.gender = event.value; + /* + print(state.genderModelObj?.userRegistrationSheet.lang); + print(state.genderModelObj?.userRegistrationSheet.email); + print(state.genderModelObj?.userRegistrationSheet.password); + print(state.genderModelObj?.userRegistrationSheet.passwordConfirmation); + print(state.genderModelObj?.userRegistrationSheet.firstName); + print(state.genderModelObj?.userRegistrationSheet.lastName); + print(state.genderModelObj?.userRegistrationSheet.gender); + */ + } } diff --git a/lib/presentation/gender_screen/bloc/gender_event.dart b/lib/presentation/gender_screen/bloc/gender_event.dart index 3660a87c..f6b9f69c 100644 --- a/lib/presentation/gender_screen/bloc/gender_event.dart +++ b/lib/presentation/gender_screen/bloc/gender_event.dart @@ -9,8 +9,18 @@ part of 'gender_bloc.dart'; @immutable abstract class GenderEvent extends Equatable {} -/// Event that is dispatched when the Gender widget is first created. class GenderInitialEvent extends GenderEvent { @override List get props => []; } + +class GenderSelectEvent extends GenderEvent { + GenderSelectEvent({required this.value}); + + String value; + + @override + List get props => [ + value, + ]; +} diff --git a/lib/presentation/gender_screen/bloc/gender_state.dart b/lib/presentation/gender_screen/bloc/gender_state.dart index 16109442..996082e8 100644 --- a/lib/presentation/gender_screen/bloc/gender_state.dart +++ b/lib/presentation/gender_screen/bloc/gender_state.dart @@ -4,16 +4,26 @@ part of 'gender_bloc.dart'; /// Represents the state of Gender in the application. class GenderState extends Equatable { - GenderState({this.genderModelObj}); + GenderState({ + this.selectedRadioValue, + this.genderModelObj, + }); + + String? selectedRadioValue; GenderModel? genderModelObj; @override List get props => [ + selectedRadioValue, genderModelObj, ]; - GenderState copyWith({GenderModel? genderModelObj}) { + GenderState copyWith({ + String? selectedRadioValue, + GenderModel? genderModelObj, + }) { return GenderState( + selectedRadioValue: selectedRadioValue ?? this.selectedRadioValue, genderModelObj: genderModelObj ?? this.genderModelObj, ); } diff --git a/lib/presentation/gender_screen/gender_screen.dart b/lib/presentation/gender_screen/gender_screen.dart index 6d434934..b3e909e2 100644 --- a/lib/presentation/gender_screen/gender_screen.dart +++ b/lib/presentation/gender_screen/gender_screen.dart @@ -1,23 +1,25 @@ import 'bloc/gender_bloc.dart'; import 'models/gender_model.dart'; +import 'package:eatvio_app/data/models/userRegistrationModel/user_registration_model.dart'; import 'package:eatvio_app/core/app_export.dart'; import 'package:eatvio_app/widgets/app_bar/appbar_leading_image.dart'; import 'package:eatvio_app/widgets/app_bar/appbar_title_image.dart'; import 'package:eatvio_app/widgets/app_bar/custom_app_bar.dart'; import 'package:eatvio_app/widgets/next_step_button.dart'; -import 'package:eatvio_app/data/models/userRegistrationModel/user_registration_model.dart'; import 'package:flutter/material.dart'; -enum Gender { male, female } - class GenderScreen extends StatefulWidget { const GenderScreen({Key? key}) : super(key: key); static Widget builder(BuildContext context) { + final sheet = + ModalRoute.of(context)!.settings.arguments as UserRegistrationSheet; return BlocProvider( - create: (context) => - GenderBloc(GenderState(genderModelObj: GenderModel())) - ..add(GenderInitialEvent()), + create: (context) => GenderBloc( + GenderState( + genderModelObj: GenderModel(userRegistrationSheet: sheet), + ), + )..add(GenderInitialEvent()), child: GenderScreen()); } @@ -26,9 +28,9 @@ class GenderScreen extends StatefulWidget { } class _GenderScreenState extends State { - Gender? _gender; @override Widget build(BuildContext context) { + String gender = 'female'; mediaQueryData = MediaQuery.of(context); return BlocBuilder(builder: (context, state) { return SafeArea( @@ -60,45 +62,51 @@ class _GenderScreenState extends State { style: theme.textTheme.headlineSmall), RadioListTile( title: Text('Мужской'), - value: Gender.male, - groupValue: _gender, + value: 'male', + groupValue: state.selectedRadioValue, onChanged: (value) { - setState(() { - _gender = value as Gender?; - }); + BlocProvider.of(context) + .add(GenderSelectEvent(value: 'male')); }, secondary: Image.asset( - _gender == Gender.male - ? 'assets/images/img_male.png' - : 'assets/images/img_male.png', + 'assets/images/img_male.png', width: 40, height: 40, ), ), RadioListTile( title: Text('Женский'), - value: Gender.female, - groupValue: _gender, + value: 'female', + groupValue: state.selectedRadioValue, onChanged: (value) { - setState(() { - _gender = value as Gender?; - }); + BlocProvider.of(context) + .add(GenderSelectEvent(value: 'female')); }, secondary: Image.asset( - _gender == Gender.female - ? 'assets/images/img_female.png' - : 'assets/images/img_female.png', + 'assets/images/img_female.png', width: 40, height: 40, ), ), Spacer(flex: 66), - NextStepButton( - text: "continue".tr.toUpperCase(), - buttonStyle: CustomButtonStyles.outlinePrimaryTL15, - onPressed: () { - navigateToDate(context); - }), + BlocBuilder( + builder: (context, state) { + return NextStepButton( + text: "continue".tr.toUpperCase(), + margin: EdgeInsets.only( + left: 16.h, right: 16.h, bottom: 50.v), + buttonStyle: CustomButtonStyles.outlinePrimaryTL15, + onPressed: () { + UserRegistrationSheet sheet = + state.genderModelObj!.userRegistrationSheet; + sheet.gender = state.selectedRadioValue!; + Navigator.pushNamed( + context, + AppRoutes.dateOfBirthScreen, + arguments: sheet, + ); + }); + }), SizedBox(height: 17.v), ])))); }); @@ -112,7 +120,9 @@ class _GenderScreenState extends State { imagePath: ImageConstant.imgArrowLeft, margin: EdgeInsets.only(left: 16.h, top: 15.v, bottom: 15.v), onTap: () { - onTapArrowLeft(context); + NavigatorService.pushNamed( + AppRoutes.dateOfBirthScreen, + ); }), centerTitle: true, title: AppbarTitleImage(imagePath: ImageConstant.imgLogoEatvio)); @@ -122,11 +132,4 @@ class _GenderScreenState extends State { onTapArrowLeft(BuildContext context) { NavigatorService.goBack(); } - - /// Navigates to the dateOfBirthScreen when the action is triggered. - navigateToDate(BuildContext context) { - NavigatorService.pushNamed( - AppRoutes.dateOfBirthScreen, - ); - } } diff --git a/lib/presentation/gender_screen/models/gender_model.dart b/lib/presentation/gender_screen/models/gender_model.dart index 1ba38218..b314fba5 100644 --- a/lib/presentation/gender_screen/models/gender_model.dart +++ b/lib/presentation/gender_screen/models/gender_model.dart @@ -1,16 +1,20 @@ // ignore_for_file: must_be_immutable import 'package:equatable/equatable.dart'; +import 'package:eatvio_app/data/models/userRegistrationModel/user_registration_model.dart'; /// This class defines the variables used in the [gender_screen], /// and is typically used to hold data that is passed between different parts of the application. class GenderModel extends Equatable { - GenderModel() {} + UserRegistrationSheet userRegistrationSheet; + GenderModel({required this.userRegistrationSheet}); - GenderModel copyWith() { - return GenderModel(); + GenderModel copyWith({UserRegistrationSheet? userRegistrationSheet, gender}) { + return GenderModel( + userRegistrationSheet: + userRegistrationSheet ?? this.userRegistrationSheet); } @override - List get props => []; + List get props => [userRegistrationSheet]; } diff --git a/lib/presentation/name_screen/name_screen.dart b/lib/presentation/name_screen/name_screen.dart index 7d0eb39d..2e7bc8ab 100644 --- a/lib/presentation/name_screen/name_screen.dart +++ b/lib/presentation/name_screen/name_screen.dart @@ -9,7 +9,7 @@ import 'package:eatvio_app/data/models/userRegistrationModel/user_registration_m import 'package:eatvio_app/widgets/custom_text_form_field.dart'; import 'package:flutter/material.dart'; -class NameScreen extends StatefulWidget { +class NameScreen extends StatelessWidget { const NameScreen({Key? key}) : super(key: key); static Widget builder(BuildContext context) { @@ -24,11 +24,6 @@ class NameScreen extends StatefulWidget { child: NameScreen()); } - @override - State createState() => _NameScreenState(); -} - -class _NameScreenState extends State { @override Widget build(BuildContext context) { mediaQueryData = MediaQuery.of(context);