# flutter-app
**Repository Path**: ty-like/flutter-app
## Basic Information
- **Project Name**: flutter-app
- **Description**: flutter
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-09-19
- **Last Updated**: 2026-09-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# flutter-app
跨平台应用客户端(Android / iOS)— 工程化模块化底座。
## 技术栈
| 依赖 | 用途 | 说明 |
|------|------|------|
| go_router | 路由 + 登录守卫 | 官方维护 |
| provider | 状态管理 | 官方推荐,轻量 |
| http | 网络请求 | 官方维护 |
| shared_preferences | 本地存储 | 官方维护 |
| cached_network_image | 网络图片缓存(头像) | 头部社区库 |
| flutter_svg | SVG 图标/插画 | — |
| bot_toast | 全局轻提示(core/utils/toast.dart) | — |
| shimmer | 骨架屏(core/widgets/skeleton.dart) | — |
| permission_handler | 摄像头/麦克风权限(core/utils/permissions.dart) | 视频通话前置 |
| cupertino_icons | 图标 | — |
> 原则:依赖克制,全部官方/第一方;重依赖(如 agora_rtc_engine)按需再引。
## 🚀 首次运行(三步)
```bash
# 1. 补全平台目录(android/ios 等,首次拉代码后执行一次即可,不会覆盖 lib/)
flutter create . --org com.tylike --project-name flutter_app --platforms=android,ios
# 2. 拉依赖
flutter pub get
# 3. 跑起来(连真机或模拟器)
flutter run
```
内置测试账号:`admin / 123456`(需先启动 [flutter-server](../flutter-server))。
> **真机调试注意**:把 `lib/core/config/app_config.dart` 里的
> `10.0.2.2` 改成你电脑的局域网 IP(如 `http://192.168.1.100:5000`)。
> **权限声明**(`flutter create .` 之后需手动加,视频通话要用):
> - Android `android/app/src/main/AndroidManifest.xml`:
> ``
> ``
> ``
> - iOS `ios/Runner/Info.plist`:`NSCameraUsageDescription`、`NSMicrophoneUsageDescription`
## 📁 目录结构
```
lib/
├── main.dart 入口:初始化服务链
├── app.dart MaterialApp 壳
├── core/ ★ 核心公共层(不含业务)
│ ├── config/app_config 多环境配置(dev/prod,类似 Vben .env)
│ ├── theme/ 主题(亮/暗、色彩规范)
│ ├── network/ HTTP 封装、统一响应、异常体系
│ ├── router/ 路由表 + 登录守卫
│ ├── storage/ 本地 KV 存储封装
│ ├── constants/ storage key / api path 常量
│ ├── utils/ 校验、格式化工具
│ └── widgets/ 通用组件(三态视图、防抖按钮…)
├── layouts/ ★ 布局模块
│ ├── default/ 主布局(底部导航)
│ └── auth/ 登录布局(无导航)
├── models/ 全局共享模型(user…)
└── features/ ★ 业务模块(一模块一目录,互不依赖)
├── user/ 登录/用户(data + logic + ui)
├── home/ 首页(服务端联通 Demo)
├── mine/ 我的
└── video_call/ 视频通话骨架(Agora 接入点已预留)
```
## ➕ 如何新增一个业务模块(例如 chat)
1. `lib/features/chat/` 下建三件套:
```
chat/
├── data/chat_api.dart # 接口定义(走 core/network)
├── logic/chat_store.dart # ChangeNotifier 状态
└── ui/chat_page.dart # 页面 + 私有组件
```
2. `core/constants/api_paths.dart` 加接口路径常量
3. `core/router/app_router.dart`:`RouteNames` 加名称 + routes 挂页面
4. 需要底部 Tab?`layouts/default/widgets/bottom_nav_bar.dart` 的 `_items` 加一项
## 🔁 前后端约定
统一响应格式(与 flutter-server 的 `Common/ApiResponse.cs` 对齐):
```json
{ "code": 0, "message": "ok", "data": { } }
```
- `code == 0` 成功;非 0 业务失败(自动抛 `ApiException.business`)
- HTTP 401 → 自动抛 `ApiException.unauthorized`(将来可在这里全局触发登出)
- 认证:JWT Bearer,token 由 `HttpClient` 自动注入
## 🧪 测试
```bash
flutter test
```