Skip to content

feat(app): declare platform capabilities and font fallback - #178

Merged
1morr merged 4 commits into
mainfrom
feat/platform-layer
Sep 29, 2026
Merged

1morr merged 4 commits into
mainfrom
feat/platform-layer

Conversation

@1morr

@1morr 1morr commented Sep 29, 2026

Copy link
Copy Markdown
Owner

內容

M1 PR 4:平台層與能力宣告(ADR 0009 §決定 1–4、ADR 0024 §決定 2;.trellis/tasks/archive/2026-09/09-29-platform-layer/prd.md)。

  • PlatformCapabilities:只有 M1 用到的三個欄位,dataDirectory、singleInstance、fontFallback,不預留其他能力的欄位(ADR 0009「不寫空實作」)。播放後端在 PR 10 加。
  • AppPlatform:唯一判斷平台的組裝點。
    • Android、Windows 有實作;
    • Linux、macOS、iOS 宣告全部為「沒有」,開出「此平台尚未支援」畫面。
  • 字型:
    • Windows 依 ADR 0024 指定正黑體與雅黑,英文介面繁中在前。
    • Android 不指名字型:系統的 Noto CJK 是沒有名稱的 fallback family,寫 Noto Sans TC 對不到任何字型。繁簡字形改由文字的 locale 決定,ADR 0024 已補更正。

實機

  • Android 模擬器:以臨時探測頁顯示「骨直這說」,探測頁未提交。

    • zh-Hant-TW、zh-Hant-HK、zh_TW 都是繁中字形;
    • zh-Hans-CN 是簡中字形;
    • ja_JP 是日文字形。

    實作代理原本從原始碼推論「Android 一律拿到簡中字形」,實測推翻了這點,研究檔記下了兩者。

  • Windows dev:畫面與 PR 2 相同,顯示「FMP Dev / dev」與資料目錄。

Review 指南

  • lib/platform/platform.dart 是唯一有平台判斷的地方,fmp_platform_checks 守整個 lib/platform/ 以外。
  • 測試以 AppPlatform.assemble(TargetPlatform.x, …) 注入平台,不讀真實的 Platform。
  • PR 12 待辦:英文介面時 Android 的漢字可能落到簡中字形(推論、未實測),已記在 M1 implement。

驗證

app/:

  • format 通過;
  • dart analyze --fatal-infos、flutter analyze 乾淨;
  • flutter test:46 過、1 跳過(live);
  • 哨兵報出 13 條規則;
  • Windows 與 Android 的 dev 版都建置成功。

Capabilities list only what the app implements; Linux, macOS and iOS
declare none and open an unsupported-platform screen. Android leaves CJK
glyph choice to the text locale, which picks Traditional forms.
@1morr
1morr merged commit 5039900 into main Sep 29, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant