是否有类似于 CombineLatest 仅适用于 1 个流的功能?
Posted
技术标签:
【中文标题】是否有类似于 CombineLatest 仅适用于 1 个流的功能?【英文标题】:Is there function similar to CombineLatest which only for 1 stream only? 【发布时间】: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 种发射的变化,我可以打开/关闭按钮,但如果我只想观察电子邮件,我该怎么做?如果来自电子邮件的发射器是正确的,则提交按钮打开,反之亦然
【问题讨论】:
【参考方案1】:您可以使用地图来执行此操作。您可以映射电子邮件并返回布尔值,而不是结合电子邮件和密码。
Observable<bool> get submitValid => email.map((email) => true);
【讨论】:
以上是关于是否有类似于 CombineLatest 仅适用于 1 个流的功能?的主要内容,如果未能解决你的问题,请参考以下文章
是否有仅适用于控制台应用程序的 laravel 版本? [关闭]
是否有适用于 iOS 的完全可定制的类似 UIPickerView 的开源组件?
是否有适用于 Perl 6 的类似 CPAN/CPAN6 的项目?
是否有类似于 First 的 SQL 标准关键字,仅用于 Last