Animation 颤振:如何从父对象控制动画
我需要从父窗口小部件启动子窗口小部件的动画。我该怎么做 我已经试着给家长控制器,但是如何替换Animation 颤振:如何从父对象控制动画,animation,flutter,Animation,Flutter,我需要从父窗口小部件启动子窗口小部件的动画。我该怎么做 我已经试着给家长控制器,但是如何替换vsync:this 这是基本代码(我还没有实际测试这段代码,但我展示了我的意思): 导入“包装:颤振/材料.省道”; 类ParentWidget扩展了无状态Widget{ @凌驾 小部件构建(构建上下文){ 返回列( 儿童:[ ChildText(), 扁平按钮( 子级:文本(“启动动画”), 已按下:(){ //启动动画!!!???????? }, ) ], ); } } 类ChildText扩展St
vsync:this
这是基本代码(我还没有实际测试这段代码,但我展示了我的意思):
导入“包装:颤振/材料.省道”;
类ParentWidget扩展了无状态Widget{
@凌驾
小部件构建(构建上下文){
返回列(
儿童:[
ChildText(),
扁平按钮(
子级:文本(“启动动画”),
已按下:(){
//启动动画!!!????????
},
)
],
);
}
}
类ChildText扩展StatefulWidget{
@凌驾
_ChildTextState createState();
}
类_ChildTextState使用TickerProviderStateMixin扩展状态{
动画控制器_控制器;
动画(动画),;
@凌驾
void initState(){
super.initState();
//实际动画要复杂得多,这只是一个随机演示
_控制器=
AnimationController(vsync:this,duration:duration(秒数:2));
_动画=Tween(开始:-1.0,结束:100.0)。动画(曲线动画)(
父节点:_控制器,
曲线:Curves.FastOutSwowin,
));
}
@凌驾
小部件构建(构建上下文){
返回Transform.translate(
偏移量:偏移量(0,_animation.value),
子类:文本(“带有精美动画的文本”);
}
}
您可以尝试以下方法:
class ParentWidget extends StatefulWidget {
@override
_ParentWidget createState() => _ParentWidget();
}
class _ParentWidget extends State<ParentWidget> with TickerProviderStateMixin {
AnimationController _controller;
@override
void initState() {
super.initState();
_controller =
AnimationController(vsync: this, duration: Duration(seconds: 2));
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
ChildText(_controller),
FlatButton(
child: Text('start the animation'),
onPressed: () {
// start the animation!!!
_controller.forward();
},
)
],
);
}
}
class ChildText extends StatefulWidget {
ChildText(this._controller);
final AnimationController _controller;
@override
_ChildTextState createState() => _ChildTextState();
}
class _ChildTextState extends State<ChildText> with TickerProviderStateMixin {
Animation _animation;
@override
void initState() {
super.initState();
_animation = Tween(begin: -1.0, end: 100.0).animate(CurvedAnimation(
parent: widget._controller,
curve: Curves.fastOutSlowIn,
));
}
@override
Widget build(BuildContext context) {
return Transform.translate(
offset: Offset(0, _animation.value),
child: Text('Text with fancy animation'));
}
}
类ParentWidget扩展StatefulWidget{
@凌驾
_ParentWidget createState()=>\u ParentWidget();
}
类_ParentWidget使用TickerProviderStateMixin扩展状态{
动画控制器_控制器;
@凌驾
void initState(){
super.initState();
_控制器=
AnimationController(vsync:this,duration:duration(秒数:2));
}
@凌驾
无效处置(){
_controller.dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回列(
儿童:[
ChildText(_控制器),
扁平按钮(
子级:文本(“启动动画”),
已按下:(){
//开始动画!!!
_controller.forward();
},
)
],
);
}
}
类ChildText扩展StatefulWidget{
ChildText(此控制器);
最终动画控制器_控制器;
@凌驾
_ChildTextState createState();
}
类_ChildTextState使用TickerProviderStateMixin扩展状态{
动画(动画),;
@凌驾
void initState(){
super.initState();
_动画=Tween(开始:-1.0,结束:100.0)。动画(曲线动画)(
父项:小部件。\u控制器,
曲线:Curves.FastOutSwowin,
));
}
@凌驾
小部件构建(构建上下文){
返回Transform.translate(
偏移量:偏移量(0,_animation.value),
子类:文本(“带有精美动画的文本”);
}
}