#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());
});
}