【文章翻譯】AI makes it easy to migrate. Flutter makes it easy to scale.
【文章內容使用 Gemini 2.5 Flash 自動翻譯產生】
原文:https://flutter.dev/blog/ai-makes-it-easy-to-migrate-flutter-makes-it-easy-to-scale
AI 讓遷移變得容易。Flutter 讓擴展變得容易。
為什麼驗證速度,而不是程式碼生成,是代理開發的真正瓶頸,以及單一事實來源如何為多平台擴展提供動力。
過去幾個月,行動工程討論一直圍繞著遷移故事。現在,AI 程式碼工具可以在一個下午內搭建立新原型,工程主管提出了一個公平的問題:
「如果現代 AI 模型可以幾乎即時地生成 Swift 和 Kotlin,為什麼不直接用原生程式碼建立兩次呢?」
在 Google,我們過去一年一直在研究這種動態,跨越我們的內部團隊、企業合作夥伴和更廣泛的開源社群。正如我們今年早些時候在 Dart 和 Flutter 如何思考 2026 年的 AI 中分享的:AI 讓遷移到新框架變得容易。Flutter 讓擴展變得容易。 將第一天的遷移速度與第 2000 天的生產維護混淆,可能會讓工程組織付出多年的速度代價。
以下是統一程式碼庫在 AI 時代比以往任何時候都更重要的第一原理、代理工具和企業數據。
為什麼「寫兩遍」會在大規模上崩潰
要點 1:程式碼庫是累積的記憶(「爭論一次,建立一次」)
當工程團隊在第一天使用 AI 代理重寫應用程式時,模型擅長於初始的順利路徑:語法轉換、REST 端點、UI 佈局和樣板數據模型。從頭開始開發感覺毫不費力,因為它沒有任何歷史。
然而,到了第 2000 天,生產程式碼庫不再僅僅是 UI 語法,而是組織累積的記憶。它包含多年來已解決的產品爭論、生產事後分析、合規規則和邊緣案例修復。正如 Shorebird 的創始人兼 Flutter 共同創作者 Eric Seidel 最近在 AI 時代的可攜式軟體 中所寫:
「應用程式不僅僅是 UI 螢幕的捆綁包。應用程式是意圖交付和意圖捕獲的產物。」
在統一的多平台程式碼庫中,團隊爭論一次並建立一次。當組織要求 AI 用原生 Swift 和 Kotlin「寫兩遍」時,它並沒有消除複雜性;它將其分岔了。 每個新要求和邊緣案例都必須在多個堆疊中獨立浮現、解決和維護。
要點 2:平行代理引入非確定性漂移
在系統工程中,N 個離散介面之間的協調開銷呈組合式增長:
$$ \frac{N(N-1)}{2} $$
一個常見的假設是 AI 代理可以消除這種協調稅:「我們將讓代理 A 撰寫 Swift,代理 B 撰寫 Kotlin。」實際上,每個 LLM 生成都是機率性的。即使使用相同的提示和規範,兩個在不同語言範式中工作的代理也會做出不同的假設:
- 在 iOS 上: 代理 A 使用非同步流實現結帳狀態機,該流會丟棄過時的事件。
- 在 Android 上: 代理 B 使用反應式流實現相同的狀態機,該流會將事件排入佇列。

