hi-client/.cursorrules
2025-10-13 18:08:02 +08:00

74 lines
3.6 KiB
Plaintext
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

您精通 Flutter、Dart、Riverpod、Freezed、Flutter Hooks 和 Supabase。
关键原则
- 编写简洁、专业的 Dart 代码,并提供准确的示例。
- 在适当的情况下使用函数式和声明式编程模式。
- 优先使用组合,而非继承。
- 使用带有助动词的描述性变量名(例如 isLoading、hasError
- 结构化文件:导出的 Widget、子 Widget、辅助函数、静态内容、类型。
Dart/Flutter
- 对不可变 Widget 使用常量构造函数。
- 利用 Freezed 实现不可变状态类和联合。
- 对简单的函数和方法使用箭头语法。
- 对于单行 getter 和 setter优先使用表达式主体。
- 使用尾随逗号以获得​​更好的格式和差异显示。
错误处理和验证
- 在视图中使用 SelectableText.rich 而不是 SnackBars 实现错误处理。
- 在 SelectableText.rich 中用红色显示错误以提高可见性。
- 处理显示屏幕内的空状态。
- 使用 AsyncValue 进行正确的错误处理和加载状态。
Riverpod 特定指南
- 使用 @riverpod 注解生成提供程序。
- 优先使用 AsyncNotifierProvider 和 NotifierProvider而不是 StateProvider。
- 避免使用 StateProvider、StateNotifierProvider 和 ChangeNotifierProvider。
- 使用 ref.invalidate() 手动触发提供程序更新。
- 在处理小部件时,实现正确的异步操作取消机制。
性能优化
- 尽可能使用 const 小部件来优化重建。
- 实现列表视图优化(例如 ListView.builder
- 使用 AssetImage 处理静态图片,使用 cached_network_image 处理远程图片。
- 为 Supabase 操作(包括网络错误)实现正确的错误处理。
关键约定
1. 使用 GoRouter 或 auto_route 进行导航和深度链接。
2. 针对 Flutter 性能指标(首次有效绘制、可交互时间)进行优化。
3. 优先使用无状态 Widget
- 对于状态相关的 Widget结合使用 ConsumerWidget 和 Riverpod。
- 结合使用 Riverpod 和 Flutter Hooks 时,使用 HookConsumerWidget。
UI 和样式
- 使用 Flutter 内置 Widget 并创建自定义 Widget。
- 使用 LayoutBuilder 或 MediaQuery 实现响应式设计。
- 使用主题背景,确保整个应用的样式一致。
- 使用 Theme.of(context).textTheme.titleLarge 代替 heading6使用 headingSmall 代替 heading5 等。
模型和数据库约定
- 在数据库表中包含 createdAt、updatedAt 和 isDeleted 字段。
- 对模型使用 @JsonSerializable(fieldRename: FieldRename.snake)。
- 对只读字段实现 @JsonKey(includeFromJson: true, includeToJson: false)。
Widget 和 UI 组件
- 创建小型私有 Widget 类,而不是像 Widget _build.... 这样的函数。
- 实现 RefreshIndicator 以实现下拉刷新功能。
- 在 TextField 中,设置合适的 textCapitalization、keyboardType 和 textInputAction。
- 使用 Image.network 时,务必包含 errorBuilder。
其他
- 使用 log 而不是 print 进行调试。
- 适当时使用 Flutter Hooks / Riverpod Hooks。
- 保持每行不超过 80 个字符,对于多参数函数,请在右括号前添加逗号。
- 使用 @JsonValue(int) 来处理需要访问数据库的枚举。
代码生成
- 使用 build_runner 从注解Freezed、Riverpod、JSON 序列化)生成代码。
- 修改注解类后运行“flutter pub run build_runner build --delete-conflicting-outputs”。
文档
- 记录复杂的逻辑和难以理解的代码决策。
- 遵循 Flutter、Riverpod 和 Supabase 官方文档,了解最佳实践。
请参阅 Flutter、Riverpod 和 Supabase 文档,了解 Widget、状态管理和后端集成的最佳实践。