Как я могу управлять анимацией во Флаттере снаружи? - PullRequest
0 голосов
/ 11 мая 2018

Легко передать состояние виджетам.У меня есть StatefulWidget, который содержит анимацию с его контроллером.Мне нужно иметь возможность запускать анимацию из другого виджета выше в моем дереве виджетов.

app

Мой MainApp должен запускать анимацию с помощью кнопки.

enter image description here

Как я понимаю, AnimationController имеет только обязательный API.Я могу позвонить controller.forward() или controller.reverse().Но для этого мне нужно выставить контроллер на свое MainApp.

В настоящее время я поддерживаю глобальную переменную моего состояния.

class MainApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      ...
      body: new LogoWidget(),
    );
  }

  _startAnimation() {
    _state.restartAnimation();
  }
}

_LogoWidgetState _state; // yuk!

class LogoWidget extends StatefulWidget {
  _LogoWidgetState createState() {
    _state = _LogoWidgetState();
    return _state;
  }
}

class _LogoWidgetState extends State<LogoWidget>
    with SingleTickerProviderStateMixin {
  Animation<double> animation;
  AnimationController controller;

  restartAnimation() {
    controller.value == 1.0 ? controller.reverse() : controller.forward();
  }
  ...
}

(полный исходный код здесь )

Как лучше справиться с этим?

...