# awesome-flet-development-skill
**Repository Path**: hernan/awesome-flet-development-skill
## Basic Information
- **Project Name**: awesome-flet-development-skill
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-04-24
- **Last Updated**: 2026-04-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# flet-development Skill
**中文** | [English](README-en.md)



**专为AI Coding设计的 Python Flet开发技能Skill,解决因Flet新老版本的大量破坏性变更,导致AI开发的代码老是报错的Coding痛点!**
- 提供全面的Flet API变更指南
- 自动诊断和修复常见错误
- 提供20个最佳实践和示例代码
---
## 📝 概述
本 Skill 是专为 Flet 1.0+ (>= 0.82.0) 开发设计的专家级助手,提供:
- ✅ **版本迁移指南**:完整的 Flet 0.x → 1.0+ 迁移路径
- ✅ **API 变更详解**:大量破坏性变更的详细说明和解决方案。覆盖80+ API
- ✅ **错误排查手册**:常见错误原因和修复方法
- ✅ **最佳实践**:基于实际开发经验的代码模式
- ✅ **示例代码库**:20个覆盖各场景的完整示例
### 为什么需要这个 Skill?
Flet 1.0+ 引入了大量破坏性变更,导致许多旧代码无法运行:
- **Tabs API 完全重写** - 三件套模式(Tabs + TabBar + TabBarView)
- **Badge 控件功能受限** - 只能使用 `label` 参数
- **BorderRadius 创建方式变更** - 函数 → 类方法
- **Colors 枚举规范化** - 小写 s → 大写 C
- **控件移除和重命名** - ElevatedButton → Button
因此,亟需本 Skill 帮助开发者快速定位和解决这些问题,避免踩坑!
> ** 💬 用户体验后评论:**
>
> 不错啊,非常实用!不用这个Skill,直接让AI写,基本上返工次数 10+ 次,几乎都是因为破坏性变更的语法导致大量报错!心态爆炸!
>
> 但是用了skill后,常见功能,几乎都可以一次性AI生成就能直接打开用!返工次数大约只有1-3次!
### 🚀 效果演示
- ❌ 使用Skill之前:AI生成的代码直接出现大量报错,根本无法运行!

- ✨ 使用Skill之后:AI生成的代码几乎没有报错,直接运行即可!

### 🧠 实战测试
使用本Skill,开发一款复杂的雷电式飞机射击游戏!
- 提示词:
```
# Python Flet飞机射击游戏
基于flet开发skill技能,使用 Flet Canvas开发雷电风格的竖屏的飞机射击游戏。
**玩家**:蓝色战斗机(头朝上飞机图标),WASD移动,初始直接自动射击,武器3级(单/双/三发),3条命
**敌机**(头朝下飞机图标):小型红色(1血)、中型紫色(3血可射击)、大型深红(10血扇形射击显血条)
**道具**:红色+命、黄色升武器、绿色射速+、紫色射速-。均有持续时间限制
**UI**:得分、关卡、生命、武器等级
**画布**:自适应宽高,竖屏游戏界面(后续会打包到Windows和Android端)。
**控制**:WASD移动、P暂停、R重开。每次按键只平滑移动一小段距离,这样方便控制
**注意事项**:(1)注意移动到边界时的逻辑、以及飞机碰撞机制等相关问题;(2)注意画风要满足基本的游戏感觉,有基本的审美。在让整个项目不要太复杂的前提下,也要兼顾可玩性;(3)注意相关元素显示不能超出画布范围。(4)注意游戏画面的实时刷新、连贯性。
```
- AI开发的效果:

