Flutter AnimatedBuilder 的基本使用

Posted 早起的年轻人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter AnimatedBuilder 的基本使用相关的知识,希望对你有一定的参考价值。

在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天、每周,都会留下一些脚印,就是这些创作的内容,有一种执着,就是不知为什么,如果你迷茫,不妨来瞅瞅码农的轨迹。

如果你有兴趣 你可以关注一下公众号 biglead 来获取最新的学习资料。

AnimatedBuilder继承AnimatedWidget,其中 animation参数为必传参数,用于监听该动画,然后通知更新UI,就无需手动调用addListener监听动画然后调用setState更新UI。

核心使用代码为:

AnimatedBuilder(
   //动画控制器
   animation: _animationController,
   //动画布局构建
   builder: (BuildContext context, Widget child) {
     return Container(...);
   },
   child:...,
 )

本页面实现 Demo 效果如下

在这里插入图片描述

启动函数入口

main() {
  runApp(MaterialApp(
    //不显示 debug标签
    debugShowCheckedModeBanner: false,
    //显示的首页面
    home: DemoAnimatedBuilder(),
  ));
}

DemoAnimatedBuilder 页面


///代码清单
class DemoAnimatedBuilder extends StatefulWidget {
  @override
  _DemoAnimatedBuilderState createState() => _DemoAnimatedBuilderState();
}

class _DemoAnimatedBuilderState extends State<DemoAnimatedBuilder>
    with SingleTickerProviderStateMixin {
  AnimationController _animationController;

  @override
  void initState() {
    super.initState();

    //0 -1.0
    _animationController = AnimationController(
        duration: Duration(
          milliseconds: 1000,
        ),
        vsync: this);
  }

  @override
  Widget build(BuildContext context) {
    //返回 或者说退出页面里的提示
    return Scaffold(
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.add),
        onPressed: () {
          _animationController.reset();
          _animationController.forward();
        },
      ),
      appBar: AppBar(
        title: Text("AnimatedBuilder"),
      ),
      body: Container(
        padding: EdgeInsets.all(30),
        child: Column(
          children: [

            //动画构建器
            AnimatedBuilder(
              //动画控制器
              animation: _animationController,
              //动画布局构建
              builder: (BuildContext context, Widget child) {
                return Container(
                  margin: EdgeInsets.only(top: 20 * _animationController.value),
                  color: Colors.grey[200],
                  width: MediaQuery.of(context).size.width,
                  height: 300,
                  child: Transform.translate(
                    offset: Offset(0.0, 100 * _animationController.value - 100),
                    child: child,
                  ),
                );
              },
              //动画过程中不执行刷新的子Widget
              child: Column(
                mainAxisSize: MainAxisSize.min,
                children: [
                  Text("测试使用"),
                  Text("测试使用"),
                  Text("测试使用"),
                ],
              ),
            )

          ],
        ),
      ),
    );
  }
}

以上是关于Flutter AnimatedBuilder 的基本使用的主要内容,如果未能解决你的问题,请参考以下文章

flutter学习-动画

Flutter-PositionedTransition位置变化动画

4-6 动画Animation开发指南-AnimatedWidget与AnimatedBuilder

Flutter-布局

flutter跳转原生页面后的穿透问题

flutter与原生混编(iOS)