2013-05-01 59 views
2

有没有一种方法可以从用户处获取单字符(整数)键盘输入并将它们存储到Dart命令行应用程序中的变量中?我已经试过类似:飞镖中的简单命令行应用程序I/O

Stream cmdLine = stdin 
    .transform(new StringDecoder()) 
    .transform(new LineTransformer()); 

StreamSubscription cmdSubscription = cmdLine.listen(
    (line) => (choice = line); 
    cmdSubscription.cancel();); 

在试图键盘输入存储到变量“选择”这个代码的许多细微的变化,但不能让它开始工作。

回答

2

目前,您一次只能读取一整行 - 即按一次输入。

明星这issue

更新:

readline的()函数等待来自用户的线路输入的,并返回它作为一个字符串。

import 'dart:async'; 
import 'dart:io'; 

main() { 
    print('1 + 1 = ...'); 
    readLine().then((line) { 
     print(line.trim() == '2' ? 'Yup!' : 'Nope :('); 
    }); 
} 

Future<String> readLine() { 
    var completer = new Completer<String>(); 

    var input = stdin 
     .transform(new StringDecoder()) 
     .transform(new LineTransformer()); 

    var subs; 
    subs = input.listen((line) { 
     completer.complete(line); 
     subs.cancel(); 
    }); 

    return completer.future; 
} 
+0

这将是我没意见,只是为了寻找用户键入1或2然后输入; d – Instinct 2013-05-01 05:39:28

+0

我添加了做这样的例子 - 给我留言,如果是坏了。 – 2013-05-01 05:57:25

+0

Hhmm试图使用函数,但代码似乎跳过readLine调用readLine()。然后((s)没有等待输入。在该调用中,我试图设置一个全局变量选项等于s,所以我有: 的readLine(),然后((S){ 选择= S; }); 而(选择== 0){ } 打印( '您输入$选择'); 试图使用while循环强制等待输入,但仍然输入任何内容后按下输入它永远不会结束达到打印语句。如果我删除while循环,它只是在不等待输入的情况下打印出来。我是否正确实施? – Instinct 2013-05-01 19:31:14