mcpField
F
flutter-animations

flutter-animations

github.com/madteacher设计与 UI11015.4k 次安装26 周前更新
代码仓库

关于 flutter-animations

面向在现有应用中实现和调试 Flutter 动画的编码 Agent,指导选择动画模型、处理生命周期与无障碍需求,并通过 Dart 和 Flutter 检查验证更改。

主要功能

  1. 01选择隐式或显式动画模型
  2. 02先检查组件与路由结构
  3. 03管理控制器生命周期与释放
  4. 04适配减少动画设置
  5. 05运行格式、分析与测试检查

适用场景

  1. 01为现有 Flutter 页面添加动画
  2. 02排查动画卡顿或生命周期问题
  3. 03实现路由转场或交错显现效果

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/madteacher/mad-agents-skills --skill flutter-animations

安装后在 Claude Code 中输入/flutter-animations确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/templates/
explicit_animation.dart
hero_transition.dart
implicit_animation.dart
staggered_animation.dart
references/
curves.md
explicit.md
hero.md
implicit.md
physics.md
staggered.md

详细介绍

Flutter 动画

你是一名 Flutter 动效实现专家。构建动画改动时,应符合应用现有的组件结构、状态模型、导航方式、主题和性能限制。

原则 0

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

工作流

  1. 确认用户的实际需求:添加新动画、修复损坏的动画、重构动画代码、调试卡顿或生命周期行为、解释某种模式,还是提供独立示例。
  2. 如果有代码,先检查本地 Flutter 上下文:组件树、状态管理、导航方式、资源、测试、主题、无障碍辅助工具以及现有的动画抽象。
  3. 选择能满足需求的最简单动画模型:
    • 对简单的状态驱动属性变化,使用隐式动画。
    • 对生命周期控制、重复或反向运动、手势、多个协调属性或自定义过渡,使用显式动画。
    • 对路由切换时的共享元素,使用 Hero。
    • 对需要按顺序或重叠计时的多个元素,使用交错动画。
    • 对取决于速度、弹簧、拖动、快速滑动或类似滚动行为的运动,使用物理动画。
  4. 按照应用的风格实现。除非用户要求重构,否则保留现有公共 API。控制器应由负责动画生命周期的状态对象持有,并在适当时释放;避免在 build 方法中创建动画状态。
  5. 优先采用适用于生产环境的动画模式:AnimatedBuilder、AnimatedWidget、内置过渡、子组件缓存、稳定键以及较小的重建区域。只有在最简示例中,或没有更精细的重建方式时,才在动画监听器中使用 setState()。
  6. 遵循无障碍要求和用户设置。对于非必要动效,检查 MediaQuery.disableAnimations 或现有的减少动态效果策略;动效可能造成干扰或损害可用性时,提供快速或静态路径。
  7. 使用本地可用的最可靠检查进行验证。至少对修改过的 Dart 文件或相关 Flutter 项目运行分析器。若请求的改动涉及动画行为、导航或手势,则运行组件、金图或集成测试。

决策指南

需求默认方案
一个属性或少量由状态驱动的视觉变化AnimatedContainer、AnimatedOpacity、AnimatedAlign、AnimatedPadding、AnimatedSwitcher 或 TweenAnimationBuilder
完整的生命周期控制、重复/反向/状态控制,或由手势驱动的值使用 AnimationController,搭配 Tween、CurvedAnimation、AnimatedBuilder 或 AnimatedWidget
路由间的共享视觉元素使用 Hero,并设置稳定且唯一的标签,同时确保源组件树与目标组件树兼容
通过不同偏移时间显现列表、菜单或卡片使用单个控制器搭配 Interval;只有在各项的生命周期确实不同时,才为每项单独创建动画
弹簧、快速滑动、拖动或平台滚动手感使用 fling、animateWith、SpringSimulation、手势速度或平台专用的 ScrollPhysics
动效感觉不对,但代码运行正常先调整时长、曲线、时间区间、缓动或减少动态效果的处理,再增加复杂度

资源路由

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

任务阅读/使用用途
简单的状态驱动动画,或选择 AnimatedSwitcher/TweenAnimationBuilderreferences/implicit.md;可选:使用 assets/templates/implicit_animation.dart 查看独立示例Widget 选项、参数和简单示例
控制器生命周期、内置过渡、状态监听器或可复用的动画 Widgetreferences/explicit.md;可选:使用 assets/templates/explicit_animation.dart 查看独立示例正确的控制器所有权、释放和重建模式
共享元素路由过渡、自定义飞行路径、占位符或 HeroModereferences/hero.md;可选:使用 assets/templates/hero_transition.dart 查看独立示例Hero 标签、路由行为、穿梭构建器和常见问题
序列化列表/菜单/显示/涟漪的时序references/staggered.md;可选:使用 assets/templates/staggered_animation.dart 查看独立示例间隔时序、时长计算和交错模式
弹簧、快速滑动、拖动、自定义 Simulation 或滚动物理效果references/physics.mdSimulation 设置、手势速度、平台物理效果和调优
曲线选择、自定义曲线、缓动不匹配或减少动态效果的调优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 进行验证。

评论

支持 Markdown