Значение RxDart BehaviorSubject не равно нулю для приемника.ошибка добавления

#flutter

#flutter

Вопрос:

Я новичок в использовании RxDart amp; bloc. Я реализую преобразование для проверки входных данных. Когда я прослушиваю данные в приемнике, они выводятся правильно (null, если ошибка, и значение, если ошибки нет), но когда я печатаю значение BehaviorSubject, оно не представляет null при ошибке и выводит значение, которое должно быть ошибкой. Вот мой код:

   final _phoneNumberController = BehaviorSubject<String>();

  Function(String) get setPhoneNumber => _phoneNumberController.sink.add;

  Observable<String> get phoneNumberValue =>
      _phoneNumberController.stream.transform(_validatePhoneNumber);

  final _validatePhoneNumber = StreamTransformer<String, String>.fromHandlers(
      handleData: (phoneNumber, sink) {
    if (phoneNumber.length > 5 amp;amp; isNumeric(phoneNumber)) {
      sink.add(phoneNumber);
    } else {
      sink.addError(StringConstant.phoneNumberValidationErrorMessage);
    }
  });
  void signUserIn() {
    print(_phoneNumberController.stream.value); // Prints value that should be an error
  }

  SignInBloc() {
    phoneNumberValue.listen((data) => print(data)); // Just Fine
  }
  

Комментарии:

1. Единственная цель BehaviourSubject — сохранить предыдущие действительные данные. Вы должны использовать StreamController вместо BehaviourSubject .

2. О, понятно, тогда я буду иметь это в виду. Спасибо.

Ответ №1:

Вы прослушиваете данные, но не прослушиваете ошибки приемника. измените свой код на:

  SignInBloc() {
    phoneNumberValue.listen((data) {
      print(data);
      }, 
    onError: (_){
  print(_.toString());
   });
  }