Я пытаюсь сделать простую RPG в Дарт. Мне нужно будет показать текст на экране в div, и мне нужно заставить программу ждать ввода пользователя перед отображением следующего фрагмента текста.Могу ли я сделать функцию Дарта «подождать» на определенное количество времени или ввода?
Например:
void main() {
showText("Hello, Adventurer! Welcome to the land of Dartia! (Press ENTER to continue...)");
print("showText has finished");
}
"showText has finished"
не должны отображаться до тех пор, пока не появится текст и игрок нажимает на кнопку ввода. Вот (довольно некрасиво, по-моему) код, который я до сих пор:
void showText(String text) {
var textBox = querySelector("#sample_text_id")
..text = "";
var timer;
var out;
out = ([int i = 0]) {
textBox.text += text[i];
if (i < text.length - 1) timer = new Timer(const Duration(milliseconds: 10),() => out(i + 1));
};
out();
}
Таймер запускает функцию out()
асинхронно, что я не хочу, чтобы это сделать. В идеале я бы хотел написать примерно следующее:
void showText(String text) {
var textBox = querySelector("#sample_text_id")
..text = "";
for(int i = 0; i < text.length; i++) {
textBox.text += text[i];
pause(const Duration(milliseconds: 10)); // pause the program for given duration
}
waitFor(KeyEnum.ENTER, KeyStateEnum.DOWN); // pause until key is pressed (pseudo Enum contains char codes)
}
Возможно ли это?
Dart имеет ждут выражения, увидеть документ https://www.dartlang.org/articles/await-async/#await-expressions – Leo
'дротик: html' имеет' KeyCode' перечисление со всеми ключевыми коды. Вам не нужно поддерживать свои собственные. –