首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >每当任何流发出值时,rx dart都会组合多个流来发出值。

每当任何流发出值时,rx dart都会组合多个流来发出值。
EN

Stack Overflow用户
提问于 2021-12-15 09:46:04
回答 4查看 1.4K关注 0票数 3

在RX中,有一个使用回调函数组合流结果的RX.combineLatest方法。问题是,只有当每个流发出一个值时,它才会发出一个值。如果一个人没有,它就不会发出。

每当任何流序列发出项时,通过使用组合器函数将给定的流合并成单个流序列。在所有流至少发出一项之后,流才会发出。

Im试图将多个流合并到一个流中进行验证,当流没有发出或发出空值时,应该发出false或true。

代码语言:javascript
运行
复制
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$任何流的发生变化,它就会发出一个值?

EN

Stack Overflow用户

发布于 2022-03-07 15:11:31

您可以将默认值为null作为BehaviorSubjects的种子:

代码语言:javascript
运行
复制
  final BehaviorSubject<String?> _usernameController = BehaviorSubject().seeded(null);
  final BehaviorSubject<String?> _emailController = BehaviorSubject().seeded(null);

另一种可能是给合并的流一个种子值:

代码语言:javascript
运行
复制
Rx.combineLatest2(
    _usernameController.stream, 
    _emailController.stream, 
    (username, email) => username != null || email != null
  ).sharedValueSeeded(false);
票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70361479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档