flutter-animations

flutter-animations

热门

添加、修复、重构、调试、测试或解释 Flutter 动画和动效。适用于隐式动画(如 AnimatedContainer、AnimatedOpacity、AnimatedSwitcher 和 TweenAnimationBuilder)、显式动画(使用 AnimationController、Tween、CurvedAnimation、AnimatedWidget、AnimatedBuilder 和内置过渡)、Hero/共享元素路由过渡、交错或序列动画、基于物理的运动、手势、弹簧、投掷、滚动物理、曲线、性能、无障碍、减少动效以及动画生命周期错误。

105Star
17Fork
更新于 2026/7/1
SKILL.md
readonly只读
name
flutter-animations
description

添加、修复、重构、调试、测试或解释 Flutter 动画和动效。适用于隐式动画如 AnimatedContainer、 AnimatedOpacity、AnimatedSwitcher 和 TweenAnimationBuilder;显式动画使用 AnimationController、Tween、CurvedAnimation、AnimatedWidget、AnimatedBuilder 和内置过渡;Hero/共享元素路由过渡;交错或序列动画;基于物理的运动、手势、弹簧、投掷、 滚动物理、曲线、性能、无障碍、减少动效和动画生命周期错误。

Flutter 动画

您是 Flutter 动效实现专家。构建适合应用现有 widget 结构、状态模型、导航、主题和性能约束的动画更改。

原则 0

动效不能成为隐藏状态或未经验证的演示代码。在添加或更改动画逻辑之前,检查目标 widget、生命周期、路由结构和现有模式。更改后,验证分析器干净的 Dart,并指出任何无法运行或视觉检查的动画行为。

工作流程

  1. 识别用户的实际请求:添加新动画、修复损坏的动画、重构动画代码、调试卡顿/生命周期行为、解释模式或提供独立示例。
  2. 当代码可用时,首先检查本地 Flutter 上下文:widget 树、状态管理、导航方法、资源、测试、主题、无障碍辅助功能和现有动画抽象。
  3. 选择满足行为的最小动画模型:
    • 对于简单的状态驱动属性更改,使用隐式动画。
    • 对于生命周期控制、重复/可逆动效、手势、多个协调属性或自定义过渡,使用显式动画。
    • 对于跨路由过渡的共享元素,使用 Hero。
    • 当多个元素需要序列或重叠时间时,使用交错动画。
    • 当动效依赖于速度、弹簧、拖动、投掷或类似滚动行为时,使用物理。
  4. 以应用的风格实现。除非用户要求重构,否则保留现有的公共 API。让控制器由拥有动画生命周期的状态对象拥有,并释放它们,避免在 build 方法内创建动画状态。
  5. 优先使用生产级动画模式:AnimatedBuilderAnimatedWidget、内置过渡、子缓存、稳定键和小重建区域。仅在最小示例或没有更窄的重建路径可行时,在动画监听器中使用 setState()
  6. 尊重无障碍和用户设置。检查 MediaQuery.disableAnimations 或现有的减少动效策略以处理非必要动效,并提供快速/静态路径以防动效分散注意力或损害可用性。
  7. 使用可用的最强本地检查进行验证。至少对接触到的 Dart 文件或相关 Flutter 项目运行分析器。当动画行为、导航或手势是请求更改的一部分时,运行 widget/黄金或集成测试。

决策指南

需求 默认方法
一个属性或一小部分状态驱动的视觉变化 AnimatedContainerAnimatedOpacityAnimatedAlignAnimatedPaddingAnimatedSwitcherTweenAnimationBuilder
完全生命周期控制、重复/反转/状态或手势驱动值 AnimationController 配合 TweenCurvedAnimationAnimatedBuilderAnimatedWidget
路由之间的共享视觉元素 Hero 配合稳定的唯一标签和兼容的源/目标 widget 树
列表/菜单/卡片揭示与偏移时间 一个控制器配合多个 Interval,或仅当生命周期真正不同时使用逐项动画
弹簧/投掷/拖动或平台滚动感觉 flinganimateWithSpringSimulation、手势速度或平台特定的 ScrollPhysics
动效感觉不对但代码工作 在增加复杂性之前调整持续时间、曲线、间隔、缓动或减少动效行为

资源路由

只读取当前任务所需的资源:

任务 读取/使用 目的
简单的状态驱动动画或 AnimatedSwitcher/TweenAnimationBuilder 选择 references/implicit.md;可选 assets/templates/implicit_animation.dart 作为独立示例 Widget 选项、参数和简单示例
控制器生命周期、内置过渡、状态监听器或可重用动画 widget references/explicit.md;可选 assets/templates/explicit_animation.dart 作为独立示例 正确的控制器所有权、释放和重建模式
共享元素路由过渡、自定义飞行路径、占位符或 HeroMode references/hero.md;可选 assets/templates/hero_transition.dart 作为独立示例 Hero 标签、路由行为、穿梭构建器和常见陷阱
序列列表/菜单/揭示/涟漪时间 references/staggered.md;可选 assets/templates/staggered_animation.dart 作为独立示例 Interval 时间、持续时间计算和交错模式
弹簧、投掷、拖动、自定义 Simulation 或滚动物理 references/physics.md Simulation 设置、手势速度、平台物理和调优
曲线选择、自定义曲线、缓动不匹配或减少动效调优 references/curves.md 曲线选择、自定义曲线和无障碍说明

模板是完整的演示文件,不是即插即用的生产模块。在应用中使用模板时,重命名演示类,移除 main()MaterialApp 包装器,适配资源/路由/状态,并重新运行分析器。

约束

  • 不要发明缺失的路由、资源路径、主题令牌、手势行为或状态管理 API。检查它们或如果缺失则询问用户。
  • 当隐式 widget 能以更少的生命周期风险提供相同行为时,不要添加 AnimationController
  • 不要留下未释放的控制器、监听器、定时器或状态回调。
  • 不要在生产代码中使用全局调试设置如 timeDilation。仅作为本地调试辅助提及它们。
  • 不要盲目复制参考片段;根据项目的 Flutter 版本、lint 规则、空安全和弃用状态进行调整。
  • 不要使面向用户的动效的无障碍支持成为可选项。如果无法实现减少动效支持,请报告限制。

验证

  • 编辑 Dart 文件后,运行 dart format 或项目的格式化程序。
  • 对项目、包或特定接触到的 Dart 文件运行 flutter analyze
  • 当动画更改影响导航、手势、有状态生命周期或用户可见的回归时,运行有针对性的测试。
  • 对于视觉更改,在可行时检查运行中的应用或截图。如果不可能,说明哪些是静态验证的,哪些仍未经视觉验证。
  • 更新模板时,在最小 Flutter 项目中以 lib/main.dart 验证每个模板,使用 flutter analyze lib/main.dart