StreamBuilder 触发一个方法两次,而与变量相同的操作只触发一次

StreamBuilder triggers a method twice while the same operation as a variable triggered only once

我有一个 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 变量,并在构造函数中将其设置为我想要的可观察对象。虽然,这个解决方案听起来像是一种解决方法,但我不确定为什么该方法会被触发两次。

有什么想法吗?

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

看看这个问题 它是关于未来的,但机制是相同的。