Flutter 设置按钮旋转的动画
我试图在每次按下按钮时将自定义按钮内的图标旋转设置为180度的动画。我对颤振文档有点困惑。我知道我应该使用旋转变换,但我就是不知道怎么做。。这是我的钮扣Flutter 设置按钮旋转的动画,flutter,dart,Flutter,Dart,我试图在每次按下按钮时将自定义按钮内的图标旋转设置为180度的动画。我对颤振文档有点困惑。我知道我应该使用旋转变换,但我就是不知道怎么做。。这是我的钮扣 SizedBox.fromSize( size: Size(50, 50), child: ClipOval( child: Material( color: Colors.blue, child: InkWell(
SizedBox.fromSize(
size: Size(50, 50),
child: ClipOval(
child: Material(
color: Colors.blue,
child: InkWell(
onTap: () {},
splashColor: Colors.black12,
child: RotationTransition(. //<== that is where I get
child: Icon(
Icons.filter_list, //rotate this icon
color: Colors.white,
),
),
),
),
),
),
SizedBox.fromSize(
尺寸:尺寸(50,50),
孩子:斜坡(
儿童:材料(
颜色:颜色,蓝色,
孩子:InkWell(
onTap:(){},
颜色:颜色。黑色12,
child:RotationTransition(.//基本上,您需要一个有状态的小部件,该小部件带有一个AnimationController,用于创建控制动画。在initState()
方法上创建该控制器,并在dispose()
方法上创建该控制器以防止可能的错误,这一点很重要
拥有控制器后,可以使用bool存储旋转方向,并使用动画控制器控制的动画旋转小部件。首先,它从0到0.5,然后从0.5到1
代码可以是这样的。你也可以看看我为这个例子创建的代码笔
import 'package:flutter/material.dart';
void main() {
runApp(
MaterialApp(
home: MyWidget(),
),
);
}
class MyWidget extends StatefulWidget{
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget>
with SingleTickerProviderStateMixin{
AnimationController _controller;
Animation<double> _animation;
bool dir = true;
@override
void initState(){
_controller = AnimationController(vsync: this, duration: Duration(seconds: 1));
super.initState();
}
@override
void dispose(){
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
_animation = Tween<double>(
begin: dir ? 0:0.5,
end: dir ? 0.5:1
).animate(_controller);
return Scaffold(
body: Center(
child: RotationTransition(
turns: _animation,
child: RaisedButton(
child: Text("Rotate"),
onPressed: (){
_controller.forward(
from: 0
);
setState(() {dir = !dir;});
}
)
)
),
);
}
}
导入“包装:颤振/材料.省道”;
void main(){
runApp(
材料聚丙烯(
主页:MyWidget(),
),
);
}
类MyWidget扩展了StatefulWidget{
@凌驾
_MyWidgetState createState()=>\u MyWidgetState();
}
类_MyWidgetState扩展状态
使用SingleTickerProviderStateMixin{
动画控制器_控制器;
动画(动画),;
bool dir=true;
@凌驾
void initState(){
_controller=AnimationController(vsync:this,duration:duration(秒:1));
super.initState();
}
@凌驾
无效处置(){
_controller.dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
_动画=吐温(
开始:dir?0:0.5,
完:dir?0.5:1
).设置动画(_控制器);
返回脚手架(
正文:中(
子:旋转变换(
旋转:_动画,
孩子:升起按钮(
子项:文本(“旋转”),
已按下:(){
_控制器,前进(
起:0
);
setState((){dir=!dir;});
}
)
)
),
);
}
}
我刚刚注意到,热重启后,在第一次点击时,它会旋转360度。你有相同的行为还是我做错了什么?