Files
FruitServer/docs/plans/INBOX.md
T

56 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# INBOX
## [已处理] K65-A 冷启动提前拉取首页数据
### 现状
- `lib/main.dart` 在 `runApp` 之前 `await AppConfig.probeAndApplyBaseUrl()`,三个候选地址
(`127.0.0.1` / `192.168.31.187` / 公网)**串行**探测,每个 2s 超时,最坏 6s。
这段时间原生开屏一直停留,首页请求根本还没开始。
- `runApp` 之后,`app.dart` 的 Provider 才创建 `CatalogController` 并 `..load()`。
### 目标
- 冷启动尽快开始首页数据请求:第一帧立即绘制(深底 + 主题色转圈),探测一完成立刻拉首页。
- 探测并行化:三个候选同时探测,总耗时上限约 2s;仍按
`127.0.0.1 > 192.168.31.187 > 公网` 的优先级选第一个可用地址。
- 观感:原生开屏 → 应用内同款深底转圈(数据在拉)→ 首页。
### 实现
1. `lib/core/config/app_config.dart`
- 新增 `static Future<void> ready = Future<void>.value();`,作为「启动探测完成」的信号;
默认已完成,保证现有测试无感。
- `probeAndApplyBaseUrl` 改为**并行**发起所有候选探测(`Future.wait`),
全部返回后按原优先级取第一个成功地址并 `applyRuntimeBaseUrl`;
全失败时仍走 `fallbackBaseUrl ?? defaultBaseUrl`。
- 保留 `probe` 注入参数与现有「运行中重试」语义。
2. `lib/main.dart`
- 不再 `await` 探测:`AppConfig.ready = AppConfig.probeAndApplyBaseUrl();` 后立即 `runApp`。
- `ServerEndpoint.load()`、竖屏锁定仍保持 `await`。
3. `lib/core/data/services/catalog_controller.dart`
- `load()` 里先 `loading = true; error = null; debugError = null; notifyListeners();`
然后 `await AppConfig.ready;` 再发起请求,保证请求用的是探测后的地址,
且等待期间首页显示转圈而不是「暂无短剧」。
4. 测试
- `probeAndApplyBaseUrl`:三个候选并行、优先级选择、全失败回落。
- `CatalogController.load()`:`AppConfig.ready` 未完成时 `loading == true` 且未发请求,
完成后按最终地址发请求;测试结束复位 `AppConfig.ready` 与运行时地址。
- 其余测试如受 `AppConfig.ready` 影响,需在 `setUp` 复位为 `Future.value()`。
### 验收
- 冷启动不再有「原生开屏停住等探测」的空窗:第一帧立即出现深底转圈。
- 探测总等待从最长 6s 降到约 2s。
- 门禁:`dart analyze lib test` 零告警、`flutter test` 全过、`flutter build apk --debug` 成功。
### Git
- 从 `develop` 拉 `feat/startup-prefetch`。
- 提交:`perf(home): 冷启动提前拉取首页数据`,作者 `Zhou Weidong <502333560@qq.com>`。
- `--no-ff` 合回 `develop` 并 push;`FruitServer/docs/plans/PROGRESS.md` 追加 K65-A 留痕。
### 约束
- 全程中文;禁止 `git add -A`;不改原生开屏资源、不改 UI 视觉;完成后停住等待验收。