2.8 KiB
2.8 KiB
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 > 公网的优先级选第一个可用地址。 - 观感:原生开屏 → 应用内同款深底转圈(数据在拉)→ 首页。
实现
lib/core/config/app_config.dart- 新增
static Future<void> ready = Future<void>.value();,作为「启动探测完成」的信号; 默认已完成,保证现有测试无感。 probeAndApplyBaseUrl改为并行发起所有候选探测(Future.wait), 全部返回后按原优先级取第一个成功地址并applyRuntimeBaseUrl; 全失败时仍走fallbackBaseUrl ?? defaultBaseUrl。- 保留
probe注入参数与现有「运行中重试」语义。
- 新增
lib/main.dart- 不再
await探测:AppConfig.ready = AppConfig.probeAndApplyBaseUrl();后立即runApp。 ServerEndpoint.load()、竖屏锁定仍保持await。
- 不再
lib/core/data/services/catalog_controller.dartload()里先loading = true; error = null; debugError = null; notifyListeners();然后await AppConfig.ready;再发起请求,保证请求用的是探测后的地址, 且等待期间首页显示转圈而不是「暂无短剧」。
- 测试
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 视觉;完成后停住等待验收。