# 骑手端与用户端差异对比报告

> 基于用户端标准规范生成的差异清单

---

## 一、目录结构差异

### 1.1 缺失的目录

| 目录             | 用户端 | 骑手端 | 优先级 |
|----------------|-----|-----|-----|
| `router/`      | ✅ 有 | ❌ 无 | P0  |
| `middlewares/` | ✅ 有 | ❌ 无 | P1  |
| `widgets/`     | ❌ 无 | ✅ 有 | -   |
| `constants/`   | ❌ 无 | ✅ 有 | -   |

### 1.2 多余的目录

| 目录           | 说明                         |
|--------------|----------------------------|
| `widgets/`   | 建议合并到 `components/`        |
| `constants/` | 建议合并到 `utils/` 或 `config/` |

### 1.3 核心文件缺失

| 文件                         | 优先级 |
|----------------------------|-----|
| `router/app_router.dart`   | P0  |
| `services/api_client.dart` | P0  |
| `utils/errors.dart` (完整实现) | P0  |

---

## 二、架构差异

### 2.1 ViewModel 层

#### 用户端标准

```
viewmodels/
├── base_viewmodel.dart (完整)
├── home_viewmodel.dart
├── order_viewmodel.dart
├── takeout_viewmodel.dart
├── errand_viewmodel.dart
├── profile_viewmodel.dart
├── local_merchant_viewmodel.dart
└── viewmodels.dart (导出)
```

#### 骑手端现状

```
viewmodels/
├── base_viewmodel.dart (基础)
├── home_viewmodel.dart
├── login_viewmodel.dart
├── order_viewmodel.dart
└── viewmodels.dart
```

#### 差异

| 项                       | 状态 | 优先级 |
|-------------------------|----|-----|
| `BaseViewModel` 实现不完整   | ❌  | P0  |
| 缺少 `ViewModelState` 泛型类 | ❌  | P0  |
| 每个页面缺少对应 ViewModel      | ❌  | P1  |

### 2.2 Repository 层

#### 用户端标准

```
repositories/
├── base_repository.dart (完整)
├── home_repository.dart
├── merchant_repository.dart
├── order_repository.dart
├── user_repository.dart
├── address_repository.dart
├── errand_repository.dart
├── repository_manager.dart
└── repositories.dart
```

#### 骑手端现状

```
repositories/
├── base_repository.dart (基础)
├── rider_repository.dart
└── repositories.dart
```

#### 差异

| 项                               | 状态 | 优先级 |
|---------------------------------|----|-----|
| `BaseRepository` 缺少 `Result` 处理 | ❌  | P0  |
| `BaseRepository` 缺少缓存支持         | ❌  | P0  |
| 缺少订单、用户等业务 Repository           | ❌  | P1  |

### 2.3 Service 层差异

#### 用户端标准

- `api_client.dart` - 统一的 Dio 单例、拦截器、错误处理
- `secure_storage_service.dart` - 静态方法、完整的安全存储
- `cache_service.dart` - 缓存服务

#### 骑手端现状

- `network_service.dart` - 自定义实现，非标准
- `security_storage_service.dart` - 单例模式，非标准
- `api_client.dart` - 存在但实现不同

#### 差异

| 项                                  | 状态 | 优先级 |
|------------------------------------|----|-----|
| 使用 `NetworkService` 而非 `ApiClient` | ❌  | P0  |
| 安全存储实现模式不一致                        | ❌  | P0  |
| 缺少完整的错误处理拦截器                       | ❌  | P0  |

---

## 三、依赖差异

### 3.1 pubspec.yaml 对比

#### 用户端核心依赖

```yaml
dependencies:
  flutter:
    sdk: flutter
  http: ^1.2.1
  dio: ^5.4.3
  provider: ^6.1.2
  shared_preferences: ^2.2.2
  hive: ^2.2.3
  hive_flutter: ^1.1.0
  flutter_secure_storage: ^9.2.2
  go_router: ^17.1.0
  intl: ^0.20.2
  crypto: ^3.0.3
  uuid: ^4.3.3
  cached_network_image: ^3.3.1
  # ...更多
```

#### 骑手端依赖

```yaml
dependencies:
  flutter:
    sdk: flutter
  dio: ^5.4.3
  provider: ^6.1.2
  shared_preferences: ^2.2.2
  flutter_secure_storage: ^9.0.0
  crypto: ^3.0.3
  # ...更多
```

#### 差异

| 依赖                          | 用户端   | 骑手端   | 优先级 |
|-----------------------------|-------|-------|-----|
| `go_router`                 | ✅     | ❌     | P0  |
| `cached_network_image`      | ✅     | ❌     | P1  |
| `hive`                      | ✅     | ❌     | P2  |
| `flutter_secure_storage` 版本 | 9.2.2 | 9.0.0 | P1  |

---

## 四、代码规范差异

### 4.1 文件命名

| 项    | 用户端                           | 骑手端                             | 优先级 |
|------|-------------------------------|---------------------------------|-----|
| 服务文件 | `api_client.dart`             | `network_service.dart`          | P0  |
| 安全存储 | `secure_storage_service.dart` | `security_storage_service.dart` | P0  |
| 导出文件 | `viewmodels.dart` 等           | 基本一致                            | -   |

