在RX中,有一个使用回调函数组合流结果的RX.combineLatest
方法。问题是,只有当每个流发出一个值时,它才会发出一个值。如果一个人没有,它就不会发出。
每当任何流序列发出项时,通过使用组合器函数将给定的流合并成单个流序列。在所有流至少发出一项之后,流才会发出。
Im试图将多个流合并到一个流中进行验证,当流没有发出或发出空值时,应该发出false或true。
class FormBloc {
final BehaviorSubject<bool> _result = BehaviorSubject();
final BehaviorSubject<String?> _usernameController = BehaviorSubject();
final BehaviorSubject<String?> _emailController = BehaviorSubject();
// Will only emit if each stream emitted a value
// If only username is emitted valid is not emitted
Stream<bool> get valid$ => Rx.combineLatest2(
_usernameController.stream,
_emailController.stream,
(username, email) => username != null || email != null
);
}
我如何加入这些流,以便如果valid$
的任何流的发生变化,它就会发出一个值?
发布于 2022-03-07 15:11:31
您可以将默认值为null作为BehaviorSubjects的种子:
final BehaviorSubject<String?> _usernameController = BehaviorSubject().seeded(null);
final BehaviorSubject<String?> _emailController = BehaviorSubject().seeded(null);
另一种可能是给合并的流一个种子值:
Rx.combineLatest2(
_usernameController.stream,
_emailController.stream,
(username, email) => username != null || email != null
).sharedValueSeeded(false);
https://stackoverflow.com/questions/70361479
复制相似问题