いくつかのアニメーションをプログラムしようとしていますが、Future が 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));
}