Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 如何处理紧密的无限流?_Dart_Flutter_Reactive Programming - Fatal编程技术网

Dart 如何处理紧密的无限流?

Dart 如何处理紧密的无限流?,dart,flutter,reactive-programming,Dart,Flutter,Reactive Programming,我试图用Flutter编写一个完全反应的helloworld示例,具体来说,是一个简单的计数器。这里,我有一个来自“+1”按钮的空流,按下按钮会触发该流: class-ReactiveButton扩展了无状态小部件{ 最终_controller=StreamController(); 流压事件; 最后文本; 反应按钮({this.text=”“}){ 按事件=_controller.stream; } @凌驾 小部件构建(构建上下文){ 返回上升按钮( onPressed:()=>\u cont

我试图用Flutter编写一个完全反应的helloworld示例,具体来说,是一个简单的计数器。这里,我有一个来自“+1”按钮的空流,按下按钮会触发该流:

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++)
inside
onPressed
callback我不明白:你想让你的计数器以多快的速度递增?那
RaisedButton
的作用是什么?@pskink每次按下按钮,当然。那么你想让
在(true){
循环时做什么呢?只需调用
sink.add(cnt++)
内部
on按下
callback@pskink我希望该循环获得自然数序列。我不想在我的小部件中引入任何状态,这就是点。只需调用
sink.add(cnt++)
inside
onPressed
callback即可