• AnimatedSwitcher


    好久没写博客了,今天写一个新学的Widget:AnimatedSwitcher

    其构造函数如下:

    const AnimatedSwitcher({
        Key key,
        this.child,
        @required this.duration,
        this.reverseDuration,
        this.switchInCurve = Curves.linear,
        this.switchOutCurve = Curves.linear,
        this.transitionBuilder = AnimatedSwitcher.defaultTransitionBuilder,
        this.layoutBuilder = AnimatedSwitcher.defaultLayoutBuilder,
      }) 

    该组件可以达到如下图所示的效果:

    该组件能够动态切换一个child的不同形态,适用于点击样式的转变/Tab切换等待

    child为实际显示的Widget;

    duration:动画持续时间;

    reverseDuration:一般不指定,默认和duration一样;

    两个curve不说了;

    transitionBuilder:切换动画builder,签名是:

    Widget Function(Widget child, Animation<double> animation);

    layoutBuilder:定位子组件位置的函数,签名:

    Widget Function(Widget currentChild, List<Widget> previousChildren);

    例子:

    class _MyHomePageState extends State<MyHomePage> {
    
      Color color = Colors.red;
      var cont = Container(key: ValueKey(1), color: Colors.red,  50, height: 45,);
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                FlatButton(child: Text('点我'), onPressed: () {setState(() {
                  if (color == Colors.red) {
                    cont = Container(key: ValueKey(2), color: Colors.green,  50, height: 45,);
                    color = Colors.green;
                  } else {
                    cont = Container(key: ValueKey(1), color: Colors.red,  50, height: 45,);
                    color = Colors.red;
                  }
                });},),
                SizedBox(height: 50,),
                AnimatedSwitcher(
                  duration: Duration(milliseconds: 500),
                  child: cont,
                  transitionBuilder: (child, animation) {
                    return ScaleTransition(
                      child: child,
                      scale: animation.drive(Tween(begin: 0, end: 1)),
                    );
                  },
                ),
              ],
            ),
          ),
        );
      }
    }

    上面代码中的TransitionBuilder参数使用了ScaleTransition,是切换大小的效果,也可以使用fadetransition(渐变效果)等其它切换效果。

  • 相关阅读:
    线程同步总结
    Map,HashMap,LinkedHashMap,TreeMap比较和理解
    实现自定义注解
    SSM框架中写sql在dao文件中以注解的方式
    SSM框架中写sql在xml文件中
    自由创蚁-青少年积木式编程平台正式发布了!
    回调函数
    全面理解Javascript闭包和闭包的几种写法及用途
    hover伪类
    添加背景音乐
  • 原文地址:https://www.cnblogs.com/FdWzy/p/13731906.html
Copyright © 2020-2023  润新知