【问题标题】:rxDart BehaviorSubject's value is not null on sink.addErrorrxDart BehaviorSubject 的值在 sink.addError 上不为空
【发布时间】: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


【解决方案1】:

您正在收听数据,但您没有收听接收器错误。将您的代码更改为:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-31
    • 2019-08-04
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多