问题描述
我想在简单的Web应用程序中创建文本键入效果。这是我第一次将dart用于Web应用程序。我做了这样的事情。
var chars = "Hello World".split('');
var textstream = Stream<String>.fromIterable(chars);
var idx = 0;
textstream.listen((data) {
Future.delayed(Duration(milliseconds: idx * 200),() {
var element = querySelector('#hero-keyword');
element.appendText(data);
idx++;
});
});
我的html有这个
<p id="hero-keyword"></p>
但是,我希望每个字母的打印间隔为200毫秒。但是我得到的是,所有字母同时显示。
解决方法
您的idx
变量仅在延迟的将来完成时才更新,这将在指定的延迟之后的事件循环的第一个遍历中发生。
fromIterable
将一次按顺序处理其值。总而言之,最终的结果是所有延迟都被设置为0
,然后在稍有延迟之后,您的所有字符都会被发出,idx
将会递增。>
您可以尝试以下模式,以适应您的用例:
void main() {
var text = "Hello world";
Stream
.periodic(Duration(milliseconds: 200),(count) {
print(text[count]);
})
.take(text.length)
.drain();
}