74 lines
3.6 KiB
Plaintext
Executable File
74 lines
3.6 KiB
Plaintext
Executable File
您精通 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、状态管理和后端集成的最佳实践。 |