我正在尝试编写一些动画,但我无法理解 Futures 在 Dart 上的工作方式。
主要问题是动画本身是一个异步过程,如果我尝试链接几个点,它们会堆积起来,精灵会直接移动到最后一个点。我见过的所有示例都在函数返回值时起作用,但在处理动画时并非如此。
我希望能够检测到动画完成后,以触发下一个动作,但到目前为止我还没有真正成功。
这是我的代码:
class MovingThing {
String name;
DivElement sprite = new DivElement();
MovingThing(this.name){
sprite.id = name;
sprite.text = name;
sprite.style..width = "30px"
..height = "30px"
..border = "1px solid black"
..position = "absolute"
..transition = "all 2000ms ease-in-out";
querySelector("body").children.add(sprite);
}
Future move(Point p) {
sprite.style..top = p.y.toString() + "px"
..left = p.x.toString() + "px";
return Future.wait([sprite.onTransitionEnd.first]);
}
}
main () {
List<Point> points = [
new Point(20, 20)
, new Point(200, 20)
, new Point(20, 200)
, new Point(100, 100)
];
MovingThing mt = new MovingThing("MT");
Future.forEach(points, (Point p) => mt.move(p));
}