Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Animation 颤振:如何从父对象控制动画_Animation_Flutter - Fatal编程技术网

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),
子类:文本(“带有精美动画的文本”);
}
}