【发布时间】:2018-10-21 23:13:39
【问题描述】:
将状态传递给小部件很容易。我有一个StatefulWidget,其中包含一个带有控制器的动画。我需要能够从我的小部件树中更高的另一个小部件触发动画。
我的MainApp 应该使用按钮触发动画。
据我了解,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();
}
...
}
(完整源代码here)
有什么更好的方法来处理这个问题?
【问题讨论】:
-
如果
LogoWidget应该在其他地方进行控制,为什么还要保存动画内容? -
好吧...动画小部件本身应该对应用程序状态做出反应...否则我必须拔出
AnimationController,但MainApp不应该关心那个全部。