使用颤振怎么实现动画效果

  介绍

本篇文章为大家展示了使用颤振怎么实现动画效果,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

首先,我们需要创建一个新项目myapp,然后把主要。飞镖的内容替换成下面的代码

import  & # 39;包:颤振/material.dart& # 39;;   import  & # 39;飞镖:数学# 39;;      void  main (), {   ,runApp (new  MyApp ());   }      class  MyApp  extends  StatelessWidget  {   ,@override   ,Widget 构建(BuildContext 上下文),{   ,return  new  MaterialApp (   标题:大敌;& # 39;Flutter 演示# 39;   ,:new  MyHomePage (),   ,);   ,}   }      class  MyHomePage  extends  StatefulWidget  {   ,@override   ,_MyHomePageState  createState(),=祝辞,new  _MyHomePageState ();   }      class  _MyHomePageState  extends  State< MyHomePage>, {   ,//随机([int  seed ]):创建一个随机数生成器   ,final  random =, new 随机();   ,int 数据集;      ,void  changeData (), {   ,设置状态((),{=,,dataSet  random.nextInt (100);   ,});   ,}      ,@override   ,Widget 构建(BuildContext 上下文),{   ,return  new 支架(   ,身体:new 中心(   ,孩子:new 文本(& # 39;数据集:数据集# 39;美元),   ,),   ,floatingActionButton: new  floatingActionButton (   ,onPressed: changeData,   ,孩子:new 图标(Icons.refresh),   ,),   ,);   ,}   }

启动项目后,应用程序会显示一个居中的文本标签,显示“数据集:零”和浮动按钮来刷新数据。

我们的应用程序生成的树结构如下图所示,您可以看的到,虽然控件概念相当广泛,但每个具体的控件类型通常具有非常重要的责任。

使用颤振怎么实现动画效果

通过定义用户界面的不可变的控件树,修改用户界面的唯一方法是重建树,当下一帧到期时告诉摆动一个子树所依赖的一些状态已经改变了。这种状态依赖的子树的根必须是StatefulWidget,一个StatefulWidget不是可变的,但是它的子树是由国家对象构建的.Flutter在构建期间通过树重建保留状态对象并将其附加到新树中的各自的控件,然后,它们确定该控件的子树是如何构建的。在我们的应用程序中,MyHomePage是以_MyHomePageState为其状态的StatefulWidget,每当用户按下按钮时,我们执行一些代码来更改_MyHomePageState。我们已经用设置状态划分了这个变化,以便可摆动以进行内部管理,并调度控件树进行重建。当发生这种情况时,_MyHomePageState将构建一个稍微不同的子树,这个子树以新的MyHomePage实例为根。

不可变的控件和状态依赖的子树是颤振提供的主要工具,用于处理响应异步事件(比如按钮,定时器刻度或输入数据)的复杂用户界面中的状态管理的复杂性。

我们的应用程序将保持简单的控件结构,但我们会做一些动画定制图形,第一步是用一个非常简单的图表替换每个数据集的文本显示。由于数据集当前仅有一个在0 ~ 100之间数字,所以图表将是一个带有单个条形的条形图,其高度由该数字确定,我们将使用初始值50来避免高度为null。

import  & # 39;包:颤振/material.dart& # 39;;   import  & # 39;飞镖:数学# 39;;      void  main (), {   ,runApp (new  MyApp ());   }      class  MyApp  extends  StatelessWidget  {   ,@override   ,Widget 构建(BuildContext 上下文),{   ,return  new  MaterialApp (   标题:大敌;& # 39;Flutter 演示# 39;   ,:new  MyHomePage (),   ,);   ,}   }      class  MyHomePage  extends  StatefulWidget  {   ,@override   ,_MyHomePageState  createState(),=祝辞,new  _MyHomePageState ();   }      class  _MyHomePageState  extends  State< MyHomePage>, {   ,//随机([int  seed ]):创建一个随机数生成器   ,final  random =, new 随机();   ,int  dataSet =, 50;      ,void  changeData (), {   ,设置状态((),{=,,dataSet  random.nextInt (100);   ,});   ,}      ,@override   ,Widget 构建(BuildContext 上下文),{   ,return  new 支架(   ,身体:new 中心(   ,孩子:new  CustomPaint (   大小,尺寸:new  (200.0, 100.0),   ,画家:new  BarChartPainter (dataSet.toDouble ())   ,)   ,),   ,floatingActionButton: new  floatingActionButton (   ,onPressed: changeData,   ,孩子:new 图标(Icons.refresh),   ,),   ,);   ,}   }//,CustomPaint:是将绘画委托给CustomPainter策略的控件   class  BarChartPainter  extends  CustomPainter  {   ,static  const  barWidth =, 10.0;      ,BarChartPainter (this.barHeight);   ,final  double  barHeight;      ,/*   ,void 涂料(   ,Canvas 画布,   Size 大小   ,)   ,当对象需要绘制时调用,它给出画布的坐标空间,使得原点位于框的左上角,   ,框的面积是大小参数的大小   ,*/,@override   ,void 油漆(Canvas ,帆布,Size 大小),{   ,final  paint =, new 油漆()=,,. . color  Colors.blue [400]=,,. . style  PaintingStyle.fill;   ,//绘制矩形:使用给定的漆绘制一个矩形,是否填充或描边(或两者)是由Paint.style控制   ,canvas.drawRect (   ,//Rect.fromLTWH (double 左,double ,, double 宽度,,double 高度):   ,//从左上角和上边缘构造一个矩形,并设置其宽度和高度   ,new  Rect.fromLTWH (   size.width-barWidth/2.0,   size.height-barHeight,   barWidth,   ,barHeight   ,),   ,油漆   ,);   ,}      ,/*   ,bool  shouldRepaint (   CustomPainter,   ,oldDelegate   ,)   ,当定制绘画委托类的新实例被提供给RenderCustomPaint对象时,   ,或任何时候使用自定义绘画委托类的新实例创建新的CustomPaint对象   ,(这相当于同一件事,因为后者是以前者实施)   ,*/,@override   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

使用颤振怎么实现动画效果