адрес электронной почты с использованием шаблона 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: ''),
      );
}

0 ответов

Другие вопросы по тегам