1

我有一个 StreamBuilder 接受来自我的服务的流。它看起来像这样:

StreamBuilder(
  stream: MyService.getStream$()
  builder (...)
);

另外,我使用以下方法提供服务:

getStream$() {
  print('being printed twice');
  return Observable.just('text')
    .doOnData(() => print('being printed twice too'));
}

当我运行该应用程序时,我会prints打印两次(每次)以下内容。

但是,当我将以下实现更改为变量时,它只运行一次:

Observable getStream = Observable
  .just('text')
  .doOnData((data) => print('being printed once');

当然,在上面的示例中,我会使用变量,但在我的原始代码中,我无法这样做,因为我依赖于实例属性。

我能做的是声明一个Observable变量并在构造函数中将其设置为我想要的 observable。虽然,这个解决方案听起来像是一种解决方法,但我不确定为什么该方法会被触发两次。

有任何想法吗?

4

1 回答 1

1

StreamBuilder每次调用 build 方法时都会重建。这意味着MyService.getStream$()每次调用都会评估它并创建新的 Observable。如果您将 Observable 分配给变量,它将被创建一次并在构建调用之间重用。

看看这个问题Future running two because it's in build 方法,如何修复它? 这是关于未来的,但机制是一样的。

于 2019-11-06T18:52:16.353 回答