6.4 KiB
6.4 KiB
CLAUDE.md
本文档为 Claude Code (claude.ai/code) 在此代码库中工作时提供指导。
项目概览
这是一个名为 "Aslan" 的 Flutter 应用程序(项目 atu),是一个具有实时音频/视频、聊天、礼物和家族功能的社交语音聊天应用。它采用清晰架构分层:core、data、domain、presentation。
主要依赖:
- 实时通信:Agora RTC (
agora_rtc_engine)、腾讯云聊天 (tencent_cloud_chat_sdk) - 状态管理:Provider (
provider) - 路由:Fluro (
fluro) - 网络请求:Dio (
dio) 带有自定义拦截器 - 本地包:修改版本的
webview_flutter、tancent_vap、on_audio_query、flutter_foreground_task包含在local_packages/中。在更新 pub 依赖前请始终检查这些目录。
常用开发任务
运行应用
# 运行应用
flutter run
构建
- Android:
flutter build apk或flutter build appbundle - iOS:
flutter build ios
测试
- 运行单元/部件测试:
flutter test - 单个测试文件:
flutter test test/widget_test.dart
代码检查和分析
- 静态分析:
flutter analyze - 代码格式化:
flutter format .
管理依赖
- 获取包:
flutter pub get - 升级包:
flutter pub upgrade - 检查过时包:
flutter pub outdated
iOS 特定设置
- 更新 Flutter 插件后在
ios/中运行pod install。 - Podfile 包含自定义权限标志(相机、麦克风、相册、通知已启用;其他已禁用)。按需调整。
架构
层级结构
lib/core/:常量、工具、共享组件、路由。constants/:应用全局配置 (GlobalConfig)、颜色、屏幕尺寸。routes/:Fluro 路由设置 (Routes.dart,router_init.dart)。compontent/:可复用的 UI 组件(自定义应用栏、图片、按钮、对话框)。utils/:工具类(设备 ID、键盘、深度链接)。
lib/domain/:业务逻辑。entities/:数据模型。repositories/:仓库接口。use_cases/:业务逻辑类(文本格式化器、标签选择器等)。
lib/data/:数据层实现。datasources/remote/net/:HTTP 客户端 (http.dart,api.dart),带有自定义拦截器用于头部、超时、日志。datasources/local/:本地存储 (StorageManager)、用户管理 (UserManager)、前台服务助手。datasources/repositories/:仓库实现。models/:数据传输对象和枚举。
lib/presentation/:UI 层。pages/:基于功能页面的目录(登录、房间、聊天、家族等)。providers/:状态管理的 ChangeNotifier 提供者(认证、用户、房间、礼物等)。
状态管理
- 使用
provider包和ChangeNotifier。 - 提供者在
main.dart(MyAppWithProviders) 中注册。部分提供者为懒加载。 - 关键提供者:
AuthProvider、UserProvider、RoomProvider、RtcProvider、RtmProvider、GiftProvider、LocaleProvider、ThemeProvider。
路由
- 使用
fluro进行导航。 - 路由定义在
lib/core/routes/Routes.dart和各功能的模块化IRouterProvider实现 (*_route.dart)。 - 导航工具:
fluro_navigator.dart中的NavigatorUtils。
网络层
- 基础 URL 配置在
GlobalConfig.apiHost。 - 自定义
Http类继承BaseHttp,带有用于头部、日志、超时的拦截器。 - 请求头包含设备信息、语言、令牌。
- 响应包装在
ResponseData中,包含status、errorCode、body字段。
配置
- 配置架构: 使用
AppConfig系统管理应用配置 - 全局配置:
lib/core/constants/global_config.dart从AppConfig.current获取配置值 - 配置内容: API主机、腾讯IM App ID、Agora RTC App ID、功能开关、审核模式标志等
- 业务逻辑差异化: 使用策略模式(
BusinessLogicStrategy)实现页面差异化BaseBusinessLogicStrategy: 原始应用默认实现Variant1BusinessLogicStrategy: 马甲包差异化实现- 页面通过
GlobalConfig.businessLogicStrategy访问策略方法 - 已差异化页面: 首页、登录页、家族页、探索页、个人主页、管理编辑和搜索页
UI 适配
- 使用
flutter_screenutil进行响应式设计。 - 设计尺寸为 375×667(定义在
lib/core/constants/screen.dart)。 - 使用
ScreenUtil().setWidth()、ScreenUtil().setHeight()、ScreenUtil().setSp()处理尺寸和字体大小。
本地化
assets/l10n/中的 JSON 文件支持英语、中文、阿拉伯语、土耳其语、孟加拉语。ATAppLocalizations类加载翻译;使用ATAppLocalizations.of(context)!.keyName。
资源
- 图片按功能组织在
images/中(启动页、登录、房间、个人等)。 - 字体在
fonts/中(自定义字体MyCustomFont)。
重要说明
本地包
项目在 local_packages/ 中包含多个插件的修改版本:
webview_flutter-4.13.0tancent_vap-1.0.0+1(腾讯视频动画播放器)on_audio_query-2.9.0flutter_foreground_task-9.1.0
更新依赖时,请检查这些本地包的更改是否需要保留。除非有意替换,否则避免用 pub.dev 版本覆盖它们。
iOS 权限
ios/Podfile 设置预处理器标志来禁用未使用的权限(日历、联系人、提醒事项等),仅启用相机、麦克风、相册、通知。如需额外权限,请修改 GCC_PREPROCESSOR_DEFINITIONS 块。
审核模式
GlobalConfig.isReview 控制应用是否处于审核模式(例如用于 App Store 审核)。这可能会影响功能可用性。
实时功能
- Agora RTC 用于语音/视频房间。
- 腾讯 IM 用于聊天消息。
- 确保
GlobalConfig中设置了正确的 App ID。
错误报告
- 使用 Firebase Crashlytics 进行崩溃报告。
- 未捕获的错误通过
runZonedGuarded和FlutterError.onError捕获。 - 网络错误通过日志记录并通过 toast 显示。
故障排除
- Pod install 错误:检查
ios/Podfile语法;确保 Flutter 插件兼容。 - 本地包错误:验证
pubspec.yaml中的路径指向正确的本地包目录。 - 网络请求失败:确认
GlobalConfig.apiHost可达;检查ApiInterceptor中的头部。 - 状态未更新:验证提供者是否在需要时不是懒加载状态;检查
notifyListeners()调用。