【发布时间】:2019-04-14 01:08:21
【问题描述】:
所以我试图在 Flutter 中创建一个动画,每次用户按下按钮时都需要不同的结果。
我根据Flutter Animations tutorial实现了以下代码,并创建了一个函数来更新它。
class _RoulettePageWidgetState extends State<RoulettePageWidget>
with SingleTickerProviderStateMixin {
Animation<double> _animation;
Tween<double> _tween;
AnimationController _animationController;
int position = 0;
@override
void initState() {
super.initState();
_animationController =
AnimationController(duration: Duration(seconds: 2), vsync: this);
_tween = Tween(begin: 0.0, end: 100.0);
_animation = _tween.animate(_animationController)
..addListener(() {
setState(() {});
});
}
void setNewPosition(int newPosition) {
_tween = Tween(
begin: 0.0,
end: math.pi*2/25*newPosition);
_animationController.reset();
_tween.animate(_animationController);
_animationController.forward();
}
@override
Widget build(BuildContext context) {
return Container(
child: Column(
children: <Widget>[
Center(
child: Transform.rotate(
angle: _animationController.value,
child: Icon(
Icons.arrow_upward,
size: 250.0,
),
)),
Expanded(
child: Container(),
),
RaisedButton(
child: Text('SPIN'),
onPressed: () {
setState(() {
setNewPosition(math.Random().nextInt(25));
});
},
)
],
)
);
}
}
如您所见,我正在更新_tween 的begin: 和end:,但这似乎并没有改变动画。
那么我应该怎么做才能在用户每次按下按钮时创建一个“不同”的动画?
一般的想法是让动画彼此建立一个随机的新值,例如:
- 第一次旋转:0 -> 10
- 第二次旋转:10 -> 13
- 第三次旋转:13 -> 18
- ...等
所以我想知道是否可以更新动画,还是应该每次都创建一个新动画? 我能想到的另一件事是跟踪位置并每次使用相同的动画 (0.0 -> 100.0) 作为传输的百分比。
因此,我不会从 10 -> 15 创建新动画,而是执行以下操作:
currentValue = 10 + (15-10)/100*_animationController.value
【问题讨论】:
-
你能分享一下你的 setNewPosition 电话吗?
-
我的意思是你的构建方法会非常有用,因为现在,我觉得你的要求有点抽象。
-
我已经添加了构建实现。
-
它确实重置了动画,它也再次播放,但使用初始值而不是新的一次。
标签: animation dart flutter flutter-animation