【问题标题】:StreamBuilder triggers a method twice while the same operation as a variable triggered only onceStreamBuilder 触发方法两次,而与变量相同的操作仅触发一次
【发布时间】:2020-03-03 06:48:50
【问题描述】:

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

有什么想法吗?

【问题讨论】:

    标签: flutter rxdart stream-builder


    【解决方案1】:

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

    看看这个问题Future running twice because it's in build method, how to fix it? 这是关于未来的,但机制是一样的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-19
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-13
      • 2020-08-25
      相关资源
      最近更新 更多