# player_plugin 项目规则

## 项目定位

Flutter 播放器插件，封装 iOS 原生播放器供 Flutter 应用使用。将来发布到 pub.dev。

## 项目关系

本项目属于 iLook 播放器三件套，三个项目的绝对路径：

| 角色 | 绝对路径 |
|------|---------|
| iOS 原生播放器（源头） | `/Users/mmx/Documents/work/APP/ios-sdk/ilook-ios-player` |
| Flutter 播放器插件（本项目） | `/Users/mmx/Documents/work/APP/ios-sdk/Flutter-demo/player_plugin` |
| Flutter 应用 | `/Users/mmx/Documents/work/APP/ios-sdk/Flutter-demo/iLook-flutter` |

**依赖流：**

```
iOS 代码：
  ilook-ios-player ──sync.sh──▶ player_plugin/ios/ILookPlayerCore/ ──pub──▶ iLook-flutter

Android 代码：
  player_plugin/android/ ──pub──▶ iLook-flutter   （无原生源头项目，直接在插件内维护）
```

**本项目目录结构：**

```
player_plugin（Flutter 插件）
  ├── lib/                 → Dart 代码（PlayerController、Dart UI 控件）
  ├── ios/Classes/         → Flutter 桥接（TestComponent + PlayerPlatformView）
  ├── ios/ILookPlayerCore/ → iOS 播放器核心（从 ilook-ios-player 同步，禁改）
  └── android/             → Android 实现（C/JNI/Java，直接维护）
```

## 关键规则

- **禁止直接修改 ios/ILookPlayerCore/ 下的文件**，改动必须先在 ilook-ios-player 中进行，再通过 sync.sh 同步过来
- **ios/Classes/TestComponent.m 是唯一允许直接修改的原生文件**（因为它与原生侧有差异，不自动同步）
- **Dart 代码可以直接在本项目修改**（lib/ 目录）

## 两套 UI 模式

本项目同时包含两套 UI，通过不同 Widget 切换：

| Widget | UI 来源 | 状态 |
|--------|---------|------|
| `PlayerView` | iOS 原生 UIKit 控件 | ✅ 当前使用 |
| `PlayerViewWithControls` | Flutter Dart 控件 | 开发中（lib/ui/） |

两套完全独立，互不影响。

## ios/Classes/ 文件说明

| 文件 | 说明 | 可直接修改 |
|------|------|-----------|
| PlayerPlatformView.h/m | Flutter PlatformView 桥接 | ✅ |
| PlayerPlugin.h/m | Flutter 插件注册入口 | ✅ |
| DCUniComponent.h/m | uni-app 基类 stub | ✅ |
| TestComponent+FlutterBridge.h | Flutter 方法声明补充 | ✅ |
| TestComponent.h | 从 ilook-ios-player 同步 | ❌ sync.sh 管理 |
| TestComponent.m | Flutter 特殊适配版 | ✅ 手动合并 |

## TestComponent.m Flutter 侧特殊适配

- import 路径：`"DLNAManager.h"` 而非 `"DLNA/DLNAManager.h"`
- 新增方法：`setNativeUIVisible:`（Dart UI 切换用）
- 原生新增的方法需要手动合并过来
