首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Flutter :在无状态构件中创建动画控制器

Flutter是一款跨平台的移动应用开发框架,由Google开发和维护。它使用Dart编程语言,并提供了丰富的UI组件和工具,使开发人员能够快速构建高性能、精美的移动应用程序。

在Flutter中,动画是通过使用动画控制器来管理的。动画控制器是一个用于控制动画的对象,它定义了动画的状态、速度、持续时间等属性。在无状态构件中创建动画控制器可以通过以下步骤进行:

  1. 导入必要的Flutter包:
代码语言:txt
复制
import 'package:flutter/material.dart';
  1. 创建一个继承自StatefulWidget的无状态构件:
代码语言:txt
复制
class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}
  1. 在构件的状态类中定义动画控制器:
代码语言:txt
复制
class _MyWidgetState extends State<MyWidget> with SingleTickerProviderStateMixin {
  AnimationController _controller;

  @override
  void initState() {
    super.initState();
    _controller = AnimationController(
      vsync: this, // 用于垂直同步动画的对象
      duration: Duration(seconds: 1), // 动画持续时间
    );
  }

  @override
  void dispose() {
    _controller.dispose(); // 释放动画控制器资源
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    // 构建界面,使用动画控制器的值来实现动画效果
    return Container(
      width: _controller.value * 200, // 根据动画控制器的值设置宽度
      height: 200,
      color: Colors.blue,
    );
  }
}

在上述代码中,使用了AnimationController类来创建动画控制器。在构件的初始化阶段(initState()方法)中,通过指定vsync参数为当前状态对象(使用with关键字混入SingleTickerProviderStateMixin),将该动画控制器与垂直同步机制相关联。通过duration参数设置了动画的持续时间。

在构件的dispose()方法中,需要释放动画控制器的资源,以防止内存泄漏。

最后,在构建界面的build()方法中,可以使用动画控制器的value属性来获取当前动画的值,并将其应用于需要实现动画效果的属性上。在示例中,通过设置Container的宽度,根据动画控制器的值实现动态变化的宽度。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 云计算服务:https://cloud.tencent.com/product
  • 云原生服务:https://cloud.tencent.com/product/tke
  • 音视频服务:https://cloud.tencent.com/product/tiia
  • 人工智能服务:https://cloud.tencent.com/product/tai
  • 物联网服务:https://cloud.tencent.com/product/iotexplorer
  • 存储服务:https://cloud.tencent.com/product/cos
  • 区块链服务:https://cloud.tencent.com/product/baas
  • 元宇宙服务:https://cloud.tencent.com/product/meta
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Flutter】Animation 动画 ( AnimatedWidget 动画使用流程 | 创建动画控制器 | 创建动画 | 创建 AnimatedWidget 动画组件 | 动画运行 )

文章目录 ◯、AnimatedWidget 组件引入 一、创建 AnimatedWidget 动画组件 二、创建动画控制器 三、创建动画 四、动画运行 五、完整代码示例 六、相关资源 AnimatedWidget...动画使用流程 : ① 创建 AnimatedWidget 动画组件 ② 创建动画控制器创建动画动画运行 ◯、AnimatedWidget 组件引入 ---- 在上一篇博客 【Flutter...】Animation 动画 ( Flutter 动画基本流程 | 创建动画控制器 | 创建动画 | 设置值监听器 | 设置状态监听器 | 布局中使用动画值 | 动画运行 ) , 使用动画时 , 需要给动画添加值监听器..., 每当动画值更新后 , 都会回调该监听器 , 监听器的回调方法 , 需要调用 setState 方法 , 将该动画值设置给组件 ; 上面的操作很繁琐 , 需要注册监听器 , 获取动画值 , 然后将动画值设置给组件...; " AnimatedWidget 动画组件 " 代码示例 : 组件刷新时 , 每次刷新都要调用该组件的 build 方法 , 这里使用 Text 组件显示动画状态和值 , 并绘制动画作用的组件

1.9K10

Flutter】Animation 动画 ( Flutter 动画基本流程 | 创建动画控制器 | 创建动画 | 设置值监听器 | 设置状态监听器 | 布局中使用动画值 | 动画运行 )

