Перемещение изображения с помощью AnimationPositioned - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь переместить изображение из центра в новую позицию (50,10) с помощью AnimatedPositioned. Ниже приведен мой код

class _SplashScreenState extends State<SplashScreen> {
  @override
  Widget build(BuildContext context) {
    return Container(
      color: Color(0xFFFFFFFF),
      child: Stack(
        children: [
          AnimatedPositioned(
            duration: Duration(seconds: 3),
            child: Align(
              alignment: Alignment.bottomCenter,
              child: Container(
                child: Image(
                  image: AssetImage('images/img.png'),
                  width: 30,
                  height: 30,
                ),
              ),
            ),
            top: 50,
            left: 10,
          )
        ],
      ),
    );
  }

. По какой-то причине приведенный выше код не выполняет анимацию, и изображение изначально не центрируется перед перемещением в верхний левый угол. Как я могу это исправить?

ОБНОВЛЕНИЕ:

Я также пробовал AnimatedAlign,

return Container(
      color: Color(0xFFFFFFFF),
      child: AnimatedAlign(
        duration: Duration(seconds: 3),
        alignment: Alignment(50, 10),
        curve: Curves.bounceOut,
        child: Image(
          image: AssetImage('images/img.png'),
          width: 30,
          height: 30,
        ),
      ),
    );

По некоторым причинам, изображение все еще не движется

1 Ответ

1 голос
/ 14 апреля 2020

заменить на приведенный ниже код. это работает для меня. :)

class _SplashScreenState extends State<SplashScreen>
    with TickerProviderStateMixin {
  AnimationController _animationController;
  Animation _animation;

  @override
  void initState() {
    _animationController =
        AnimationController(vsync: this, duration: Duration(seconds: 3));
    _animation = Tween<Offset>(begin: Offset(0.5, 0.5), end: Offset.zero)
        .animate(_animationController);
    _animationController.forward().whenComplete(() {
      // when animation completes, put your code here
    });
  }

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        body: Stack(
          alignment: Alignment.center,
          fit: StackFit.loose,
          children: <Widget>[
            // left = x value, top = y value;
            // to set last position (50,10) top:50, left:10, end _animation Offset.zero
            Positioned(
              top: 50,
              left: 10,
              child: SlideTransition(
                position: _animation,
                child: AnimatedContainer(
                  height: MediaQuery.of(context).size.height,
                  width: MediaQuery.of(context).size.width,
                  alignment: Alignment.topLeft,
                  duration: Duration(seconds: 0),
                  child: Image(
                    height: 50,
                    width: 50,
                    image: AssetImage('assets/img.png'),
                  ),
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}
...