摺痕與鏡頭先不算你的 UI:一款 Flutter 插件,攤開的是摺疊時代的適配帳
一款名為 tw_iphone_duo_reserved_region 的 Flutter 插件把 iPhone Duo 遮擋區域轉為窗口邏輯座標的 Rect,本文從開發者適配成本與跨平臺工具分工,拆解摺疊時代 UI 適配這筆帳。
2026 年 9 月 24 日,開發者 zeqinjie 在掘金發布了 tw_iphone_duo_reserved_region 插件的說明文。這款插件做的事很單純:把 iOS 當前啟用的遮擋區域(Reserved Region)轉換為 Flutter 窗口邏輯座標中的 Rect,讓應用自行調整布局。但在摺疊機元年這個時點,一個「讀取遮擋矩形」的小工具,對應的是整條跨平臺開發鏈上新增加的成本項。
這個插件解決的問題,比看起來窄
iOS 對 Reserved Region 的定義分兩類。一類是 division,把可用空間切分成多個區域,例如 iPhone Duo 的摺痕;另一類是 occlusion,只遮擋局部內容,例如啟用中的 FaceTime 攝像頭。這款插件只返回當前啟用的 occlusion 區域,不處理摺痕對應的 division 區域,也不提供設備姿態或鉸鏈狀態。
換句話說,它是一個幾何資訊的讀取端,不是適配方案本身。插件返回三種結果:null 代表能力不可用或查詢失敗,文件明確提醒不應據此斷定當前沒有遮擋;空列表代表查詢成功且無啟用遮擋;非空列表則包含遮擋矩形,由開發者自行做相交判斷後決定避讓方式。
版本門檻先把使用者分了層
接入條件本身就能畫出一張需求分布圖。Dart 需要 3.10.0 以上且低於 4.0.0,Flutter 需要 3.44 或更高,iOS Deployment Target 為 15.5 以上,編譯環境要求 Xcode 27.1(含 iOS 27.1 SDK),而 Reserved Region API 在運行時要 iOS 27.1 以上才生效。
這裡有一個容易被忽略的分離:最低部署版本與 API 可用版本是兩回事。應用可以部署到 iOS 15.5 的舊設備,但編譯必須使用聲明了 Reserved Region API 的 SDK;在較早的運行時上,原生層通過可用性檢查返回 null,交由 Flutter 側回退到普通布局。這種「寬部署、窄能力」的設計,把適配成本從用戶端移回了開發端的分支邏輯裡。
這與我們先前分析的跨平臺檔案儲存插件的重工帳是同一類問題:平臺差異每多一層,開發者要麼在業務代碼裡寫分支,要麼把分支外包給一個插件維護者。後者的代價是依賴鏈上的版本約束,前者的代價是程式碼庫的長期維護負擔。
SafeArea 之外的縫隙,由誰來補
文件用一張對照表說明了插件的位置。SafeArea 從窗口邊緣向內留出安全空間,適合常規頁面、導航欄與底部操作區;Reserved Region 是位於視圖座標空間的具體區域,適合自定義邊緣 UI、懸浮按鈕等需要判斷與局部遮擋是否相交的場景。
分工原則是標準組件優先。只有自定義邊緣 UI 或需要精確避讓時,才讀取 Reserved Region,而且插件只提供幾何資訊,不會自動修改 padding 或組件位置。這意味著真正的適配工作量沒有消失:開發者拿到 Rect 後,需要把目標組件的局部座標轉換到窗口座標(文件給出了 findRenderObject 加 MatrixUtils.transformRect 的轉換路徑),再調用 Rect.overlaps 做相交判斷,最後按業務需要移動或重排組件。
成本傳導:誰付這筆帳
把鏈條拉開看,摺疊機形態帶來的適配成本大致按三層分攤。系統層提供 API 與座標語義;框架層(此處是 Flutter 的橋接與 Provider 分發)處理能力探測與回退;應用層承擔最終的布局決策。這款插件把中間一層標準化了,但第三層的帳仍由每個 App 各自支付。
受惠的一方是中小開發團隊:不用自己寫原生 Channel、處理 SDK 可用性檢查與狀態分發,接入成本從數天的原生工程收斂到一個 Bridge 加一行 Provider 讀取。承壓的一方則是長期維護者,插件需要跟上 Dart、Flutter、Xcode 三條版本線的演進,任何一條線的破壞性更新都會轉化為維護工時。
一個縮小的切片,一份更大的帳單
回到市場面,摺疊形態的適配需求正在從「要不要支援」變成「支援到什麼程度」。這款插件刻意不碰 division 區域與鉸鏈狀態,把範圍收在 occlusion 這一塊,這個取捨本身就說明完整的摺疊適配帳遠比一個插件大:摺痕避讓、跨屏狀態、姿態切換都還在帳單上沒有結算。
從可核實的資訊看,這篇文章的價值在於它攤開了一個具體成本項的計價方式:版本門檻、座標轉換、回退策略,每一項都有明確的工程對價。至於摺疊適配最終會沉澱為框架內建能力還是繼續由插件生態分攤,目前的資料還不足以給出判斷,值得後續追蹤 Flutter 官方對 Reserved Region 的支援進度再作評估。這與折疊機定價權的市場帳互為一體兩面:硬體定價由蘋果開價,軟體適配成本則由整個開發者生態分攤。