這兩種實作在第 1 天都通過了本地單元測試。幾週後在生產中,Android 結帳轉換率下降了 3%,例如,因為在間歇性網路中斷期間,重試時機的行為不同。資深工程師必須花費數天(或許多權杖)深入研究兩個不同的技術堆疊才能診斷根本原因。Flutter 從源頭消除了漂移。只有一個狀態機、一個數據序列化層和一個規範的業務邏輯來源。
要點 3:驗證而非生成才是真正的瓶頸
程式碼生成不再是軟體開發的瓶頸,驗證才是。雖然 73% 的開發人員表示使用 AI 開始任務時感覺更有效率,但 46% 的開發人員不信任 AI 在關鍵除錯方面的準確性,除非經過手動檢查。
代理的輸出品質受其回饋迴圈的速度和精確度所限制:
| 驗證步驟 | 傳統原生工作流程(Swift / Kotlin) | Flutter 封閉迴圈工作流程 |
|---|---|---|
| 程式碼到執行延遲 | 每次建置、連結、歸檔和模擬器部署需要 2 到 5 分鐘。四次除錯運行需要等待編譯器 20 多分鐘。 | 透過有狀態熱重新載入在 200 毫秒內 將程式碼更改注入正在運行的 Dart VM,同時保留狀態。 |
| 自動化測試 | 需要繁重的 OS 模擬器生命週期和背景模擬器。 | 透過在獨立環境中執行無頭 Widget 測試,**<500 毫秒**。 |
| UI 和狀態檢查 | 機率性且緩慢: 捕捉模擬器螢幕截圖並將像素傳遞給視覺模型以猜測佈局準確性。 | 確定性且結構化: 透過 MCP 查詢 Dart VM 服務和 DevTools,以檢查確切的 Widget 和 RenderObject 樹。 |
Flutter 旨在為人類開發人員提供即時回饋。正是這種架構使其在高速代理驗證方面獨樹一幟。
建構線束和運行時畫布
Flutter 的宣告式 UI、反應式 Widget 樹、受管理的運行時和有狀態熱重新載入,現在支援兩種不同的 AI 領域:建構時的 AI 輔助開發 和運行時的 生成式 UI。
要點 4:更好的線束勝過更好的提示
在沒有引導的情況下,代理對 Flutter 的了解僅限於其訓練截止日期:通常會使用已棄用的 API,誤讀第三方套件,或在驗證更改之前停止。提示工程無法可靠地解決這個問題;線束工程 可以。
我們在內部透過 Project One Shot 測試了這一點,Flutter 工程師 Reid Baker 和 Camille Simon 指派一名代理程式自主解決 camera_android_camerax 中的生產錯誤,這是我們最複雜的 Plugin 之一,涉及原生 Android CameraX 生命週期和表面紋理綁定。諸如「避免記憶體洩漏」之類的通用指令失敗了。代理程式僅在與確定性線束配對時才成功:透過 MCP 進行 AST 分析、特定套件的領域技能以及強制性的測試驅動防護(透過失敗的測試重現 → 撰寫最小修復 → 通過套件和洩漏檢查器)。
為了讓每個 Flutter 團隊都能擁有相同的線束,我們推出了三項核心功能:
- 官方 Dart 和 Flutter 代理 Plugin: 捆綁我們專用的模型上下文協定 (MCP) 伺服器以及 10 個 Flutter 和 14 個 Dart 技能。它們讓代理程式直接存取 Dart 分析器和 Widget Inspector,以強制執行框架最佳實踐。
- 專業的反重力代理程式: 嵌入式代理程式,可自動審核正在運行的 Flutter 應用程式是否存在輔助功能問題並提交慣用修復。
- 代理技能 CLI: 與我們在 Serverpod 的朋友一起開發,Skills CLI 使套件作者能夠在其套件中提供領域特定的代理技能。運行一個指令即可為代理程式配備庫特定的規則:
1 | # Scans immediate dependencies and discovers available skills |
我們針對實際的評估套件(涵蓋佈局溢出解決、響應式設計、REST API 連線、主題設定和許多其他日常開發人員任務)對線束中的每個工具和技能進行基準測試:
| 評估前沿模型 | 基準(無 Flutter 工具) | 增強(有 Flutter 線束和 MCP) |
|---|---|---|
| Gemini 3.5 Flash | 84.1% | 85.5% (+1.4%) |
| Gemini 3.1 Pro | 89.6% | 92.7% (+3.1%) |
要點 5:生成式 UI 是下一代通用畫布
在執行時,應用程式正從靜態的、預先渲染的畫面演變為即時適應使用者意圖的動態介面。Google 和業界合作夥伴正在 a2ui.org 開發 A2UI(代理到使用者介面),這是一種用於生成式介面的開放標準,為 Flutter 的 GenUI SDK 提供動力。
今年早些時候,我們將此投入生產,推出了 GenLatte,這是一個基於 Flutter、Firebase Functions 和 Genkit 的 AI 原生點餐系統,已實際供應超過 3,000 杯咖啡。其運作方式如下:客戶描述他們喜歡的地方,Gemini 設計自訂的拿鐵藝術,Flutter 的 GenUI 引擎動態水合互動式 UI 控制項,以便使用者可以完善結果。
如果 AI 代理必須在五種不同的作業系統上協商五種不同的原生佈局引擎,它就無法輕鬆地在執行時合成動態介面。然而,Flutter 是 GenUI 的理想基礎,因為它提供了將 UI 串流和渲染到任何地方所需的可移植、宣告式畫布,並且具有完全的一致性。
大規模證明:多表面覆蓋範圍和企業實況
數位產品不再僅限於手機。在 iOS、Android、WebAssembly 網頁、桌面(Windows、macOS、Linux)、車載顯示器和嵌入式資訊亭上維護獨立的原生程式碼庫,會使您的測試矩陣和代幣成本增加六倍。透過 Impeller 提供動力—它預先編譯 Metal、Vulkan 和 OpenGL 的著色器以提供無卡頓的 120fps 渲染—單一 Flutter 程式碼庫可部署到六個或更多目標。
這種架構優勢是全球工程團隊將任務關鍵型生產系統標準化為 Flutter 的原因:
- 小米 (SU7 電動車 & HyperOS 4): 使用 Flutter 建立了 SU7 電動車配套應用程式,並使用 Flutter 重新編寫了核心 HyperOS 4 系統應用程式(圖庫、啟動器、天氣)的 UI,以及使用 Rust 處理數億部手機的後端邏輯。
- Universal Destinations & Experiences: 統一行動點餐、互動式公園地圖、數位錢包和 Epic Universe 公園資訊亭,將程式碼庫大小減少 45%,且幾乎沒有當機。
- 汽車: 豐田和 Lexus 在 RAV4 等車型中為車載資訊娛樂系統提供動力,而 BMW 則將全球 My BMW 應用程式標準化為 Flutter。
- 金融科技: Nubank 為超過 1 億客戶提供服務,每週部署數百次。
使用者會注意到框架嗎?
在編寫獨立原生應用程式的論點之下,有一個不言而喻的前提:跨平台 UI 會給終端使用者在應用程式商店中注意到的體驗帶來負擔。
為了驗證這項主張,我們審查了從 Apple App Store 和 Google Play Store 中 201,000 個熱門行動應用程式獨立收集的 Apptopia 數據:
| App Store 平台 | Flutter 應用程式平均評分 | 非 Flutter 應用程式平均評分 |
|---|---|---|
| Google Play 商店 | 4.1 ★(9,000 個應用程式樣本) | 4.1 ★(66,000 個應用程式樣本) |
| Apple App Store | 4.0 ★(13,000 個應用程式樣本) | 4.0 ★(113,000 個應用程式樣本) |
使用者不會評估底層框架;他們評估回應能力、視覺精美度和可靠性。
給團隊的 8 個討論點
下次您的組織討論是否要用 AI 維護多個原生程式碼庫時,請將這八個討論點帶入對話中:

接下來會是什麼?
加速在第一天很容易推銷。架構規模是讓您的軟體在第 2000 天保持可靠的關鍵。若要在您的工作流程中開始搭配 Flutter 和 AI:
- 在您的 IDE 中安裝 官方 Dart 和 Flutter 代理 Plugin。
- 查看 Flutter 的 GenUI SDK。
- 在我們的 社群討論 中分享您的團隊如何搭配 Flutter 和 AI。
- 重溫我們在 FlutterCon Berlin 的主題演講。