### 4.2 日志规范

#### 用户端

- `AppLogger` 统一工具类
- 自动脱敏处理
- 使用 `developer.log`

#### 骑手端

- 有 `AppLogger` 但实现不同
- 有 `logger.dart` 重复
- 有 `phone_utils.dart` 脱敏工具

#### 差异

- ❌ 两个日志工具类重复
- ❌ 脱敏未集成到日志系统
- ❌ 缺少 API 请求/响应自动脱敏

### 4.3 错误处理

#### 用户端标准

- `AppError` 统一错误类
- `ErrorType` 枚举
- `Result<T>` 结果包装
- `fromDioError` 工厂方法

#### 骑手端现状

- `AppError` 存在但简单
- `error_utils.dart` 单独文件
- 缺少 `Result<T>` 包装

#### 差异

- ❌ 缺少 `Result<T>` 类型
- ❌ 错误处理不统一
- ❌ 缺少链式调用支持

---

## 五、安全与错误处理差异

### 5.1 安全存储

| 项          | 用户端                                | 骑手端                      | 优先级 |
|------------|------------------------------------|--------------------------|-----|
| 类名         | `SecureStorageService`             | `SecurityStorageService` | P0  |
| 方法         | 静态方法                               | 单例实例                     | P0  |
| Android 选项 | `encryptedSharedPreferences: true` | ✅ 有                      | -   |
| iOS 选项     | `first_unlock_this_device`         | `first_unlock`           | P1  |

### 5.2 网络安全

| 项          | 用户端       | 骑手端      | 优先级 |
|------------|-----------|----------|-----|
| 请求拦截器      | ✅ 完整      | ⚠️ 基本    | P0  |
| 响应拦截器      | ✅ 业务状态码检查 | ❌ 无      | P0  |
| 错误拦截器      | ✅ 完整      | ⚠️ 基本    | P0  |
| Token 自动添加 | ✅         | ✅        | -   |
| 认证错误处理     | ✅ 登出逻辑    | ❌ 无      | P0  |
| 请求签名       | ❌ 无       | ✅ 有(刚添加) | -   |

### 5.3 数据脱敏

| 项           | 用户端 | 骑手端 | 优先级 |
|-------------|-----|-----|-----|
| 日志自动脱敏      | ✅   | ❌   | P1  |
| API 请求/响应脱敏 | ✅   | ❌   | P1  |
| 手机号脱敏工具     | ⚠️  | ✅   | -   |
| 身份证号脱敏      | ⚠️  | ✅   | -   |

---

## 六、路由差异

### 6.1 用户端标准

```dart
// 使用 go_router
MaterialApp.router(
  routerConfig: appRouter,
)
```

### 6.2 骑手端现状

```dart
// 使用传统路由
MaterialApp(
  home: const LoginScreen(),
  routes: {'/home': (context) => const MainScreen()},
)
```

### 6.3 差异

| 项       | 状态 | 优先级 |
|---------|----|-----|
| 路由方案不统一 | ❌  | P0  |
| 缺少命名路由  | ❌  | P1  |
| 缺少路由守卫  | ❌  | P1  |

---

## 七、主入口文件差异

### 7.1 main.dart 对比

| 项                           | 用户端            | 骑手端               | 优先级 |
|-----------------------------|----------------|-------------------|-----|
| `WidgetsFlutterBinding` 初始化 | ✅              | ✅                 | -   |
| `FlutterError.onError`      | ✅              | ✅                 | -   |
| `runZonedGuarded`           | ✅              | ✅                 | -   |
| 路由配置                        | `routerConfig` | `routes` + `home` | P0  |
| App 类名                      | `MyApp`        | `RiderApp`        | P2  |

---

## 八、优先级总结

### P0 - 必须对齐（影响架构一致性）

1. 统一 ApiClient（替换 NetworkService）
2. 统一 SecureStorageService（静态方法模式）
3. 完善 BaseViewModel（ViewModelState）
4. 完善 BaseRepository（Result 类型、缓存）
5. 添加 Result<T> 类型
6. 完善 AppError 实现
7. 添加 ApiClient 拦截器（业务状态码、错误处理）

### P1 - 建议对齐（提升开发体验）

1. 添加 go_router 路由
2. 统一日志脱敏
3. 添加 cached_network_image
4. 统一文件名命名
5. 完善各页面 ViewModel
6. 完善各业务 Repository

### P2 - 可选对齐（锦上添花）

1. 升级依赖版本
2. 添加 hive 缓存
3. 统一 App 类名
4. 整理 constants/ 目录

---

## 九、改造建议

### 改造原则

- ✅ **不改动业务逻辑**
- ✅ **不改动页面布局**
- ✅ **只做架构重构**
- ✅ **只做规范对齐**
- ✅ **保持功能完全一致**

### 改造策略

1. **先搭建基础设施**：BaseViewModel、BaseRepository、ApiClient
2. **再统一服务层**：SecureStorageService、CacheService
3. **然后对齐架构**：逐步迁移现有代码到新架构
4. **最后验证测试**：确保功能不变、无 regressions
