Added logic for gender

This commit is contained in:
2023-12-25 15:35:13 +03:00
parent f0ee09dfc8
commit bf5406fec8
6 changed files with 93 additions and 51 deletions

View File

@@ -9,10 +9,30 @@ part 'gender_state.dart';
class GenderBloc extends Bloc<GenderEvent, GenderState> {
GenderBloc(GenderState initialState) : super(initialState) {
on<GenderInitialEvent>(_onInitialize);
on<GenderSelectEvent>(_GenderSelect);
}
_onInitialize(
GenderInitialEvent event,
Emitter<GenderState> emit,
) async {}
) async {
emit(state.copyWith(genderModelObj: state.genderModelObj));
}
_GenderSelect(
GenderSelectEvent event,
Emitter<GenderState> 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);
*/
}
}

View File

@@ -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<Object?> get props => [];
}
class GenderSelectEvent extends GenderEvent {
GenderSelectEvent({required this.value});
String value;
@override
List<Object?> get props => [
value,
];
}

View File

@@ -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<Object?> get props => [
selectedRadioValue,
genderModelObj,
];
GenderState copyWith({GenderModel? genderModelObj}) {
GenderState copyWith({
String? selectedRadioValue,
GenderModel? genderModelObj,
}) {
return GenderState(
selectedRadioValue: selectedRadioValue ?? this.selectedRadioValue,
genderModelObj: genderModelObj ?? this.genderModelObj,
);
}

View File

@@ -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<GenderBloc>(
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<GenderScreen> {
Gender? _gender;
@override
Widget build(BuildContext context) {
String gender = 'female';
mediaQueryData = MediaQuery.of(context);
return BlocBuilder<GenderBloc, GenderState>(builder: (context, state) {
return SafeArea(
@@ -60,45 +62,51 @@ class _GenderScreenState extends State<GenderScreen> {
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<GenderBloc>(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<GenderBloc>(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<GenderBloc, GenderState>(
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<GenderScreen> {
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<GenderScreen> {
onTapArrowLeft(BuildContext context) {
NavigatorService.goBack();
}
/// Navigates to the dateOfBirthScreen when the action is triggered.
navigateToDate(BuildContext context) {
NavigatorService.pushNamed(
AppRoutes.dateOfBirthScreen,
);
}
}

View File

@@ -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<Object?> get props => [];
List<Object?> get props => [userRegistrationSheet];
}

View File

@@ -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<NameScreen> createState() => _NameScreenState();
}
class _NameScreenState extends State<NameScreen> {
@override
Widget build(BuildContext context) {
mediaQueryData = MediaQuery.of(context);