Я пытаюсь научиться использовать Animations with Stack и PositionedTransitions во Flutter, и для этого делаю простую игру на основе спрайтов. В настоящее время мой спрайт появляется в конечной позиции их анимации, а не в начале, а затем скользит в конечную позицию.
Мой код выглядит так:
if (lamb != null) {
beginTop = ((lamb.lastY - 1) * roomLength) + lamb.lastY;
beginLeft = ((lamb.lastX - 1) * roomLength) + lamb.lastX;
endTop = ((lamb.y - 1) * roomLength) + lamb.y;
endLeft = ((lamb.x - 1) * roomLength) + lamb.x;
layerAnimation = RelativeRectTween(
begin: RelativeRect.fromLTRB(beginLeft, beginTop, 0.0, 0.0),
end: RelativeRect.fromLTRB(endLeft, endTop, 0.0, 0.0),
).animate(_controller.view);
return PositionedTransition(
rect: layerAnimation,
child: Text(
lamb.emoji,
style: TextStyle(color: Colors.black, fontSize: roomLength - 12),
),
);
}
Должен ли я где-нибудь включить вызов _controller.forward()
? Где и когда? На экране одновременно может отображаться до 10 анимированных виджетов, использующих один и тот же _controller, и все они должны перемещаться одновременно.
Спасибо
PS: следующий код вместо материала PositionedTransition, похоже, идет в правильном направлении:
return AnimatedPositioned(
left: endLeft,
top: endTop,
duration: Duration(milliseconds: 900),
child: Text(
widget.maze.minotaur.emoji,
style: TextStyle(color: Colors.black, fontSize: roomLength),
),
);
Однако я не знаю, как указать начальную точку анимации - кажется, что она заканчивается в нужном месте, а иногда начинается в нужном месте, но как заставить ее начинаться в нужном месте? Полагаю, "подросток", но если так, я не уверен, как это подцепить. Или добавление такого ключа, похоже, пока помогает:
return AnimatedPositioned(
key: Key('uniquekey'),
left: endLeft,
top: endTop,
curve: Curves.linear,
duration: Duration(milliseconds: 900),
child: Text(
widget.maze.minotaur.emoji,
style: TextStyle(color: Colors.black, fontSize: roomLength),
),
);
}