Cod*_*rit 6 dart flutter combinelatest rxdart
在 RX dart 中,有一种RX.combineLatest使用回调函数组合流结果的方法。问题是它仅在每个流都发出值时才发出值。如果没有,则不会发射。
每当任何流序列发出一个项目时,都使用组合器函数将给定的流合并为单个流序列。 在所有流都发出至少一项之前,流不会发出。
我试图将多个流合并到一个流中进行验证,当流未发出或发出空值时,该验证应发出 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
);
}
Run Code Online (Sandbox Code Playgroud)
我如何加入这些流,以便在任何流发生变化valid$时发出一个值?
小智 0
创建发出当前值的新流并监听该流是我的最佳实践。
class FormBloc {
final BehaviorSubject<bool> _result = BehaviorSubject();
final BehaviorSubject<String?> _usernameController = BehaviorSubject();
final BehaviorSubject<String?> _emailController = BehaviorSubject();
final _usernameStreamController = StreamController<String?>()
..add(_usernameController.value)
..addStream(_usernameController.stream);
final _emailStreamController = StreamController<String?>()
..add(_emailController.value)
..addStream(_emailController.stream);
Stream<bool> get valid$ => Rx.combineLatest2(
_usernameStreamController.stream, // use streamController instead
_emailStreamController.stream, // use streamController instead
(username, email) => username != null || email != null
);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3761 次 |
| 最近记录: |