Dart 如何处理紧密的无限流?
我试图用Flutter编写一个完全反应的helloworld示例,具体来说,是一个简单的计数器。这里,我有一个来自“+1”按钮的空流,按下按钮会触发该流:Dart 如何处理紧密的无限流?,dart,flutter,reactive-programming,Dart,Flutter,Reactive Programming,我试图用Flutter编写一个完全反应的helloworld示例,具体来说,是一个简单的计数器。这里,我有一个来自“+1”按钮的空流,按下按钮会触发该流: class-ReactiveButton扩展了无状态小部件{ 最终_controller=StreamController(); 流压事件; 最后文本; 反应按钮({this.text=”“}){ 按事件=_controller.stream; } @凌驾 小部件构建(构建上下文){ 返回上升按钮( onPressed:()=>\u cont
class-ReactiveButton扩展了无状态小部件{
最终_controller=StreamController();
流压事件;
最后文本;
反应按钮({this.text=”“}){
按事件=_controller.stream;
}
@凌驾
小部件构建(构建上下文){
返回上升按钮(
onPressed:()=>\u controller.sink.add(null),
子:文本(Text),
);
}
}
我想将该流转换为一个自然数序列,以输入RxText
。因此,我使用rxdart中的zipWith
方法,使用紧密的自然数流,丢弃空值。现在的问题是,使用由紧密的while(true)
循环创建的自然数流会导致无限循环,因为(大概)流不会返回屈服
s之间的控制:
Stream naturals()异步*{
整数计数=0;
while(true){
产量计算++;
}
}
或者,我可以使用周期接近零的Stream.periodic
构造函数。然而,这导致我的应用程序逐渐变得迟缓(可能是由于流无限期地徒劳计数)
因此,我需要的是一个惰性流,它只在被请求时(立即)生成值。这实际上听起来像是一个Iterable
,但是对于Iterable
,我没有一个方法可以用流压缩它。我考虑过实现一个函数,它接受一个流/可伸缩列表列表并返回一个列表流,或多或少像常规的拉链一样工作。但它看起来相当复杂,我不确定我是否能够编写一个生产就绪的实现
问题是:我的选择是什么?有现成的解决方案吗?我是否应该尝试对颤振进行完全反应?我不明白:您希望计数器以多快的速度递增?当然,每次按下按钮时,
RaisedButton
的作用是什么?@pskink。那么在(true){循环时,您希望的作用是什么呢?只需调用sink.add(cnt++)
内部on按下
callback@pskink我希望该循环获得自然数序列。我不想在我的小部件中引入任何状态,这就是重点。只需调用sink.add(cnt++)
insideonPressed
callback我不明白:你想让你的计数器以多快的速度递增?那RaisedButton
的作用是什么?@pskink每次按下按钮,当然。那么你想让在(true){
循环时做什么呢?只需调用sink.add(cnt++)
内部on按下
callback@pskink我希望该循环获得自然数序列。我不想在我的小部件中引入任何状态,这就是点。只需调用sink.add(cnt++)
insideonPressed
callback即可