2014-07-23 2 views
1

다트 콘솔 앱을 만들었으며 화살표 키와 기능 키 같은 키 코드를 표준 입력에서 처리해야합니까? 내가 본 샘플은 일반적으로 문자열 기반 :다트 : 원시 문자 코드 표준 입력

Stream readInts() => stdin; 
readInts().listen(processInts); 
void processInts(List<int> kbinput) { 
    for (int i=0;i<kbinput.length;i++){ 
    print ("kbinput:${kbinput[i]}"); 
    } 
} 

표준 입력 만 가능한 문자를 제공하지 보인다

Stream readLine() => stdin.transform(UTF8.decoder).transform(new LineSplitter()); 
readLine().listen(processLine); 
내가 같이 원시의 int를 받았으면 위의 샘플을 수정 모든 아스키 키 코드. stdin에서 가능하지 않은 경우 & 키 코드를 사용하여 내 기본 확장에 스트림을로드 할 수 있습니까? 내 콘솔 앱이 키 누르기의 ascii 키 코드에 어떻게 접근 할 수 있습니까? 당신의 도움을 주셔서 감사합니다!

답변

0

한 가지 방법은

import 'dart:io' as io; 
import 'dart:convert' show UTF8; 

void main() { 
    io.stdin.echoMode = false; 
    var input; 
    while(input != 32) { // leave program with [Space][Enter] 
    input = io.stdin.readByteSync(); 
    if(input != 10) print(input); // ignore [Enter] 
    } 
    io.stdin.echoMode = true; 
} 

될하지만 을 누르면 입력 한 후에 만 ​​값을 반환합니다. 하나의 키 누름의 경우 하나에서 최대 3 바이트를 반환합니다.

그것이
은 자세한 내용은 Capture characters from standard input without waiting for enter to be pressed을 볼 Enter 키를 눌러없이 콘솔에서 키 입력을 얻기 위해 쉬운 일이 아니다 보인다. 링크 된 질문에 제안 된 솔루션을 구현하는 네이티브 확장을 만들 수 있습니다.

+0

감사합니다. Gunter, 불행히도 readByteSync는 동기화/차단이고 stdin은 모든 키 코드를 제공하지 않습니다. 네이티브 확장에서 ReadConsoleInputs를 수행하는 별도의 스레드를 만들어서 입력 버퍼에서 직접 원시 가상 코드를 가져와야했습니다. 이제 Dart "스트림"개체를 만드는 방법을 보여주는 c/C++ 샘플 코드를 찾아야하므로 Dart 앱은 새로운 int 스트림 ("xin"virtualkeycodes)을 수신 할 수 있습니다. 그런 코드 스 니펫을 어디에서 찾을 수 있는지 알고 있습니까? Dart Misc에 질문을 게시해야합니까? –

+0

죄송합니다. 기본 확장 프로그램에 대한 경험이 없습니다. 여기 및 포럼에서 질문하고 SO 질문에 대한 포럼 게시물에 링크를 만드십시오. 그것은 종종 G + Dartisans 그룹에 SO 질문을 게시하는 데 도움이됩니다. 내가 아는 한 네이티브 확장 기능을 수행하는 사람은 많지 않습니다. –