Passing state down to widgets is easy. I have a StatefulWidget that contains an animation with its controller. I need to be able to trigger the animation from another widget higher in my widget tree.
My MainApp should trigger the animation using a button.
As I understand AnimationController only has an imperative API. I can call controller.forward() or controller.reverse(). But to do this I need to expose the controller to my MainApp.
What I currently do is to keep a global variable of my state around.
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(); } ... } (full sourcecode here)
What is a better way to deal with this?


LogoWidgetholds animation stuff if it's supposed to be controlled somewhere else ?AnimationControllerbut theMainAppshould not care about that at all.