Flutter 动画课程 | Code With Andrea
本仓库包含我 Flutter 动画课程 中的所有项目。
本课程的主要项目是 Flutter 习惯追踪应用,是 Streaks App 的(简化版)克隆。
项目结构
整个课程包含四个 项目
- 颜色 / 数字游戏(带隐式动画):该项目 位于此处,并在第 1 部分介绍
- Flutter 入门演示项目:该项目 位于此处,并在第 1 部分介绍
- Flutter 秒表应用:该项目 位于此处,并在第 2 部分介绍
- Flutter 习惯追踪应用:该项目 位于此处,并在第 3 至 10 部分(课程其余部分)介绍
注意:此项目中的每个 commit 都对应课程中的一个特定课程。
课程大纲
1. 简介和隐式动画
- 课程大纲和资源
- [文章] 加入 Slack 上的“Code With Andrea”+ 课程问答
- [文章] Flutter 安装和 IDE 设置
- 动画简介
- 下载动画演示项目
- 使用 AnimatedContainer 进行隐式动画
- [练习]
AnimatedOpacity - 动画曲线
TweenAnimationBuilder入门- 使用
TweenAnimationBuilder制作 HSV 颜色动画 - 隐式动画总结
2. UI 挑战:秒表应用
- 模块介绍
- 秒表应用的起始项目
- 暗黑模式和自定义系统 UI 叠加
- 创建周期性计时器
Ticker和TickerProvider- 创建独立的
StopwatchRenderer小部件 - 使用
AspectRatio调整秒表 UI 大小 - 矩阵变换
- 从
LayoutBuilder获取圆的半径 - 实现动画指针
- 完成秒表 UI(第一部分)
- 完成秒表 UI(第二部分)
- 添加开始/停止/重置功能(第一部分)
- 添加开始/停止/重置功能(第二部分)
- 使用 Ticker 时的性能和测试注意事项!
3. 习惯追踪应用概览
- 习惯追踪应用:简介
- 下载起始项目
- Linting 规则
- 代码解析:项目资源
- 代码解析:颜色和主题
4. 显式动画
- 模块介绍 & 起始项目
- 任务完成环:技术规划
CustomPainter简介- 使用 Canvas 绘制任务完成环
- 使用
AnimationController制作显式动画 - 使用
AnimationController和AnimatedBuilder制作动画任务完成环 - 使用
GestureDetector控制动画 - 在动画任务中添加一个居中的 SVG 图标
- 任务完成 UI 调整
- 任务完成状态和最终调整
- Bug 修复:处理点击取消手势
- 添加任务名称
- 在
GridView中排列多个任务 - 项目完成和总结
5. 使用 Hive 进行本地数据持久化
- 模块介绍
- 技术规划:本地 vs 远程存储
- 起始项目概览
- Hive 简介
- 使用 Hive 创建模型类
- 使用代码生成创建类型适配器
- 创建
HiveDataStore - 在
main()中创建演示任务 - 使用
uuid包创建唯一的任务 ID - 使用
ValueListenableBuilder读取任务 - 总结
6. 使用 Riverpod 进行状态管理
- 模块介绍 & 起始项目
- Riverpod 简介
- 使用
Provider和Consumer创建和使用数据存储 - 使用
ProviderScope进行依赖覆盖 TaskState数据建模- 创建和使用
TaskStateHive 模型类 - 在
AnimatedTask小部件中添加onCompleted回调 - 创建
TaskWithNameLoader - 总结 + 使用 Widget Inspector
7. 页面翻转动画
- 模块介绍:页面翻转过渡
- 起始项目和代码解析
- 使用 WidgetBuilders 设计页面翻转小部件 API
- 使用
GlobalKey修改子小部件的状态 AnimationController设置AnimatedBuildervsAnimatedWidget- 使用
Transform和Matrix4进行旋转 - 交互式页面翻转过渡
- Widgets、Elements 和 Keys
- 附加挑战:翻卡游戏
8. 高级主题
- 模块介绍:高级主题
- 起始项目和代码解析
- 显示底部面板
- 创建 SlidingPanelAnimator
- 使用 SlidingPanelAnimator
- 动画滑动面板
- 管理应用主题状态更改:概述
- 使用 StateNotifier 实现 AppThemeManager 类
- 创建和使用 AppThemeManager providers
- 应用 AppThemeSettings
- 使用 ImplicitlyAnimatedWidget 进行高级动画主题
9. 更多显式动画
- 模块介绍
- 起始项目 & 代码解析
- 控制 TasksGrid 小部件上的动画
- 添加一个 AnimatedWidget 子类来缩放小部件
- 交错动画
- 添加 AddTaskItem 小部件
- 使用 Opacity 小部件进行淡入/淡出动画
- 使用 FadeTransition 和 ScaleTransition 进行显式动画
- 概述:Flutter 中的内置过渡 vs 隐式动画小部件
- Bug 修复:在编辑模式下禁用任务完成
10. 添加和编辑任务
- 模块介绍:添加和编辑任务
- 导航到添加任务和编辑任务页面
- 概览:带有 slivers 的 AddTaskPage
- 概览:TaskDetailsPage 和 SelectIconPage
- 概览:引导
- 结论和后续步骤
附加资源
Flutter 文档中的有用资源
- 动画简介 | Flutter.dev
- 隐式动画 Codelab | Flutter.dev
- 动画教程 | Flutter.dev
- 动画和运动小部件 | Flutter.dev
- 减少移动端的 shader 编译卡顿 | Flutter.dev
Code With Andrea 的更多 Flutter 动画教程
- 8 分钟学会 Flutter 动画 + GitHub 上的免费画廊应用
- Flutter 动画:交互式页面翻转小部件
- Flutter 动画:交互式页面翻转小部件 [第二部分]
- 如何减少 AnimationController 的样板代码:Flutter Hooks vs 扩展 State 类
- Flutter:为什么 TweenAnimationBuilder 和 AnimatedBuilder 有 child 参数?
- 使用 Flutter 隐式动画制作颜色/数字游戏
- Flutter Timer vs Ticker:案例研究
- Flutter:如何使用 CustomPainter 绘制任务完成环
- Flutter:使用 AnimationController 和 AnimatedBuilder 制作动画任务完成环
我的 GitHub Flutter 动画画廊
我的 pub.dev 动画包
- page_flip_builder:一个自定义 Flutter 小部件,可在您的应用中实现交互式页面翻转过渡。
- pushable_button:一个 3D 可按压按钮,非常适合游戏或应用中的重要 CTA。
流行的 Flutter 动画包
- Rive:一个实时交互式设计和动画工具。
- SpinKit:一组动画加载指示器,您可以在应用中使用它们。
- Animations:预制的动画,用于实现常见效果。
- Funvas:一个不断增长的免费示例集合,展示如何根据时间和数学函数创建基于 Canvas 的动画。
- Simple Animations:一个强大的包,可以更轻松地为常见用例实现自定义动画。
- Staggered Animations:轻松地为您的
ListView、GridView、Column和Row子项添加交错动画。 - Spring:一组 12 个基于弹簧动画效果的小部件。
其他很棒的 Flutter 动画教程
Streaks 应用
本课程的主要项目基于此应用
该应用的全套设计可以在这里找到
