【问题标题】:Is there function similar to CombineLatest which only for 1 stream only?是否有类似于 CombineLatest 仅适用于 1 个流的功能?
【发布时间】:2019-09-08 13:28:06
【问题描述】:

我是 Rxdart 的新手,我尝试过使用 Combinelatest2 处理 2 种流,例如:

Observable<String> get email => _user.stream.transform(validateEmail);
  Observable<String> get password => _password.stream.transform(validatePassword);
  Observable<bool> get submitValid => Observable.combineLatest2(email, password,
          (checkEmail, checkPassword) => true);

在我的 validateEmail 和 validatePassword 中:

final validateEmail= StreamTransformer<String, String>.fromHandlers(
      handleData: (user, sink){
        if(EmailValidator.validate(email)){
          sink.add(email);
        }else{
          sink.addError("email wrong Format!!");
        }
      }
  );

final validatePassword = StreamTransformer<String, String>.fromHandlers(
      handleData: (password, sink){
        if(password.length > 2){
          sink.add(password);
        }else{
          sink.addError("Password must be at least 3 characters");
        }
      }
  );

这是我主页屏幕上的按钮:

Widget submitButton(ChangePasswordBloc bloc){
    return StreamBuilder(
//      stream: bloc.submitValid,
      builder: (context, snapShot){
        return RaisedButton(
          child: Text("Change Password"),
          color: Colors.blue[400],
          onPressed: ()  {
            if(snapShot.hasData){

            }else{
              return null;
            }
          },
        );
      },
    );
  }

如果使用 combinelatest2 我可以从 observable 获得 2 种发射的变化,我可以打开/关闭按钮,但如果我只想观察电子邮件,我该怎么做?如果来自电子邮件的发射器是正确的,则提交按钮打开,反之亦然

【问题讨论】:

    标签: flutter bloc rxdart


    【解决方案1】:

    您可以使用地图来执行此操作。您可以映射电子邮件并返回布尔值,而不是结合电子邮件和密码。

    Observable<bool> get submitValid => email.map((email) => true);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-31
      • 1970-01-01
      • 2021-04-11
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多