Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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
Flutter 设置按钮旋转的动画_Flutter_Dart - Fatal编程技术网

Flutter 设置按钮旋转的动画

Flutter 设置按钮旋转的动画,flutter,dart,Flutter,Dart,我试图在每次按下按钮时将自定义按钮内的图标旋转设置为180度的动画。我对颤振文档有点困惑。我知道我应该使用旋转变换,但我就是不知道怎么做。。这是我的钮扣 SizedBox.fromSize( size: Size(50, 50), child: ClipOval( child: Material( color: Colors.blue, child: InkWell(

我试图在每次按下按钮时将自定义按钮内的图标旋转设置为180度的动画。我对颤振文档有点困惑。我知道我应该使用旋转变换,但我就是不知道怎么做。。这是我的钮扣

     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度。你有相同的行为还是我做错了什么?