forked from eatvio/eatvio_app
Added logic for gender
This commit is contained in:
@@ -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);
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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];
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user