адрес электронной почты с использованием шаблона ddd с использованием библиотек bloc, dartz и freezed
Я изучаю шаблон ddd с использованием библиотек bloc, dartz и freezed, этот фрагмент кода - просто след для проверки правильности автоматического исправления входного текста. но это не ответ!
код формы:
Form(
autovalidate: true,
child: Wrap(
runSpacing: MediaQuery.of(context).size.height * 0.02,
children: [
_EmailAdressInput(),
],
),
),
_EmailAdressInput код:
class _EmailAdressInput extends _ListOfInputs {
const _EmailAdressInput();
@override
Widget build(BuildContext context) {
return BlocBuilder<AuthBloc, AuthBlocState>(builder: (context, state) {
return TextFormField(
validator: (_) {
context.read<AuthBloc>().
state.emailAdressState.value.fold(
(l) =>
l.maybeMap(invalideEmail: (msg) => msg, orElse: () => null),
(r) => 'right');
},
onChanged: (value) {
context.read<AuthBloc>().add(
AuthBlocEvent.emailAdressPressed(emailAdressPressedValue: value));
},
);
});
}
}
код подтверждения электронной почты:
Either<AuthFalires,String> emailValidation({required String input}){
if (RegExp(r"""^[a-zA-Z0-9.a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]+@[a-zA-Z0-9]+\.[a-zA-Z]+""").hasMatch(input)) {
return right(input);
}else{
return left(const AuthFalires.invalideEmail(msg:'invalid email emailValidation'));
}
}
код объекта значения:
@immutable
abstract class ValueObject {
const ValueObject();
Either<AuthFalires, String> get value;
bool isRightValue() {
return value.isRight();
}
@override
String toString() => 'ValueObject(value: $value)';
@override
bool operator ==(Object other) {
if (identical(this, other)) return true;
return other is ValueObject && other.value == value;
}
@override
int get hashCode => value.hashCode;
}
код блока:
class AuthBloc extends Bloc<AuthBlocEvent, AuthBlocState> {
AuthBloc() : super(AuthBlocState.initial());
@override
Stream<AuthBlocState> mapEventToState(
AuthBlocEvent event,
) async* {
yield* event.map(
//email Address
emailAddressEvent: (e) async* {
yield state.copyWith(
email: EmailAddress(e.emailAdressEventValue),
showErrorMessages: true,
authFailureOrSuccessOption: none(),
);
},
}
}
код события блока:
@freezed
class AuthBlocEvent with _$AuthBlocEvent {
const factory AuthBlocEvent.emailAdressPressed({required String emailAdressPressedValue }) =
_EmailAdressPressed;
}
Государственный код блока:
@freezed
class AuthBlocState with _$AuthBlocState {
const factory AuthBlocState(
{required EmailAdress emailAdressState}) = _AuthBlocState;
factory AuthBlocState.initial() => AuthBlocState(
emailAdressState: EmailAdress(emailInput: ''),
);
}