animation - 如何从外部控制 Flutter 中的动画?
问题描述
将状态传递给小部件很容易。我有一个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();
}
...
}
(完整的源代码在这里)
有什么更好的方法来处理这个问题?
解决方案
你不需要_LogoWidgetState _state; // yuk!
在茫茫人海中,但你可以尝试:
- 创建
LogoWidget _myBody = LogoWidget()
,并将其用于您的body:
- 同样,适用于
final _LogoWidgetState _state = _LogoWidgetState()
- 然后将其称为
_myBody._state.restartAnimation()
您的示例,已修改:
class MainApp extends StatelessWidget {
LogoWidget _myBody = LogoWidget(); //<---
@override
Widget build(BuildContext context) {
return new Scaffold(
...
body: _myBody, //<---
);
}
_startAnimation() {
_myBody._state.restartAnimation(); //<---
}
}
class LogoWidget extends StatefulWidget {
final _LogoWidgetState _state = _LogoWidgetState(); //<---
_LogoWidgetState createState() {
return _state;
}
}
但如果你觉得_myBody._state.restartAnimation()
太长,你可以缩短它:
class LogoWidget extends StatefulWidget {
final _LogoWidgetState _state = _LogoWidgetState(); //<---
void restartAnimation() { //<---
_state.restartAnimation();
}
_LogoWidgetState createState() {
return _state;
}
}
然后只需使用_myBody.restartAnimation()
以下是一些相关的帖子:
推荐阅读
- java - 在instrumentation-spring-rabbit中,为什么brave会删除消息的标头?
- angular - 模板驱动的表单无法读取 null-Angular 6 的属性“必需”
- r - 如何连接两列以创建新列?
- javascript - 节点:如何在不使用框架的情况下处理 POST 请求
- android - 片段恢复时隐藏进度条
- android - 拍摄图像后在 onActivityResult 中获取 null uri
- python - 如何合并数据框中的一些数据
- python - 在 Excel 电子表格中查找“相似”字符串的最佳搜索算法
- testing - 量角器测试的动态浏览器分辨率
- python-3.x - 什么相当于 Matplotlib 中 seaborn 的色调?