Added logic for NameScreen

This commit is contained in:
2023-12-25 12:29:54 +03:00
parent dbe2e40e3b
commit f0ee09dfc8
4 changed files with 44 additions and 70 deletions

View File

@@ -16,8 +16,7 @@ class NameBloc extends Bloc<NameEvent, NameState> {
Emitter<NameState> emit,
) async {
emit(state.copyWith(
valueController: TextEditingController(),
valueController1: TextEditingController(),
valueController2: TextEditingController()));
firstNameController: TextEditingController(),
lastNameController: TextEditingController()));
}
}

View File

@@ -5,37 +5,31 @@ part of 'name_bloc.dart';
/// Represents the state of Name in the application.
class NameState extends Equatable {
NameState({
this.valueController,
this.valueController1,
this.valueController2,
this.firstNameController,
this.lastNameController,
this.nameModelObj,
});
TextEditingController? valueController;
TextEditingController? firstNameController;
TextEditingController? valueController1;
TextEditingController? valueController2;
TextEditingController? lastNameController;
NameModel? nameModelObj;
@override
List<Object?> get props => [
valueController,
valueController1,
valueController2,
firstNameController,
lastNameController,
nameModelObj,
];
NameState copyWith({
TextEditingController? valueController,
TextEditingController? valueController1,
TextEditingController? valueController2,
TextEditingController? firstNameController,
TextEditingController? lastNameController,
NameModel? nameModelObj,
}) {
return NameState(
valueController: valueController ?? this.valueController,
valueController1: valueController1 ?? this.valueController1,
valueController2: valueController2 ?? this.valueController2,
firstNameController: firstNameController ?? this.firstNameController,
lastNameController: lastNameController ?? this.lastNameController,
nameModelObj: nameModelObj ?? this.nameModelObj,
);
}

View File

@@ -6,8 +6,8 @@ import 'package:eatvio_app/data/models/userRegistrationModel/user_registration_m
/// This class defines the variables used in the [name_screen],
/// and is typically used to hold data that is passed between different parts of the application.
class NameModel extends Equatable {
NameModel({required this.userRegistrationSheet});
UserRegistrationSheet userRegistrationSheet;
NameModel({required this.userRegistrationSheet});
NameModel copyWith({UserRegistrationSheet? userRegistrationSheet}) {
return NameModel(

View File

@@ -7,44 +7,20 @@ 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:eatvio_app/widgets/custom_text_form_field.dart';
import 'package:eatvio_app/data/models/userRegistrationModel/user_registration_model.dart';
import 'package:flutter/material.dart';
class NameScreen extends StatefulWidget {
const NameScreen({Key? key}) : super(key: key);
static Widget builder(BuildContext context) {
final sheet =
ModalRoute.of(context)!.settings.arguments as UserRegistrationSheet;
return BlocProvider<NameBloc>(
create: (context) => NameBloc(NameState(
nameModelObj: NameModel(
userRegistrationSheet: UserRegistrationSheet(
firstName: '1',
lastName: '1',
email: '1',
password: '1',
passwordConfirmation: '1',
termsAccepted: true,
birthdate: DateTime.now(),
gender: '1',
country: '1',
city: '1',
lang: '1',
weight: 1,
height: 1,
chestCircumference: 1,
waistCircumference: 1,
hipCircumference: 1,
bloodPressureUp: 1,
bloodPressureDown: 1,
hasHypo: false,
hasHyper: false,
aboutAllergy: '1',
aboutTakingPils: '1',
aboutSportHobbies: '1',
favoriteFoods: '1',
unfavoriteFoods: '1',
additionalInfo: '1'))))
..add(NameInitialEvent()),
create: (context) => NameBloc(
NameState(
nameModelObj: NameModel(userRegistrationSheet: sheet),
),
)..add(NameInitialEvent()),
child: NameScreen());
}
@@ -87,30 +63,42 @@ class _NameScreenState extends State<NameScreen> {
Text("first_name".tr, style: theme.textTheme.bodyLarge),
SizedBox(height: 3.v),
BlocSelector<NameBloc, NameState, TextEditingController?>(
selector: (state) => state.valueController,
builder: (context, valueController) {
selector: (state) => state.firstNameController,
builder: (context, firstNameController) {
return CustomTextFormField(
controller: valueController,
controller: firstNameController,
textInputAction: TextInputAction.done);
}),
SizedBox(height: 19.v),
Text("last_name".tr, style: theme.textTheme.bodyLarge),
SizedBox(height: 5.v),
BlocSelector<NameBloc, NameState, TextEditingController?>(
selector: (state) => state.valueController1,
builder: (context, valueController1) {
selector: (state) => state.lastNameController,
builder: (context, lastNameController) {
return CustomTextFormField(
controller: valueController1,
controller: lastNameController,
);
}),
SizedBox(height: 21.v),
Spacer(),
NextStepButton(
text: "continue".tr.toUpperCase(),
buttonStyle: CustomButtonStyles.outlinePrimaryTL15,
onPressed: () {
navigateToGender(context);
}),
BlocBuilder<NameBloc, NameState>(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.nameModelObj!.userRegistrationSheet;
sheet.firstName = state.firstNameController!.text;
sheet.lastName = state.lastNameController!.text;
Navigator.pushNamed(
context,
AppRoutes.genderScreen,
arguments: sheet,
);
});
}),
SizedBox(height: 17.v),
]))));
}
@@ -133,11 +121,4 @@ class _NameScreenState extends State<NameScreen> {
onTapArrowLeft(BuildContext context) {
NavigatorService.goBack();
}
/// Navigates to the weightScreen when the action is triggered.
navigateToGender(BuildContext context) {
NavigatorService.pushNamed(
AppRoutes.genderScreen,
);
}
}