Flutter 二元动画颤振
我想在单击按钮时播放动画。在第一次按下时,小部件旋转180度,在第二次按下时,小部件再旋转180度(即,它返回到其原始位置)。我该怎么做 模拟手势检测器按钮Flutter 二元动画颤振,flutter,dart,Flutter,Dart,我想在单击按钮时播放动画。在第一次按下时,小部件旋转180度,在第二次按下时,小部件再旋转180度(即,它返回到其原始位置)。我该怎么做 模拟手势检测器按钮 Expanded( child: GestureDetector( onTap: () => setState(() { if (tap
Expanded(
child: GestureDetector(
onTap: () => setState(() {
if (tapValue == 0) {
tapValue++;
animController.forward();
beginValue = 0.0;
endValue = 0.5;
} else {
tapValue--;
animController.forward();
}
}),
child: Container(
child: Image.asset('assets/images/enableAsset.png'),
),
),
),
我要旋转的小部件
child: CustomPaint (
painter: SmileyPainter(),
child: RotationTransition(
turns: Tween(begin: beginValue, end: endValue,).animate(animController),
child: CustomPaint (
painter: Smile(),
),
),
)
动画控制器
@override
void initState() {
animController = AnimationController(
duration: const Duration(milliseconds: 400),
vsync: this,
);
super.initState();
}
替换
else {tapValue--;
animController.forward();
}
到
如果您想要实现的只是旋转一个小部件,我建议您避免使用控制器。这不仅可以简化您的代码,还可以节省处理代码的繁琐工作 我逐渐意识到,使用
TweenAnimationBuilder
小部件几乎可以避免任何控制器
下面是一个如何使其适用于您的案例的示例:
Scaffold(
floatingActionButton: FloatingActionButton(
onPressed: () {
_rotationAngle += pi;
print(_rotationAngle);
setState(() {
});
},
),
body: Center(
child: TweenAnimationBuilder(
duration: Duration(milliseconds: 300),
tween: Tween<double>(begin: 0, end: _rotationAngle),
builder: (BuildContext context, double value, Widget child) {
return Transform.rotate(
angle: value,
child: child,
);
},
child: Container(
height: 500,
width: 50,
color: Colors.redAccent,
),
),
),
);
脚手架(
浮动操作按钮:浮动操作按钮(
已按下:(){
_旋转角度+=π;
打印(旋转角度);
设置状态(){
});
},
),
正文:中(
孩子:TweeAnimationBuilder(
持续时间:持续时间(毫秒:300),
吐温:吐温(开始:0,结束:旋转角度),
生成器:(BuildContext上下文,双值,小部件子项){
返回Transform.rotate(
角度:值,
孩子:孩子,
);
},
子:容器(
身高:500,
宽度:50,
颜色:Colors.redAccent,
),
),
),
);
Scaffold(
floatingActionButton: FloatingActionButton(
onPressed: () {
_rotationAngle += pi;
print(_rotationAngle);
setState(() {
});
},
),
body: Center(
child: TweenAnimationBuilder(
duration: Duration(milliseconds: 300),
tween: Tween<double>(begin: 0, end: _rotationAngle),
builder: (BuildContext context, double value, Widget child) {
return Transform.rotate(
angle: value,
child: child,
);
},
child: Container(
height: 500,
width: 50,
color: Colors.redAccent,
),
),
),
);