美文网首页
Flutter AnimationController

Flutter AnimationController

作者: 倪大头 | 来源:发表于2020-03-26 15:43 被阅读0次
    line.gif

    State要加上with SingleTickerProviderStateMixin,
    Tween(begin: 0.0, end: 90.0)是在Duration(milliseconds: 100)一百毫秒里返回0.0-90.0的double值,需要调用的地方用lineAnimation.value取值,..addListener,这个前面加..的语法是指用Tween(begin: 0.0, end: 90.0).animate(lineController)的返回值来调用addListener

    class _FollowListState extends State<FollowList>
        with SingleTickerProviderStateMixin {
    
      AnimationController lineController;
      Animation<double> lineAnimation;
    
      @override
      initState() {
        super.initState();
    
        lineController = AnimationController(
            vsync: this, duration: const Duration(milliseconds: 100));
        lineAnimation =
            Tween(begin: 0.0, end: 90.0)
                .animate(lineController)
                  ..addListener(() {
                    setState(() {});
                  });
      }
    
      @override
      dispose() {
        // 释放
        lineController.dispose();
        super.dispose();
      }
    

    调用:

    Container(
        margin: EdgeInsets.only(left: lineAnimation.value),
        width: 90,
        height: 3,
        decoration: BoxDecoration(
            borderRadius: BorderRadius.circular(1.5),
            color: mainColor,
        ),
    ),
    

    执行动画:

    lineController.forward();
    

    反向执行:

    lineController.reverse();
    

    加入addStatusListener可以监听动画执行状态,可以在回调里进行动画循环:

    lineAnimation = Tween(begin: 0.0, end: 90.0).animate(lineController)
          ..addListener(() {
            setState(() {});
          })
          ..addStatusListener((status) {
            if (status == AnimationStatus.completed) {
              lineController.reverse();
            } else if (status == AnimationStatus.dismissed) {
              lineController.forward();
            }
          });
    

    相关文章

      网友评论

          本文标题:Flutter AnimationController

          本文链接:https://www.haomeiwen.com/subject/rzjcuhtx.html