feature(registration): refactor

This commit is contained in:
mso7nueh
2024-07-14 16:30:10 +03:00
parent 12a0db5093
commit 3cdab9e1bb
31 changed files with 1214 additions and 689 deletions

View File

@@ -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;
}
}