forked from eatvio/eatvio_app
feature(registration): refactor
This commit is contained in:
@@ -20,6 +20,7 @@ import 'package:eatvio_app/widgets/app_bar/appbar_title_image.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:validators/validators.dart';
|
||||
|
||||
class RegistrationScreen extends StatefulWidget {
|
||||
const RegistrationScreen({super.key});
|
||||
@@ -64,7 +65,6 @@ class _RegistrationScreenState extends State<RegistrationScreen> {
|
||||
create: (BuildContext context) => RegistrationCubit(),
|
||||
child: BlocBuilder<RegistrationCubit, RegistrationState>(
|
||||
builder: (BuildContext context, RegistrationState state) {
|
||||
(state as RegistrationStateLoaded);
|
||||
return PopScope(
|
||||
canPop: false,
|
||||
onPopInvoked: (_) => _showPopDialog(),
|
||||
@@ -112,12 +112,14 @@ class _RegistrationScreenState extends State<RegistrationScreen> {
|
||||
),
|
||||
backgroundColor: appTheme.blueA400,
|
||||
onPressed: () {
|
||||
setState(() {
|
||||
pageController.nextPage(
|
||||
duration: const Duration(milliseconds: 350),
|
||||
curve: Curves.easeInOut,
|
||||
);
|
||||
});
|
||||
if (canGoNext(state)) {
|
||||
setState(() {
|
||||
pageController.nextPage(
|
||||
duration: const Duration(milliseconds: 350),
|
||||
curve: Curves.easeInOut,
|
||||
);
|
||||
});
|
||||
}
|
||||
},
|
||||
label: Text(
|
||||
'Продолжить',
|
||||
@@ -169,21 +171,21 @@ class _RegistrationScreenState extends State<RegistrationScreen> {
|
||||
});
|
||||
},
|
||||
children: [
|
||||
LanguageSelectScreen.builder(context),
|
||||
CredentialsScreen.builder(context, state.sheet),
|
||||
NameScreen.builder(context, state.sheet),
|
||||
GenderScreen.builder(context, state.sheet),
|
||||
DateOfBirthScreen.builder(context, state.sheet),
|
||||
CityOfLivingScreen.builder(context, state.sheet),
|
||||
BodyCircumferencesScreen.builder(context, state.sheet),
|
||||
WeightScreen.builder(context, state.sheet),
|
||||
HeightScreen.builder(context, state.sheet),
|
||||
BloodPressureScreen.builder(context, state.sheet),
|
||||
AllergiesScreen.builder(context, state.sheet),
|
||||
MedicineIntakeScreen.builder(context, state.sheet),
|
||||
FavoriteSportsScreen.builder(context, state.sheet),
|
||||
FavoriteFoodsScreen.builder(context, state.sheet),
|
||||
AdditionalInformationScreen.builder(context, state.sheet),
|
||||
LanguageSelectScreen(sheet: context.read<RegistrationCubit>().state.sheet),
|
||||
CredentialsScreen(sheet: context.read<RegistrationCubit>().state.sheet),
|
||||
NameScreen(),
|
||||
GenderScreen(),
|
||||
DateOfBirthScreen(),
|
||||
CityOfLivingScreen(),
|
||||
BodyCircumferencesScreen(),
|
||||
WeightScreen(),
|
||||
HeightScreen(),
|
||||
BloodPressureScreen(),
|
||||
AllergiesScreen(),
|
||||
MedicineIntakeScreen(),
|
||||
FavoriteSportsScreen(),
|
||||
FavoriteFoodsScreen(),
|
||||
AdditionalInformationScreen(),
|
||||
],
|
||||
),
|
||||
),
|
||||
@@ -192,4 +194,71 @@ class _RegistrationScreenState extends State<RegistrationScreen> {
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
bool canGoNext(state) {
|
||||
switch (step) {
|
||||
case 2:
|
||||
List<String> errors = validateFields(state.sheet.email, state.sheet.name, state.sheet.password, state.sheet.passwordConfirmation);
|
||||
if (errors.isEmpty) {
|
||||
return true;
|
||||
} else {
|
||||
String errorMessage = '';
|
||||
|
||||
for (var error in errors) {
|
||||
errorMessage += error + '\n\n';
|
||||
}
|
||||
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
title: Text('Ошибка'),
|
||||
content: Text(errorMessage),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => Navigator.pop(context),
|
||||
child: Text('OK'),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
return false;
|
||||
}
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
List<String> validateFields(String email, String name, String password, String passwordConfirmation) {
|
||||
List<String> errors = [];
|
||||
|
||||
if (!isEmail(email)) {
|
||||
errors.add('email_invalid'.tr);
|
||||
}
|
||||
|
||||
if (email.isEmpty) {
|
||||
errors.add('email_empty'.tr);
|
||||
}
|
||||
|
||||
if (name.length < 6) {
|
||||
errors.add('name_short'.tr);
|
||||
}
|
||||
|
||||
if (name.isEmpty) {
|
||||
errors.add('name_empty'.tr);
|
||||
}
|
||||
|
||||
if (password.isEmpty) {
|
||||
errors.add('name_empty'.tr);
|
||||
}
|
||||
|
||||
if (password.length < 6) {
|
||||
errors.add('password_short'.tr);
|
||||
}
|
||||
|
||||
if (password != passwordConfirmation) {
|
||||
errors.add('password_confirmation_mismatch'.tr);
|
||||
}
|
||||
|
||||
return errors;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user