56 lines
2.8 KiB
Markdown
56 lines
2.8 KiB
Markdown
# 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 视觉;完成后停住等待验收。
|