是否可以将某种StatusListener添加到AnimatedContainer中?我想知道动画什么时候完成,什么时候开始。用AnimatedBuilder编写的代码:
new AnimatedBuilder(
animation: _animation,
child: char,
builder: (BuildContext context, Widget child) {
return new Transform(
child: child,
transform: new Matrix4.translation(new vect.Vector3(-100.0, y, 0.0)),
);
},
)_animation和_controller的代码
_controller = new AnimationController(
duration: const Duration(seconds: 5),
vsync: this,
);
_animation = new CurvedAnimation(
parent: _controller,
curve: Curves.linear,
)..addStatusListener((AnimationStatus status) {
if (status == AnimationStatus.completed)
print('completed');
});发布于 2017-08-02 13:35:09
AnimatedContainer只是一个方便,使动画更容易。如果您想拥有一个侦听器,您应该考虑实现您自己的AnimationController。
看看我的答案here,有一个简单的例子。您基本上创建了一个AnimationController,而不是用作动画的父级(例如CurvedAnimation)。您可以将侦听器附加到动画。
##-编辑##
针对您的代码示例,尝试如下:
_controller = new AnimationController(
duration: const Duration(seconds: 5),
vsync: this,
)..forward();
_animation = new CurvedAnimation(
parent: _controller,
curve: Curves.linear,
)..addStatusListener((AnimationStatus status) {
if (status == AnimationStatus.completed)
print('completed');
});使用这样的AnimatedBuilder:
new AnimatedBuilder(
animation: _animation,
child: new Text('a'),
builder: (BuildContext context, Widget child) {
return new Transform(
child: child,
transform: new Matrix4.translation(new Vector3(0.0, _controller.value * 10, 0.0)),
);
},
);(这对我起作用;)
https://stackoverflow.com/questions/45461242
复制相似问题