- 注:这里本例AI开发的代码,项目仓库在:
[](https://github.com/HnBigVolibear/flet-game-by-using-flet-skill-demo01)
(1)可以看到,在使用本Skill后,AI开发的代码的报错返工次数大幅减小,开发复杂项目也变得实际可行了!而在没有使用本Skill的情况下,AI开发这种程度的Flet项目,几乎会陷入无休止的报错排障中。。。
(2)当然,你所使用的大模型AI的能力也很重要!如果你的AI模型能力不够,那么你可能需要使用更强的AI模型来完成这个任务。
---
## 🎯 核心特性
### 1. 🔍 智能错误诊断
自动识别常见错误模式,提供精准解决方案:
```python
# ❌ 错误:Tabs API 旧写法
ft.Tabs(tabs=[ft.Tab(text="Home", content=...)])
# ✅ 正确:Tabs API 新写法(三件套)
ft.Tabs(
content=ft.Column([
ft.TabBar(tabs=[
ft.Tab(label=ft.Row([...]))
]),
ft.TabBarView(height=120, controls=[...])
]),
length=3,
)
```
### 2. 📚 完整文档体系
- **SKILL.md**:核心开发指南和最佳实践
- **references/api-quick-reference.md**:API 快速参考
- **references/breaking-changes.md**:破坏性变更详解
- **references/error-guide.md**:错误排查手册
- **references/error-quick-reference.md**:错误快速查找表
- **references/discovery-log.md**:API 新发现记录
### 3. 💡 20个示例代码
覆盖常见开发场景:(这些实际上就是现成的初学者入门上手Flet的参考示例脚本!)
| 示例 | 描述 |
|------|------|
| `01_basic_app.py` | 基础应用结构 |
| `02_async_clock.py` | 异步操作和计时器 |
| `03_form_validation.py` | 表单验证 |
| `04_file_picker_service.py` | 文件选择器服务 |
| `05_shared_preferences.py` | 本地存储 |
| `06_animation_effects.py` | 动画效果 |
| `07_dialog_example.py` | 对话框使用 |
| `08_layout_responsive.py` | 响应式布局 |
| `09_theme_styling.py` | 主题和样式 |
| `10_navigation_menu.py` | 导航菜单 |
| `11_data_table.py` | 数据表格 |
| `12_window_controls.py` | 窗口控制 |
| `13_drag_drop.py` | 拖放功能 |
| `14_keyboard_events.py` | 键盘事件 |
| `15_gestures.py` | 手势识别 |
| `16_clipboard.py` | 剪贴板操作 |
| `17_media_player.py` | 媒体播放 |
| `18_canvas_custom_paint.py` | Canvas 绑制 |
| `19_file_operations.py` | 文件操作 |
| `20_charts_canvas_visualization.py` | 图表可视化 |
### 4. 🚨 实时陷阱提醒
在开发过程中自动提醒常见陷阱:
| 陷阱 | 后果 | 正确做法 |
|------|------|---------|
| 手动创建 pyproject.toml | 版本不兼容 | 使用 `flet create` |
| 使用 `ft.app()` 启动 | 已废弃 | 使用 `ft.run(main)` |
| `ft.colors.RED`(小写 s) | AttributeError | `ft.Colors.RED`(大写 C) |
| Badge 使用 `text` 参数 | TypeError | 只能用 `label` 参数 |
---
## ⚡ 快速开始
### 前置要求
- Python 3.8+
- Flet 0.82.0+
### 安装 Flet
```bash
pip install flet[all]
```
### 创建新项目
```bash
# 创建新项目(推荐)
flet create
# 进入项目目录
cd your-project-name
# 运行项目
flet run
```
# 使用本 Skill
### 将本Skill文件夹,安装导入到你的AI IDE(例如Claude Code、Trae、Cursor、CodeBuddy、甚至是OpenClaw)里即可!
- IDE里找到Skills导入的地方手动导入文件夹;
- 或直接前往IDE在系统本地的Skills文件夹里,拷贝本文件夹到Skills文件夹里;
- 重启IDE,即可在Skills列表里看到本Skill。
然后,当你在用 AI 开发 Flet 应用时,会自动激活并提供:
- API 用法建议
- 错误诊断和修复方案
- 版本兼容性提示
- 最佳实践指导
---
## 📂 文档结构
```
flet-development-1.0.1/
├── SKILL.md # 核心开发指南
├── README.md # 本文档
├── references/ # 参考文档目录
│ ├── api-quick-reference.md # API 快速参考
│ ├── breaking-changes.md # 破坏性变更详解
│ ├── error-guide.md # 错误排查手册
│ ├── error-quick-reference.md # 错误快速查找表
│ └── discovery-log.md # API 新发现记录
└── examples/ # 示例代码目录
├── README.md # 示例说明
├── 01_basic_app.py # 基础应用
├── 02_async_clock.py # 异步时钟
├── ... (共 20 个示例)
└── 20_charts_canvas_visualization.py # 图表可视化
```
---
## 🔑 关键 API 变更
- 1. Tabs 控件重写(最重要)
- 2. Badge 控件受限
- 3. BorderRadius 创建方式
- 4. Colors 枚举规范化
- 5. 启动方式变更
- 6. 控件重命名和移除
大量的破坏性变更!
---
## ❓ 常见问题
### Q1: 如何快速定位错误?
**A**: 查阅 `references/error-quick-reference.md`,按错误信息查找解决方案。
常见错误示例:
| 错误信息 | 原因 | 解决方案 |
|---------|------|---------|
| `Tabs.__init__() got an unexpected keyword argument 'tabs'` | Tabs API 重写 | 使用三件套模式 |
| `Badge.__init__() got an unexpected keyword argument 'label_style'` | Badge 功能受限 | 只用 `label` 参数 |
| `'NavigationDrawer' object has no attribute 'open'` | API 变更 | 使用 `page.show_drawer()` |
| `coroutine 'Window.center' was never awaited` | 异步方法未 await | 添加 `await` |
### Q2: 如何从 Flet 0.x 迁移到 1.0+?
**A**: 按以下步骤进行:
1. **阅读破坏性变更**:`references/breaking-changes.md`
2. **更新依赖**:`pip install flet>=0.82.0`
3. **检查 Tabs 用法**:所有 Tabs 都要改为三件套
4. **检查 Badge 用法**:移除除 `label` 外的所有参数
5. **检查 Colors 引用**:改为 `ft.Colors.XXX`
6. **更新启动方式**:改为 `ft.run(main)`
### Q3: 为什么我的界面不实时更新?
**A**: 可能使用了线程 + `time.sleep()`,应该改为异步:
```python
# ❌ 错误:线程 + time.sleep
import threading
import time
def update():
time.sleep(1)
page.update()
threading.Thread(target=update).start()
# ✅ 正确:asyncio
import asyncio
async def update():
await asyncio.sleep(1)
page.update()
asyncio.create_task(update())
```
### Q4: 如何处理键盘事件?
**A**: 使用 `page.on_keyboard_event`:
```python
def on_keyboard(e: ft.KeyboardEvent):
print(f"按键: {e.key}")
print(f"Shift: {e.shift}")
print(f"Ctrl: {e.ctrl}")
print(f"Alt: {e.alt}")
print(f"Meta: {e.meta}")
page.on_keyboard_event = on_keyboard
```
**注意**:
- ❌ 没有 `e.type` 属性(无法区分 keydown/keyup)
- ❌ 没有 `page.on_key_down` 和 `page.on_key_up`
- ✅ 只有 `page.on_keyboard_event`
- ✅ 事件会在按键按下时重复触发
### Q5: NavigationDrawer 如何使用?
**A**: 使用 `page.drawer` 属性和异步方法:
```python
# ✅ 正确用法
drawer = ft.NavigationDrawer(...)
async def open_drawer(e):
page.drawer = drawer
await page.show_drawer()
async def close_drawer(e):
await page.close_drawer()
# ❌ 错误用法
drawer.open() # AttributeError
page.overlay.append(drawer) # 错误
```
---
## 📦 示例代码
所有示例都在 `examples/` 目录下,每个示例都可以独立运行!
这些本身就是现成的初学者入门上手Flet的参考示例脚本!
### 示例分类
#### 🎯 基础示例
- **01_basic_app.py** - 基础应用结构
- **02_async_clock.py** - 异步操作和计时器
- **03_form_validation.py** - 表单验证
#### 📂 数据和存储
- **04_file_picker_service.py** - 文件选择器服务
- **05_shared_preferences.py** - 本地存储
- **19_file_operations.py** - 文件操作
#### 🎨 UI 和动画
- **06_animation_effects.py** - 动画效果
- **07_dialog_example.py** - 对话框使用
- **08_layout_responsive.py** - 响应式布局
- **09_theme_styling.py** - 主题和样式
- **10_navigation_menu.py** - 导航菜单
#### 📊 数据展示
- **11_data_table.py** - 数据表格
- **20_charts_canvas_visualization.py** - 图表可视化
#### 🎮 交互功能
- **12_window_controls.py** - 窗口控制
- **13_drag_drop.py** - 拖放功能
- **14_keyboard_events.py** - 键盘事件
- **15_gestures.py** - 手势识别
- **16_clipboard.py** - 剪贴板操作
#### 🎬 多媒体和图形
- **17_media_player.py** - 媒体播放(已标记移除)
- **18_canvas_custom_paint.py** - Canvas 绑制
### 运行示例
```bash
# 进入示例目录
cd examples
# 运行示例
python 01_basic_app.py
```
### 运行效果截图









---
## 🎯 使用场景
### 适合人群
- ✅ Flet 初学者:快速上手 Flet 1.0+ 开发
- ✅ Flet Vibe Coding 用户:直接帮助AI绕开绝大多数的破坏性变更导致的代码错误bug
- ✅ 遇到 API 错误的开发者:快速定位和解决问题
- ✅ 需要最佳实践的开发者:学习正确的代码模式
### 适用项目类型
- 🖥️ 桌面端应用(Windows、macOS、Linux)
- 🌐 Web 应用
- 📱 移动端应用(Android、IOS)
- 📊 数据可视化应用
- 🎮 交互式工具
- 📝 表单和数据收集应用
---
## 🤝 贡献指南
欢迎贡献!请遵循以下步骤:
1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/amazing-feature`)
3. 提交更改 (`git commit -m 'Add some amazing feature'`)
4. 推送到分支 (`git push origin feature/amazing-feature`)
5. 创建 Pull Request
### 贡献类型
- 🐛 Bug 修复:修复文档错误或示例代码问题
- 📚 文档改进:完善文档内容
- 💡 新示例:添加新的示例代码
- 🔍 API 发现:发现新的 API 用法和陷阱
---
## 📄 许可证
本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件。
---
## 🙏 致谢
感谢以下项目和资源:
- [Flet](https://flet.dev/) - 优秀的 Python UI 框架
- [Flet 官方文档](https://flet.dev/docs/) - API 参考
- [Flet GitHub](https://github.com/flet-dev/flet) - 源码和问题追踪
---
## 👨💻 作者信息
**作者**:湖南大白熊

**GitHub 主页**:[https://github.com/HnBigVolibear](https://github.com/HnBigVolibear)
**问题反馈**:请在 GitHub Issues 中提交。不过反正我也不亲自看,反正我也是把你发我的直接发我AI改。。。毕竟这整个Skill都是AI写的(天哪,你想不到吧,耗费了我2亿的tokens。。。我的OpenClaw龙虾都累死啦!),哈哈哈!
**捐赠**:Buy me a coffee~

---
**如果这个 Skill 对你有帮助,请给一个 ⭐️ Star!**
Made with ❤️ by 湖南大白熊