文章目录 一、创建动画控制器 二、创建动画 三、设置值监听器 四、设置状态监听器 五、布局中使用动画值 六、动画运行 七、完整代码示例 八、相关资源 Flutter 动画基本流程 : ① 创建动画控制器...② 创建动画 ③ 设置值监听器 ④ 设置状态监听器 ⑤ 布局中使用动画值 ⑥ 动画运行 一、创建动画控制器 ---- AnimationController 构造函数参数说明 : AnimationController...duration 参数即可 ; 创建动画控制器代码示例 : /// 1....0 , 结束值 300 , 动画在执行的 3 秒时间内 ( 动画控制器中指定的动画持续时间 ) , 自动计算出每个时间点的 0 ~ 300 之间的动画值 ; 创建动画代码示例 : /// 2...}); 五、布局中使用动画值 ---- build 方法返回的布局组件 , 使用上述监听器获取的动画值 animationValue , 该值是 0 ~ 300 之间的浮点数 ; 这里使用动画值作为正方形组件的宽高

1.4K40
  • Flutter】Animation 动画 ( AnimatedBuilder 动画使用流程 | 创建动画控制器 | 创建动画 | 创建动画作用的组件 | 关联动画与组件 | 动画执行 )

    文章目录 ◯、AnimatedBuilder 引入 一、创建动画控制器 二、创建动画 三、创建动画作用的组件 四、创建 AnimatedBuilder 关联动画与组件 五、动画运行 六、完整代码示例 七...、相关资源 AnimatedBuilder 动画使用流程 : ① 创建动画控制器创建动画创建动画作用的组件 ④ 创建 AnimatedBuilder 关联动画与组件 ⑤ 执行动画 ◯、AnimatedBuilder...引入 ---- 在上一篇博客 【Flutter】Animation 动画 ( AnimatedWidget 动画使用流程 | 创建动画控制器 | 创建动画 | 创建 AnimatedWidget 动画组件...; 然后在这个组件返回一个包含 AnimatedBuilder 组件的组件 , 其中将 Animation 动画 和 Widget 组件都设置该 AnimatedBuilder , Animation...动画设置 animation 字段 , child 字段需要设置到 build 字段 , 设置的方法如下 : AnimatedBuilder( animation

    1.7K10

    Flutter&Flame游戏 - 拾玖】构件特效 | 了解 EffectController 体系

    参上 | 角色的血条 【Flutter&Flame 游戏 - 陆】暴击 Dash | 文字构件的使用 【Flutter&Flame 游戏 - 柒】人随指动 | 动画点触与移动 【Flutter&Flame...这些控制器本质上和 Flutter 原生的 AnimationController 是类似的,都是对数值的进行变换处理,从而让动画的变化效果。...因为 Flame 一个持续运转的 Ticker ,所以 EffectController 相比于原生而言是更加简单的,不需要考虑 Ticker 的创建、销毁等处理。...---- 2、线性效果控制器: LinearEffectController 如果看过 《Flutter 动画探索 - 流光幻影》,那么你对动画控制器的插值一定不会陌生。...---- 6.噪音曲线控制器: NoiseEffectController 这里噪音曲线指的是 0 附近随机震荡的的点,源码通过 SimplexNoise 对象进行转换。

    49110

    Flutter 创建漂亮的底部导航栏

    ConvexBottomBar是一个底部导航栏组件,用于展现凸起的TAB效果,支持多种内置样式与动画交互。你可以https://appbar.codemagic.app上找到在线样例。...Convex_Bottom_Bar 演示,首先,我们在这个类创建一个名为 MyHomePage ()的有状态类,我们创建一个值为 0 的变量 selectedpage 类型的 integer pass...在这里,我们创建 ConvexAppBar ()并传递 Items、 initialActiveIndex 和 onTap。条目中,我们通过所有的屏幕,我们希望我们的应用程序显示。... initialActiveIndexwe ,我们传递已经定义的变量 selectedpage, onTap ,我们传递 index 并在 setState 定义 setState () ,我们传递... Home 类,我们定义一个带有背景颜色的文本。

    8.1K10

    Flutter&Flame游戏 - 贰拾】构件特效 | 其他 EffectControler

    参上 | 角色的血条 【Flutter&Flame 游戏 - 陆】暴击 Dash | 文字构件的使用 【Flutter&Flame 游戏 - 柒】人随指动 | 动画点触与移动 【Flutter&Flame...游戏 - 捌】装弹完毕 | 角色武器发射 【Flutter&Flame 游戏 - 玖】探索构件 | Component 是什么 【Flutter&Flame 游戏 - 拾】探索构件 | Component...生命周期回调 【Flutter&Flame 游戏 - 拾壹】探索构件 | Component 使用细节 【Flutter&Flame 游戏 - 拾贰】探索构件 | 角色管理 【Flutter&Flame...如下两侧的六个控制器有一个共同的特点,它们都会持有 子控制器 ,也就是说它们是一个控制器的基础上,再施加的变化。...也就是说,会这些控制器会 依次 执行动画

    45350

    Flutter&Flame游戏 - 拾柒】构件特效 | 了解 Effect 体系

    参上 | 角色的血条 【Flutter&Flame 游戏 - 陆】暴击 Dash | 文字构件的使用 【Flutter&Flame 游戏 - 柒】人随指动 | 动画点触与移动 【Flutter&Flame...实现创建 MoveByEffect 对象,设置偏移量和控制器,然后附加在角色构建上面即可。...实现创建 MoveToEffect 对象,设置目标点和控制器,然后附加在角色构建上面即可。...移除特效: 移除特效 从 RemoveEffect 的源码可以看出,这个特效非常简单,甚至连控制器都不需要指定。RemoveEffect 的作用是 delay 秒后,移除附加的构件。...如果时长为 0 ,那这和构件直接触发 removeFromParent 没有什么太大的区别。 image.png 如下测试,点击数字键 7 ,显示边框信息示意,然后 3 秒后消失。

    79440

    Flutter 创建可拖动的浮动操作按钮

    本教程有一个示例,说明您需要做什么才能创建浮动操作按钮,只要它位于父小部件内,就可以将其拖动到屏幕周围的任何位置。 创建可拖动的浮动操作按钮 我们将为这样的小部件创建一个类。...该_isDragging状态变量是为此目的而设立。它应该更新到true指针移动时。...所以,我们可以检查内部onPointerUpcallback 仅onPressed值为_isDraggingis 时调用回调false。 下面是用于创建可拖动浮动操作按钮的类。...您需要向父小部件添加一个键并将其传递给DraggableFloatingActionButton小部件从key,你可以从currentContext属性获取RenderBox,它有findRenderObject...创建可拖动的浮动操作按钮。

    5.7K10

    Flutter&Flame游戏 - 拾捌】构件特效 | ComponentEffect 一族

    参上 | 角色的血条 【Flutter&Flame 游戏 - 陆】暴击 Dash | 文字构件的使用 【Flutter&Flame 游戏 - 柒】人随指动 | 动画点触与移动 【Flutter&Flame...从红框的逻辑可以看出,会寻找上级第一个非 Effect 的构件,且该构件的类型是指定的 T 类型。也就是找到宿主构件为 target 成员赋值,注意如果宿主类型和指定的 T 类型会抛异常。...使用方式上合前面也是一样的,给出变化数据和控制器即可: void addSizeEffectBy(){ Effect effect = SizeEffect.by( Vector2(5,5...image.png ---- 本文介绍了一下 ComponentEffect 一族的特效,该族特点是会持有一个 Componemt 类型的 target 对象, onMount 初始化。...各个特效的实现类,本质上就是对 target 构建属性的补间变化,产生动画效果。下一篇,我们将认识一下 EffectController ,如何对动画特效进行控制。

    59730

    Flutter&Flame游戏 - 捌】装弹完毕 | 角色武器发射

    | 文字构件的使用 【Flutter&Flame 游戏 - 柒】人随指动 | 动画点触与移动 【Flutter&Flame游戏 - 捌】装弹完毕 | 角色武器发射 【Flutter&Flame游戏...- 玖】探索构件 | Component 是什么 【Flutter&Flame游戏 - 拾】探索构件 | Component 生命周期回调 【Flutter&Flame游戏 - 拾壹】探索构件 | Component...主动触发帧动画 前面我们的弓手是不断循环的帧动画,现在来先看一下如何主动触发:比如下面案例,按下键盘的 J 键就执行一次动画,代码详见 【08/01】 image.png https://p9-juejin.byteimg.com...---- Adventurer 的 onLoad 方法,指定 playing 为 false 可以开始不会执行帧动画。...子弹诞生之后,就会一直处于运动状态,可以覆写 update 方法,根据时间和速度计算偏移量。如下 tag1 处所示:当偏移总量大于 maxRange 时,进行移除。

    43110

    Flutter 移动应用程序创建一个列表

    Flutter 是一个流行的开源工具包,它可用于构建跨平台的应用。文章《用 Flutter 创建移动应用》,我已经向大家展示了如何在 Linux 安装 Flutter创建你的第一个应用。...查看Flutter应用的主要部分 Flutter 应用的典型入口点是 main() 函数,我们通常可以文件 lib/main.dart 中找到它: void main() { runApp(MyApp... lib 目录我们创建一个新文件并命名为 item_details_page。...添加一些动画 现在让我们来添加一些基础的动画: 找到 ItemWidget 代码块(或者文件) 将光标放到 build() 方法的 Icon() 微件上 按 Alt+Enter,然后选择“Wrap with...当 Hero 检测到不同页面(MaterialPageRoute)存在相同标签的 Hero 时,它会自动在这些不同的页面应用过渡动画。 可以安卓模拟器或物理设备上运行我们的应用来测试这个动画

    3.1K10

    Flutter&Flame 游戏 - 柒】人随指动 | 动画点触与移动

    | 文字构件的使用 【Flutter&Flame 游戏 - 柒】人随指动 | 动画点触与移动 【Flutter&Flame游戏 - 捌】装弹完毕 | 角色武器发射 【Flutter&Flame游戏...比如下面的人物点击时,会动画移动到点击的位置,这就涉及到构件动画移动。 另外还有个小细节,就是点击时触点的动画,其特点是点击后显示,一会便自动消失。本文的目标就是实现这两个小功能。...点触动画 这里点击时一闪的小星星,本质上是一个序列动画,如下是序列图片: image.png 我们 【第一篇】 就介绍了通过 SpriteAnimationComponent 构件对序列帧进行动画播放...这里把触点指示器封装成一个构件 TouchIndicator ,由外界提供 position 确定位置。 onLoad 回调,加载序列帧图片形成 SpriteAnimation 。...如下, Adventurer 类定义toTarget 方法,使用 MoveEffect.to 创建效果对象并进行添加。

    61521

    Flutter&Flame 游戏 - 贰肆】pinball 源码分析 - 项目结构介绍.md

    参上 | 角色的血条 【Flutter&Flame 游戏 - 陆】暴击 Dash | 文字构件的使用 【Flutter&Flame 游戏 - 柒】人随指动 | 动画点触与移动 【Flutter&Flame...生命周期回调 【Flutter&Flame 游戏 - 拾壹】探索构件 | Component 使用细节 【Flutter&Flame 游戏 - 拾贰】探索构件 | 角色管理 【Flutter&Flame...加载界面在哪里 pinball 游戏开始时,会显示资源加载的界面,是一个加载的进度条,如下所示。那问题来了,如何定位这个界面源码的位置。...如下, lib/assets_manager 文件夹管理着资源加载的 bloc 业务逻辑和 views 视图: 下面我们就进入 AssetsManagerCubit ,来看一下资源是如何加载的,以及进度状态的产出...---- 这样状态数据的进度值 progress 就会变化,整个加载的小体系就得以运转,从业务逻辑到视图更新展示,可以体会一下,bloc 在其中的角色,品味一下状态管理的价值。

    78810

    Flutter&Flame 游戏 - 贰伍】pinball 源码分析 - 资源加载与 Loading

    参上 | 角色的血条 【Flutter&Flame 游戏 - 陆】暴击 Dash | 文字构件的使用 【Flutter&Flame 游戏 - 柒】人随指动 | 动画点触与移动 【Flutter&Flame...生命周期回调 【Flutter&Flame 游戏 - 拾壹】探索构件 | Component 使用细节 【Flutter&Flame 游戏 - 拾贰】探索构件 | 角色管理 【Flutter&Flame...加载界面在哪里 pinball 游戏开始时,会显示资源加载的界面,是一个加载的进度条,如下所示。那问题来了,如何定位这个界面源码的位置。...如下, lib/assets_manager 文件夹管理着资源加载的 bloc 业务逻辑和 views 视图: 下面我们就进入 AssetsManagerCubit ,来看一下资源是如何加载的,以及进度状态的产出...---- 这样状态数据的进度值 progress 就会变化,整个加载的小体系就得以运转,从业务逻辑到视图更新展示,可以体会一下,bloc 在其中的角色,品味一下状态管理的价值。

    79910

    Flutter&Flame 游戏 - 贰玖】pinball 源码分析 - 视口与相机

    】Canvas 参上 | 角色的血条 【Flutter&Flame 游戏 - 陆】暴击 Dash | 文字构件的使用 【Flutter&Flame 游戏 - 柒】人随指动 | 动画点触与移动 【Flutter...场景主要有 3 种构件:主角 、背景场地 和岩石方块 。场地是圆形和正方向构成的,颜色随机,其中圆形是正方向的内接圆。岩石随机出现在场地中,主角是一个动画帧。...---- 如下所示,角色移动过程,始终保持中心位置,但感官上它确实在运动。通过相机和角色的伴随移动,就可以始终让角色成为焦点,角色移动的过程,视口内容因相机的移动而扩展,这是符合我们常识的。...> _foci = {}; 复制代码 ---- CameraFocusingBehavior 监听着 GameState 的变化,所以可以游戏状态变化时进行对应的处理。...和新方法是 onNewState 回调执行的 _zoomTo 方法: ---- 这里 pinball 项目中封装了 CameraZoom 特效对动画缩放进行了封装,本质就是不断改变 zoom 值产生动画效果而已

    96920

    Flutter&Flame 游戏 - 贰柒】pinball 源码分析 - 角色选择与玩法面板

    】Canvas 参上 | 角色的血条 【Flutter&Flame 游戏 - 陆】暴击 Dash | 文字构件的使用 【Flutter&Flame 游戏 - 柒】人随指动 | 动画点触与移动 【Flutter...---- 选择对应的角色图标时,背景会进行对应的变化。很明显,两个不同界面的数据需要共享,很自然就会想到使用 状态管理 。...所以关键就是该方法的触发时机: ---- StartGameListener ,会监听 StartGameState 状态的变化,如果是 howToPlay 状态,则会触发 _onHowToPlay...---- StartGameBloc ,CharacterSelected 事件会将状态值变为 howToPlay 。...从中可以看出 bloc 状态数据共享,以及状态变化监听的价值。

    97440

    Flutter&Flame 游戏 - 肆】精灵图片加载方式

    | 文字构件的使用 【Flutter&Flame 游戏 - 柒】人随指动 | 动画点触与移动 【Flutter&Flame游戏 - 捌】装弹完毕 | 角色武器发射 【Flutter&Flame游戏...精灵图动画的加载 第一篇 我们就介绍过使用 SpriteAnimationComponent 构件显示多帧动画,其实本质上就是多个 Sprite 对象,循环切换而已。...可以写个 extension 来拓展一下,可能一般人顺手就在 lib 创建的文件夹开写了。看 flutter 官方的 pinball 项目中,会对模块进行分包,而不是所有代码都塞在一块。...以后可能还会写其他的拓展方法以便使用,这里也项目中创建一个 packages 来进行分包管理。这样的另一个好处是:我可以将 flame_ext 分享到 pub ,让所有人都可以使用。...---- 下面说下创建包的方式, New Flutter Projrct Projrct type 选择 Package 即可,如下把包创建在项目根目录的 packages 下: ---- 然后

    1.1K20

    Flutter&Flame 游戏 - 贰】操纵杆与角色移动

    | 文字构件的使用 【Flutter&Flame 游戏 - 柒】人随指动 | 动画点触与移动 【Flutter&Flame游戏 - 捌】装弹完毕 | 角色武器发射 【Flutter&Flame游戏...- 玖】探索构件 | Component 是什么 【Flutter&Flame游戏 - 拾】探索构件 | Component 生命周期回调 【Flutter&Flame游戏 - 拾壹】探索构件 | Component...方式也很简单,创建 HeroComponent 对象,再添加到场景即可。...另外, Component 类定义了 update 方法,可以覆写它来监听每次刷新的事件。...Flame 引擎的 GameLoop 就相当于一个没有停止时间,不断运行的动画。看过《动画小册》的应该对这些比较清楚,这里不过多引申,后面有机会再掰扯掰扯源码。

    85220

    Flutter&Flame游戏 - 玖】探索构件 | Component 是什么

    | 文字构件的使用 【Flutter&Flame 游戏 - 柒】人随指动 | 动画点触与移动 【Flutter&Flame游戏 - 捌】装弹完毕 | 角色武器发射 【Flutter&Flame游戏...前面知道构件中有个 onLoad 的异步方法用于加载资源,执行异步方法的前一刻就是 loading 状态。该状态会持续到异步方法执行完毕,变成 loaded 状态。..._removals 列表,等待下帧触发时移除。此时该子构件状态为 removing 。当构件被从父节点上移除后,其状态为 removed ,就变成了孤魂野鬼,等待被 GC 回收。...isMounted: mounted 或 removing 状态,表示构件依然树上。 shouldRemove: removing 状态,表示构件已被收集到移除列表,将在下一帧中被移除。...---- 另外,Effect 一族定义 effects 包,我们在前面用到的 MoveEffect 就是这类的构件之后的学习我们再深入认识其他的效果,或者自定义 Effects 。

    59540
    领券