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 分配给变量,它将被创建一次并在构建调用之间重复使用。
看看这个问题
它是关于未来的,但机制是相同的。
我有一个 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 分配给变量,它将被创建一次并在构建调用之间重复使用。
看看这个问题