Animation 颤振条件动画

Animation 颤振条件动画,animation,dart,flutter,flutter-animation,Animation,Dart,Flutter,Flutter Animation,作为孩子,我有5个文本的堆栈。每个子对象都用FadeTransition对象包装。在堆栈之外,我有5个RaisedButton,每个按钮映射到一个文本。默认情况下,Text1的不透明度为1,其余的为0不透明度。单击按钮时,其映射的文本的不透明度变为1,其余变为0。 为此,我创建了5个不同的AnimationController,并硬编码了一个很长的逻辑我不确定这是否是在颤振中执行此操作的正确方法。 我相信一定有更简单的方法。 此外,这是一个简化的示例。我的实际应用程序中的问题甚至具有复杂的条件。

作为孩子,我有5个
文本
堆栈。每个子对象都用
FadeTransition
对象包装。在堆栈之外,我有5个
RaisedButton
,每个按钮映射到一个
文本。默认情况下,
Text
1的不透明度为
1
,其余的为
0
不透明度。单击按钮时,其映射的文本的不透明度变为
1
,其余变为
0
。 为此,我创建了5个不同的
AnimationController
,并硬编码了一个很长的逻辑我不确定这是否是在颤振中执行此操作的正确方法。 我相信一定有更简单的方法。 此外,这是一个简化的示例。我的实际应用程序中的问题甚至具有复杂的条件。(例如,单击按钮5时仅显示文本2和文本3,布尔值
hasViewedText1
为真。)

导入“dart:core”;
进口“包装:颤振/材料.省道”;
类测试扩展了StatefulWidget{
@凌驾
_状态createState(){
返回状态();
}
}
类_State使用TickerProviderStateMixin扩展状态{
AnimationController_AnimationController 1;
AnimationController_AnimationController 2;
AnimationController_animationController3;
AnimationController_AnimationController 4;
AnimationController_AnimationController 5;
@凌驾
void initState(){
super.initState();
_animationController1=新的AnimationController(
vsync:这个,,
持续时间:新的持续时间(秒数:1),
);
_animationController2=新的AnimationController(
vsync:这个,,
持续时间:新的持续时间(秒数:1),
);
_animationController3=新的AnimationController(
vsync:这个,,
持续时间:新的持续时间(秒数:1),
);
_animationController4=新的AnimationController(
vsync:这个,,
持续时间:新的持续时间(秒数:1),
);
_animationController5=新的AnimationController(
vsync:这个,,
持续时间:新的持续时间(秒数:1),
);
_一切都是倒退的();
_animationController1.forward();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:新的appBar(
标高:0.5,
标题:新文本(
“测试视图”,
样式:Theme.of(context).textTheme.title,
),
),
//正文:_buildBodyAnimationTest(),
//正文:_buildTuto(),
//正文:_builtLayoutBuilder(),
正文:_builtLayoutConditionalAnimation(),
);
}
小部件_builtLayoutConditionalAnimation(){
返回新列(
儿童:[
新专栏(
儿童:[
新升起的按钮(子项:新文本(“按钮1”),按下时:(){
_一切都是倒退的();
_animationController1.forward();
}),
新升起的按钮(子项:新文本(“按钮2”),按下时:(){
_一切都是倒退的();
_animationController2.forward();
}),
新升起的按钮(子项:新文本(“按钮3”),按下时:(){
_一切都是倒退的();
_animationController3.forward();
}),
新升起的按钮(子项:新文本(“按钮4”),按下时:(){
_一切都是倒退的();
_animationController4.forward();
}),
新升起的按钮(子项:新文本(“按钮5”),按下时:(){
_一切都是倒退的();
_animationController5.forward();
}),
],
),
新堆栈(
儿童:[
FadeTransition(不透明度:_animationController1,子级:新文本(“单击文本1”),
FadeTransition(不透明度:_animationController2,子级:新文本(“单击文本2”),
FadeTransition(不透明度:_animationController3,子级:新文本(“单击文本3”),
FadeTransition(不透明度:_animationController4,子级:新文本(“单击文本4”),
FadeTransition(不透明度:_animationController5,子级:新文本(“单击文本5”),
],
),
],
);
}
void_everyThingBackward(){
_animationController1.reverse();
_animationController2.reverse();
_animationController3.reverse();
_animationController4.reverse();
_animationController5.reverse();
}
}

这可以通过使用
动画切换器
小部件简化

以下是一个完整的示例:

import 'package:flutter/material.dart';

void main() => runApp(App());

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: SafeArea(child: Center(child: Test())),
      ),
    );
  }
}

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

class _TestState extends State<Test> {
  Widget _child = Text(
    "No Button Tapped!",
    key: UniqueKey(),
  );

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        RaisedButton(
          child: Text("Button 1"),
          onPressed: () {
            setState(() {
              _child = Text(
                "Button 1 Tapped!",
                key: UniqueKey(),
              );
            });
          },
        ),
        RaisedButton(
          child: Text("Button 2"),
          onPressed: () {
            setState(() {
              _child = Text(
                "Button 2 Tapped!",
                key: UniqueKey(),
              );
            });
          },
        ),
        RaisedButton(
          child: Text("Button 3"),
          onPressed: () {
            setState(() {
              _child = Text(
                "Button 3 Tapped!",
                key: UniqueKey(),
              );
            });
          },
        ),
        AnimatedSwitcher(
          duration: Duration(milliseconds: 200),
          child: _child,
        ),
      ],
    );
  }
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(App());
类应用程序扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
家:脚手架(
主体:安全区域(子对象:中心(子对象:测试()),
),
);
}
}
类测试扩展了StatefulWidget{
@凌驾
_TestState createState();
}
类_TestState扩展状态{
小部件_child=文本(
“不要按按钮!”,
键:UniqueKey(),
);
@凌驾
小部件构建(构建上下文){
返回列(
儿童:[
升起的按钮(
子项:文本(“按钮1”),
已按下:(){
设置状态(){
_child=文本(
“点击按钮1!”,
键:UniqueKey(),
);
});
},
),
升起的按钮(
子项:文本(“按钮2”),
已按下:(){
设置状态(){
_child=文本(
“点击按钮2!”,
键:UniqueKey(),
);
});
},
),
升起的按钮(
子项:文本(“按钮3”),
已按下:(){
设置状态(){
_child=文本(
“点击按钮3!”,
键:UniqueKey(),
);
});
},
),
动画切换器(
持续时间:持续时间(毫秒:200),
孩子:孩子,
),
],
);
}
}
这个
import 'package:flutter/material.dart';

void main() => runApp(App());

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: SafeArea(child: Center(child: Test())),
      ),
    );
  }
}

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

class _TestState extends State<Test> {
  Widget _child = Text(
    "No Button Tapped!",
    key: UniqueKey(),
  );

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        RaisedButton(
          child: Text("Button 1"),
          onPressed: () {
            setState(() {
              _child = Text(
                "Button 1 Tapped!",
                key: UniqueKey(),
              );
            });
          },
        ),
        RaisedButton(
          child: Text("Button 2"),
          onPressed: () {
            setState(() {
              _child = Text(
                "Button 2 Tapped!",
                key: UniqueKey(),
              );
            });
          },
        ),
        RaisedButton(
          child: Text("Button 3"),
          onPressed: () {
            setState(() {
              _child = Text(
                "Button 3 Tapped!",
                key: UniqueKey(),
              );
            });
          },
        ),
        AnimatedSwitcher(
          duration: Duration(milliseconds: 200),
          child: _child,
        ),
      ],
    );
  }
}