【发布时间】:2019-08-06 10:46:56
【问题描述】:
我是使用 rxDart 和 bloc 的新手。我实现了一个转换来验证输入。当我收听接收器上的数据时,它正确输出(如果错误则为 null,如果没有错误则为 value),但是当我打印 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 && 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
}
【问题讨论】:
-
BehaviourSubject 的唯一目的是保存之前的有效数据。您应该使用 StreamController 而不是 BehaviourSubject。
-
哦,我明白了,我会记住这一点的。谢谢。
标签: flutter