Flutter 根据脚手架主体中的条件设置小部件动画

Flutter 根据脚手架主体中的条件设置小部件动画,flutter,animation,Flutter,Animation,我有一个小部件,带有脚手架。他的身体是x部件,我如何在身体上的y部件而不是x部件中设置动画? 这些小部件如下所示: Scaffold( body: condition ? X() : Y(), ) 当条件从true变为false或false变为true时,我希望Y或X小部件在中设置动画。如何执行此操作?您可以更改偏移量值以获得所需的结果 class Test extends StatefulWidget { @override _TestState createState() =&

我有一个小部件,带有脚手架。他的身体是x部件,我如何在身体上的y部件而不是x部件中设置动画? 这些小部件如下所示:

Scaffold(
  body: condition ? X() : Y(),
)

当条件从true变为false或false变为true时,我希望Y或X小部件在中设置动画。如何执行此操作?

您可以更改
偏移量
值以获得所需的结果

class Test extends StatefulWidget {
  @override
  _TestState createState() => _TestState();
}

class _TestState extends State<Test>
    with SingleTickerProviderStateMixin {
  bool condition;
  AnimationController _controller;
  Animation<Offset> _offsetAnimation;
  @override
  void initState() {
    condition = false;
    _controller = AnimationController(
      duration: const Duration(seconds: 1),
      vsync: this,
    );
    _offsetAnimation =
        Tween<Offset>(begin: Offset(0.0, -5.0), end: Offset.zero)
            .animate(CurvedAnimation(
          curve: Curves.linear,
          parent: _controller,
        ));
    super.initState();
  }
  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }
  @override
  Widget build(BuildContext context) {


    return Scaffold(
      body: InkWell(
        onTap: () {
          setState(() {
            condition = true;
          });
          _controller.forward();
        },
        child: Center(
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: <Widget>[
              Container(
                color: Colors.red,
                width: 200,
                height: 200,
              ),
              if (condition)
                SlideTransition(
                  position: _offsetAnimation,
                  child: Container(
                    color: Colors.green,
                    width: 100,
                    height: 100,
                  ),
                ),
            ],
          ),
        ),
      ),
    );
  }
}
类测试扩展StatefulWidget{
@凌驾
_TestState createState();
}
类_TestState扩展状态
使用SingleTickerProviderStateMixin{
布尔条件;
动画控制器_控制器;
动画(非动画化),;
@凌驾
void initState(){
条件=假;
_控制器=动画控制器(
持续时间:常数持续时间(秒数:1),
vsync:这个,,
);
_抵消=
吐温(开始:偏移(0.0,-5.0),结束:偏移.0)
.动画(曲线动画)(
曲线:曲线。线性,
父节点:_控制器,
));
super.initState();
}
@凌驾
无效处置(){
_controller.dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:墨水池(
onTap:(){
设置状态(){
条件=真;
});
_controller.forward();
},
儿童:中心(
子:列(
mainAxisSize:mainAxisSize.min,
儿童:[
容器(
颜色:颜色,红色,
宽度:200,
身高:200,
),
如果(条件)
幻灯片转换(
位置:_偏置,
子:容器(
颜色:颜色。绿色,
宽度:100,
身高:100,
),
),
],
),
),
),
);
}
}

这不是我想要的。如果条件为真,我将在构建函数中返回一个小部件,如果条件为真,我将在中设置另一个小部件的动画。所以,我有X小部件,在构建函数中我做“条件?返回X():返回Y();”。当条件发生变化时,我想在其中设置另一个小部件的动画,而不仅仅是更换它。