Dart 异步未来StreamSubscription错误

Dart 异步未来StreamSubscription错误,dart,Dart,有人能解释一下下面的代码有什么问题吗。我对函数fInputData进行了两次调用。第一个工作正常,第二个导致错误: “未处理的异常” “错误状态:流已具有订阅服务器” 我需要编写一个输入多个参数的测试控制台程序 将“dart:async”导入为异步; 导入“dart:io”; void main(){ fInputData(“输入迭代次数:”) .then((字符串sResult){ 国际投资者; 试一试{ iIters=int.parse(sResult); 如果(iItersask(控制台)

有人能解释一下下面的代码有什么问题吗。我对函数fInputData进行了两次调用。第一个工作正常,第二个导致错误: “未处理的异常” “错误状态:流已具有订阅服务器”

我需要编写一个输入多个参数的测试控制台程序

将“dart:async”导入为异步;
导入“dart:io”;
void main(){
fInputData(“输入迭代次数:”)
.then((字符串sResult){
国际投资者;
试一试{
iIters=int.parse(sResult);
如果(iIters<0)抛出新异常(“无效”);
}捕获(错误){
打印(“无效条目”);
出口(1);
}
打印(“主:所选迭代=${iIters}”);
fInputData(“继续处理?(Y/N):”//此调用失败
.then((字符串输入){
if(sInput!=“y”&&sInput!=“y”)
出口(1);
FpProcessData(iIters);
打印(“主完成”);
});
});
}
async.Future fInputData(字符串sPrompt){
async.Completer-oCompleter=new async.Completer();
stdout.write(sPrompt);
async.Stream-oStream=stdin.transform(新的StringDecoder());
async.streamb;
oSub=oStream.listen((字符串输入){
完成(sInput);
oSub.cancel();
});
返回oCompleter.future;
}
无效fProcessData(整数){
打印(“在fProcessData中”);
打印(“iIters=${iIters}”);
对于(int-iPos=1;iPos

溪流有两种味道:一种或多种(也称为 广播)订户。默认情况下,我们的流是单个订户 这意味着如果您尝试多听一次流 一次,您将得到一个异常,并使用任何回调函数 函数或未来属性被视为侦听

您可以将单个订户流转换为广播流 通过使用()方法

因此,您有两种选择—或者重复使用单个订阅对象,即调用listen一次,并使订阅对象保持活动状态

或者使用广播流-注意广播流和单个订户流之间有很多不同,您需要阅读这些内容并确保它们适合您的用例

下面是一个重用订阅者提问多个问题的示例:

导入'dart:async';
导入“dart:io”;
main(){
var console=新控制台();
var回路;
loop=()=>ask(控制台);
loop();
}
未来询问(控制台){
打印('1+1=…');
返回console.readLine()。然后((行){
打印(line.trim()='2'?'Yup!':'Nope:(');
});
}
类控制台{
流动订阅(subs);;
控制台(){
var输入=标准输入
.transform(新的StringDecoder())
.transform(新的LineTransformer());
_subs=输入。侦听(null);
}
未来读线(){
var completer=new completer();
_subs.onData(completer.complete);
返回completer.future;
}
}