fix: 修复迁移后的基础UI显示问题

This commit is contained in:
cancerai committed 2026-10-25 16:03:05 +08:00
1 parent 18017f819a
commit a93e06f60c
68 files changed
+2293 -8404

No files matched your search

+10
View File
@@ -178,3 +178,13 @@
- **`withOpacity` 弃用清理**:5 处换成 `Color.withValues(alpha: o*255)`(本 SDK Dart 3.12 的 `withValues` 只有 `alpha` 参数、无 `opacity`;`opacity` 写法会编译失败,已实测回退)。`RawKeyboard` 等其余弃用属输入层 API、仍可用、保持不动(重写风险大收益小)。
- **最终确认**:`flutter analyze` **0 error**(约 201 条 info 级 lint,主要是 web 常量大写命名 style,不影响构建);`flutter test` **13/13 通过**(gameplay 物理保真 4 项 + title 渲染/横屏/手柄 8 项 + AppRoot smoke 1 项)。物理保真:JUMP 6.6/GRAV 0.25、可变跳高、死亡不自动重生按 R 回存档点均与 web 一致。
- **用户侧交付**:本沙箱无法跑原生构建,需用户在本地 `app/` 执行 `flutter pub get` → `flutter build apk`(安卓)/ `flutter build macos` / `flutter build linux` / `flutter build windows`;iOS 触屏检测仍可拓宽。
### Flutter 真机首跑反馈修复:标题溢出 + Build scheduled during frame(同日晚)
- 用户真机(安卓横屏,锁屏生效——截图相机孔在左侧短边)反馈:① 标题菜单 `BOTTOM OVERFLOWED BY 125 PIXELS`;② 控制台刷 `Build scheduled during frame`。
- **② 根因**:`world.render()`(paint 阶段)里调 `_pushToast(L.toast)` → `toast.value` 变化,而 `toast` 被 HudOverlay 的 ValueListenableBuilder 监听 → paint 阶段 markNeedsBuild。修复:把 toast 推送从 `render()` 移到 `tick()`(Ticker 回调 = transientCallbacks 阶段,合法),并顺带从 update() 的 hudTick%5 块改为每帧推送(更贴 web 逐帧行为)。**通则:paint/build 阶段绝不能写被 ValueListenableBuilder 监听的 notifier;一切 host 回调只允许在 tick() 里发。**
- **① 根因**:横屏真机逻辑高度只有 ~360-400px(1080 物理 ÷ DPR),标题 Column 内容 ~455px → 底部溢出 125px。之前测试没抓到是因为 `setSurfaceSize(2340×1080)` 设的是**逻辑**像素,比真机大得多。修复:
- `screens.dart` 新增 `_FitScroll`(LayoutBuilder + SingleChildScrollView + ConstrainedBox(minHeight) + 保底高度):空间够时按原布局、不够时整体可滚动。应用于 TitleScreen(Column 已 center)。
- SettingsScreen 同样包 `_FitScroll`,纵向 `Spacer()` 换 `SizedBox(height:16)`(Spacer 在无界高度滚动容器里会抛异常;底部 Row 里的横向 Spacer 保留)。
- LevelSelectScreen 不动(含 Expanded 的列表布局,ListView 自滚)。
- **通则:`_FitScroll` 内部禁止 Spacer/Expanded/Flexible。**
- 回归:`title_render_test.dart` 新增「横屏小逻辑高度(800×360)下标题不溢出」用例(pump 即可,overflow 异常会直接判失败;另 scrollUntilVisible 验证底部版权行滚动可达)。当前 `flutter analyze` 0 error、`flutter test` **14/14 通过**。