【文章翻譯】Unleash new AI capabilities for Flutter in Firebase Studio

【文章內容使用 Gemini 2.5 Flash 自動翻譯產生】

在 Firebase Studio 中,Flutter 開發變得更加智慧了!在 I/O Connect India 大會上,我們推出了由 AI 驅動的新功能,旨在為您提供更自動化、更高效的工作流程。在這篇文章中,我們將深入探討 Firebase Studio 中專為 Flutter 設計的全新 AI 增強功能,並向您展示如何利用它們來構建強大的應用程式,就像我們在舞台上展示的演示一樣。

升級 AI 優化 Flutter 模板

Firebase Studio 中的 Flutter 模板獲得了重大升級。憑藉其新的 AI 功能,您可以優化工作區,獲得 AI 優先的體驗。例如,在使用這個新模板構建 I/O Connect India 演示時,Firebase Studio 生成了一個多螢幕電子商務應用程式,包括狀態管理、Firebase 身份驗證、產品、購物車和結帳。AI 優化模板預設為自主代理模式,允許 Gemini 直接進行更改,無需等待批准。我們還將 Gemini 的規則整合到一個(自動生成的)airules.md 文件中,以進一步完善 Gemini 生成的程式碼,使您能夠以更簡化的流程添加功能或生成整個 Flutter 應用程式。

Firebase Studio 中的 Flutter 模板已升級,提供 AI 優先的體驗

自主進行更改

以前,在 Firebase Studio 中處理 Flutter 專案時,您需要手動批准代理模式下的每個程式碼更改。現在這個工作流程已經顯著發展,可以自主(獨立且自動)進行編輯。透過新的代理 (Auto-run) 模式,Gemini 現在可以自主進行更改、生成整個應用程式,並以簡化的流程添加功能。例如,在開發類似於我們的 I/O Connect India 演示應用程式時,您可以使用代理 (Auto-run) 模式在單次互動中無縫整合 Firebase 後端服務並實作複雜的導航模式。鑑於 Gemini 對 Dart 和 Flutter 的強大支援,這種自主模式讓您保持在開發流程中。如果更改與您的預期不完全一致,請放心,Firebase Studio 利用 Git,允許您快速將更改回復到先前的提交。

Firebase Studio 中 Flutter 專案的代理 (Auto-run) 模式

AI 規則

透過升級後的 Flutter 模板,我們將 AI 指令整合到一個新文件:airules.md 中。這個文件(位於專案的根目錄)包含 Gemini 在生成程式碼時要遵循的明確規則,從而提高輸出的品質和相關性。您可以靈活地使用預設的 AI 規則或根據專案的特定需求自訂它們。雖然有很多規則,但這裡有幾個範例:

  • 充當 Flutter 共同開發人員
  • 撰寫單元測試
  • 主動尋找並修復錯誤
  • 選擇要使用的主題、工具、擴充功能和啟動命令
  • 新增和移除 Flutter 套件
  • 遵守 Flutter 和 Dart 程式碼品質的最佳實踐
  • 設定複雜的導航
Firebase Studio 中預設 Flutter AI 規則 (airules.md) 概述

相容於 Dart MCP 伺服器

Firebase Studio 現在包含了對模型上下文協定 (MCP) 的基礎支援,我們很高興地分享它與我們的 Dart MCP 伺服器 協同工作。當整合到 Firebase Studio 中時,Dart MCP 伺服器使 Firebase Studio 中的 Gemini 能夠分析並自動修復專案程式碼中特定於 Dart 和 Flutter 的錯誤。您還可以高效地在 pub.dev 上搜尋最佳套件、管理 pubspec.yaml 中的依賴項、運行測試等等。例如,在構建類似於我們在 I/O Connect India 舞台上演示的 Flutter 應用程式時,Gemini 應該能夠識別並自主糾正靜態和運行時錯誤。目前,Dart MCP 伺服器處於 beta 階段。

若要了解如何在 Firebase Studio 中構建 Flutter 應用程式時使用 Dart MCP 伺服器,請參閱部落格文章:使用 Dart MCP 伺服器增強您的 Dart 和 Flutter 開發體驗

Firebase Studio 中 Flutter 應用程式的 Dart MCP 伺服器配置

與我們一起構建

我們對 Firebase Studio 與 Flutter 的持續整合有著雄心勃勃的計畫,我們渴望 聽取您在 Firebase Studio 中使用 Flutter 的回饋意見,因為您正在探索這些新功能。我們非常期待看到您的創造!


在 Firebase Studio 中釋放 Flutter 的全新 AI 功能 最初發佈於 Flutter 的 Medium,人們在那裡透過突出顯示和回應這個故事來繼續討論。

【文章翻譯】Supercharge Your Dart & Flutter Development Experience with the Dart MCP Server

【文章內容使用 Gemini 2.5 Flash 自動翻譯產生】

透過 Dart MCP Server 提升您的 Dart 和 Flutter 開發體驗

作者:Ander Dobo — 產品經理,Kenzie Davisson — 工程師

AI 開發的格局正在迅速演變,強大的代理能夠協助開發人員完成各種任務。為了真正釋放它們的潛力,這些代理需要存取超越其固有能力的上下文和工具。這就是 Model Context Protocol (MCP) 的作用,它充當標準化的外掛系統,將 AI 模型連接到外部系統和資料來源。Dart MCP Server 是我們針對 Dart 和 Flutter 生態系統實施此標準的成果。

本文探討如何利用 Dart MCP Server 來增強您的 Dart 和 Flutter 開發體驗。我們將介紹 Dart MCP Server 提供的實用工具,並展示如何配置伺服器以用於 Gemini CLI、VS Code 中的 Gemini Code Assist、Cursor 和 VS Code 中的 GitHub Copilot 等常用工具。

這種方法是快速成長的生態系統的一部分。例如,Firebase 團隊最近發布了他們自己的實驗性 Firebase MCP Server,它為 AI 助理提供了管理 Firebase 身份驗證、查詢 Firestore 資料庫以及了解影響您在生產中應用程式的應用程式崩潰類型的工具。

介紹 Dart MCP Server

Dart MCP Server(需要 Dart SDK 3.9/Flutter 3.35 beta 或更高版本)是一個功能強大的工具,它彌合了 AI 編碼助理和 Dart/Flutter 開發生態系統之間的鴻溝。它允許 AI 模型與您的開發環境和正在運行的 Dart 或 Flutter 應用程式互動,提供智能洞察,並使用通常只有您的 IDE 或 Dart & Flutter DevTools 才能存取的工具。

Dart MCP Server 能為您做什麼?

Dart MCP Server 提供不斷增加的工具清單,這些工具讓 AI 助理能夠深入了解您的專案。它可以:

  • 分析並修復 專案程式碼中的錯誤。
  • 內省並與您正在運行的應用程式互動(例如觸發熱重載、取得選取的 Widget、擷取執行時錯誤)。
  • 在 pub.dev 搜尋 最適合您用例的套件。
  • 管理 pubspec.yaml 中的套件相依性。
  • 運行測試 並分析結果。
  • ……還有更多!

有關最新工具清單,請參閱官方文件

Dart MCP Server 實際應用

Dart MCP Server 的真正力量在於它如何讓 AI 助理和代理不僅能夠推斷您專案的上下文,還能透過工具採取行動。大型語言模型 (LLM) 決定使用哪些工具以及何時使用,因此您可以專注於用自然語言描述您的目標。讓我們透過幾個使用 VS Code 中 GitHub Copilot Agent 模式的範例來看看實際應用。

修正執行時佈局錯誤

我們都經歷過這種情況:您建立了一個漂亮的 UI,運行應用程式,卻看到臭名昭昭的 RenderFlex 溢出錯誤的黃黑條紋。現在,您無需手動調試 Widget 樹,而是可以向 AI 助理尋求協助。

提示: 「檢查並修復靜態和執行時分析問題。檢查並修復任何佈局問題。」(注意:為了簡潔起見,此錄製的部分內容已加速。)

在幕後,AI 代理使用 Dart MCP Server 的工具來:

  1. 查看錯誤: 它使用工具從正在運行的應用程式中獲取當前執行時錯誤。
  2. 檢查 UI: 它存取 Flutter Widget 樹以了解導致溢出的佈局。
  3. 應用修復: 借助此上下文,它應用修復並再次檢查是否存在任何剩餘錯誤。

然後您可以保留或撤銷程式碼變更。

透過套件搜尋新增功能

想像一下,您需要為您的應用程式新增一個圖表。您應該使用哪個套件?如何新增它並編寫樣板程式碼?Dart MCP Server 簡化了整個過程。

提示: 「找到一個合適的套件來新增一個線圖,用於繪製一段時間內按鈕按下的次數。」(注意:為了簡潔起見,此錄製的部分內容已加速。)

AI 代理現在充當真正的助手:

  1. 找到正確的工具: 它使用 pub_dev_search 工具來尋找流行且評價很高的圖表函式庫。
  2. 管理相依性: 在您確認其選擇(例如,syncfusion_flutter_charts)後,它使用工具將套件新增到您的 pubspec.yaml 並執行 pub get
  3. 產生程式碼: 它產生新的 Widget 程式碼,包括線圖的樣板程式碼,並將其放置在 UI 中。它甚至會自動更正在此過程中引入的語法錯誤。您可以從那裡進一步自訂。

過去需要研究、閱讀文件、編輯 pubspec.yaml 以及在應用程式中編寫相應程式碼的多步驟過程,現在變成了一個單一請求。

使用流行的 AI 驅動開發環境和工具進行配置

由於 Model Context Protocol 正在迅速成為整合工具鏈和 LLM 的標準,因此可以使用 MCP 伺服器的工具清單不斷增長。Dart MCP Server 可以與任何 MCP 用戶端集成*。請查看 MCP 用戶指南 以獲取用戶端範例清單。

首先,Dart MCP Server 需要 Dart SDK 3.9/Flutter 3.35 beta 或更高版本,因此切換到 beta channel 並運行 flutter upgrade 以確保您擁有最新版本。

*要存取 Dart MCP Server 的所有功能,MCP 用戶端必須支援 工具資源。為了獲得使用 Dart MCP Server 的最佳開發體驗,MCP 用戶端還應該支援

Gemini CLI

Gemini CLI 是一個開源 AI 代理,它將 Gemini 的強大功能直接帶到您的終端機中,提供從您的提示到模型的直接路徑。雖然它擅長編碼,但 Gemini CLI 是一個多功能的本地實用程式,您可以用它來完成各種任務,從內容生成和問題解決到深入研究和任務管理。

請依照快速入門說明在您的機器上安裝 Gemini CLI。

確保您的環境正在運行 Dart SDK 3.9/Flutter 3.35 beta 或更高版本。如果需要,請切換頻道並運行 flutter upgrade

若要配置 Gemini CLI 以使用 Dart MCP Server,請編輯您本地專案中的 .gemini/settings.json 檔案(這只會啟用此專案的伺服器),或編輯您家目錄中的全域 ~/.gemini/settings.json 檔案(這會啟用所有專案的伺服器)。

1
2
3
4
5
6
7
8
9
10
11
{
"mcpServers": {
"dart": {
"command": "dart",
"args": [
"mcp-server",
"--experimental-mcp-server"
]
}
}
}

專業提示:

  • 如果您使用 /mcp 提示 Gemini CLI,您將能夠看到可用的一組 MCP 工具。
  • 如果您的專案有您希望 LLM 了解的特定準則或規則,您可以透過在專案根目錄中新增一個 GEMINI.md 檔案來記錄這些準則或規則。

Gemini Code Assist

注意:這目前需要 Gemini Code Assist「Insiders」頻道。請依照 Gemini Code Assist 說明 啟用 Insiders 版本。

Gemini CLI 的底層技術也已整合到 VS Code 中的 Gemini Code Assist 中,這是一個強大的 AI 助理,直接在您的 IDE 中提供聊天和代理功能。在 代理模式 下,您可以在聊天視窗中撰寫提示,並觀察 Gemini 如何努力滿足您的請求。請依照 設定指南 開始使用 Gemini Code Assist。

確保您的環境正在運行 Dart SDK 3.9/Flutter 3.35 beta 或更高版本。如果需要,請切換頻道並運行 flutter upgrade

若要設定 Gemini Code Assist 使用 Dart MCP Server,請依照以下說明操作:

  1. 首先安裝並設定 Gemini CLI。
  2. 依照上述說明設定 Gemini CLI 以使用 Dart MCP Server,這也會為 Gemini Code Assist 啟用它。

您可以透過在代理模式下的聊天視窗中輸入 /mcp 來驗證 MCP 伺服器是否已正確設定。

Firebase Studio

Firebase Studio 是一個代理式雲端開發環境,可協助您建立和發布生產品質的全端 AI 應用程式,包括 API、後端、前端、行動裝置等等。

若要在 Firebase Studio 中新增 MCP 伺服器

  1. 在您的專案中建立一個 .idx/mcp.json 檔案(如果尚不存在),並將與上述 Gemini CLI 說明相同的 Dart MCP Server 設定新增到該檔案中。
  2. 確保您的環境正在運行 Dart SDK 3.9/Flutter 3.35 beta 或更高版本。如果需要,請切換頻道並運行 flutter upgrade
  3. 透過開啟命令面板 (Shift+Ctrl+P) 並輸入 Firebase Studio: Rebuild Environment 來重建您的工作區以完成設定。

有關 Firebase Studio 中 MCP 伺服器配置的更多資訊,請參閱 自訂您的 Firebase Studio 工作區

VS Code 中的 GitHub Copilot

GitHub Copilot 是一個整合到 VS Code 中的 AI 程式碼助理。Dart VS Code 擴充功能透過向 VS Code 註冊 Dart MCP Server 來為 Copilot 提供簡單的整合。Copilot 或任何其他支援 VS Code MCP API 的 AI 代理會自動為您配置 Dart MCP Server,因此您無需手動操作。

確保您的環境正在運行 Dart SDK 3.9/Flutter 3.35 beta 或更高版本。如果需要,請切換頻道並運行 flutter upgrade

若要設定 Dart MCP Server,請將以下內容新增到您的 VS Code 使用者設定中:

1
"dart.mcpServer": true

您也可以考慮將 "chat.mcp.discovery.enabled": true 添加到您的 VS Code 用戶設置中,以自動發現其他工具(如 Claude Desktop 或 Cursor)中配置的服務器。

Cursor

Cursor 是一個基於 VS Code 的流行 AI 程式碼編輯器。Dart 和 Flutter VS Code 擴充功能可以安裝在 Cursor 中,以提供類似於您在 VS Code 中預期的開發體驗,並提供 Cursor 提供的額外 AI 相關功能。

確保您的環境正在運行 Dart SDK 3.9/Flutter 3.35 beta 或更高版本。如果需要,請切換頻道並運行 flutter upgrade

若要設定 Cursor 以使用 Dart MCP Server,您可以點擊 Dart MCP Server README 檔案中的 Add to Cursor 按鈕(最簡單的方法),或依照官方 Cursor 文件中的說明 安裝 MCP 伺服器。設定 Dart MCP Server 後,您的 .cursor/mcp.json 檔案中應該會出現以下內容,該檔案可以是 專案檔案或全域檔案,具體取決於您希望啟用 MCP 伺服器的位置:

1
2
3
4
5
6
7
8
9
10
11
12
{
"mcpServers": {
"dart": {
"command": "dart",
"args": [
"mcp-server",
"--experimental-mcp-server", // Can be removed for Dart 3.9.0 or later
"--force-roots-fallback" // Workaround for a Cursor issue with Roots support
]
}
}
}

其他工具

Dart MCP Server 可用於支援 MCP 的任何地方*。請依照您選擇的 MCP 用戶端提供的說明來設定 Dart MCP Server。

*並非所有工具都受支援,因為有些工具需要存取特定的 IDE 服務。

接下來是什麼?

此實驗性版本僅是第一步。我們的願景是讓 Dart 和 Flutter 開發人員透過符合您工作方式的 AI 驅動體驗,達到最高的生產力。以下是我們接下來將投入的一些關鍵領域:

  • 更深入、無縫的 IDE 整合: 我們正在與 Firebase Studio、Android Studio 中的 Gemini、Gemini Code Assist 以及其他團隊密切合作,讓 Dart MCP Server 的使用毫不費力。
  • AI 驅動的 DevTools 功能: 我們計劃將 AI 協助直接引入 Dart 和 Flutter DevTools。您無需手動篩選複雜資料,只需在查看時間軸追蹤時向 AI 助理提出問題,例如:「我的應用程式在這裡為何卡頓?」、在檢查記憶體快照時:「什麼原因導致此記憶體洩漏?」,甚至直接從 Flutter Inspector 中:「幫助我修復此佈局問題」。
  • 不斷增長的工具箱: 我們將繼續擴展 MCP 伺服器的功能,例如支援更複雜的重構。

雖然我們的路線圖以我們的願景為指導,但您的 回饋 對於幫助我們確定對您最重要的優先順序至關重要。

結論

透過為您的編碼助理提供專案的上下文和對官方工具鏈的存取權,您可以更快地移動,更有效地解決問題,並專注於最重要的事情:構建美觀、高品質的應用程式。Dart MCP Server 代表了 Dart 和 Flutter AI 驅動開發的重大飛躍,也是我們團隊致力於提供高效開發人員體驗的延續。

這才剛剛開始。隨著 Model Context Protocol 變得更加普及,並且 Dart MCP Server 獲得更多功能,您與 AI 驅動的開發工具和代理之間的協作將會變得更加智慧和無縫。

此功能仍在實驗中,您的回饋非常寶貴。 立即在您最喜歡的編輯器中啟用它,並在我們的 GitHub 儲存庫 上提交問題,讓我們知道您的想法。擁抱 AI 輔助開發的未來,並在您的 Dart 和 Flutter 專案中解鎖新的生產力水平。我們迫不及待想看看您會建立什麼!


透過 Dart MCP Server 提升您的 Dart 和 Flutter 開發體驗 最初發佈於 Flutter 的 Medium 平台,人們在該平台繼續透過標註和回應此故事來進行對話。

【文章翻譯】Dart & Flutter momentum at Google I/O 2025

【文章內容使用 Gemini 2.5 Flash 自動翻譯產生】

在今天於加州山景城 Shoreline Amphitheatre 舉辦的 Google I/O 大會上,我們分享了 Flutter 如何持續獲得動力,成為受到全球一些最大品牌信賴的生產級應用程式框架。

首先,根據 JetBrains 的 開發者生態系統現狀 調查,自 2021 年以來,Flutter 一直是最常用的多平台應用程式框架。

其次,根據應用程式情報提供商 AppTopia 的數據,Flutter 佔所有新的免費 iOS 應用程式的近 30%。

Apptopia 追蹤 Apple AppStore 和 Google Play 商店中的數百萬個應用程式,並分析和偵測用於建立應用程式的開發者 SDK。Flutter 是我們追蹤的最受歡迎的 SDK 之一:在 Apple AppStore 中,其使用量從 2021 年約佔所有追蹤到的免費應用程式的 10% 穩步增長到 2024 年近 30%!

— Apptopia Inc.

客戶更新

以下是一些體現此增長以及 Flutter 獨特能力(從單個共享源程式碼庫定位任何平台)的品牌和應用程式:

  • NotebookLM:由 Google Labs 打造的新 AI 驅動的研究和寫作助理,剛剛推出了使用 Flutter 建構的行動應用程式。此前,這僅作為網站提供,但團隊收到了許多對行動應用程式的請求。由於開發速度和上市時間至關重要,Flutter 是自然的選擇。我們對其本週的 公開發布 感到興奮。
  • Google Cloud:Google Cloud 團隊將現有的 iOS/Android 應用程式切換到 Flutter,用於建構一系列新功能,例如新的 Cloud Assist,目標是寫一次即可部署到任何地方。他們發現擁有單個共享程式碼庫帶來的 UI 和邏輯一致性帶來了巨大的價值,並認為 Flutter 在不妥協的情況下提供了類似原生的效能和感覺。
  • Universal:我們去年宣布了 Universal Destinations & Experiences 如何在其奧蘭多、好萊塢和大阪的公園中使用 Flutter 開發 其 iOS 和 Android 應用程式。在其最新的主題公園,奧蘭多的 Universal Epic Universe,他們現在也使用 Flutter 為其面向遊客的自助餐飲點餐亭提供支援。他們能夠將他們的應用程式重新設想為一個點餐亭介面——具有豐富的動畫和流暢的過渡。這是展示 Flutter 的靈活性和強大之處的一個很好的範例。
  • Reflection.app:由 完整的 Google 技術堆疊 提供支援——Flutter、Firebase 和 Gemini——為使用者提供周到的日記體驗。
  • teamLab:總部位於東京的 teamLab 為數位內容製作、城市規劃和建築空間設計創造解決方案。他們的博物館應用程式允許參觀者閱讀更多有關展品的信息,甚至可以在手機上與作品進行數位互動。到目前為止,這項新體驗已吸引了 3500 萬使用者。
  • 1080 Motion:另一個例子是來自瑞典的 1080 Motion,他們為世界各地的專業運動員提供最先進的訓練和復健。他們的客戶在提供針對該運動員、該天量身定制的個性化訓練的硬體上接收即時效能回饋。
  • GE Appliances:GE Appliances 使用 Flutter 徹底改變了配備 LCD 螢幕的現代家電上小螢幕的 UI。他們的團隊由許多嵌入式和 JavaScript 開發人員組成,他們發現 Dart 易於學習,這加速了採用並使他們能夠快速提高生產力。未來,他們計劃透過使用 Dart 和 Flutter 建構面向使用者的行動應用程式來擴展其嵌入式起點。

發展 Dart 語言

Dart 是 Flutter 成功的關鍵要素。我們共同發展 Dart 和 Flutter 的能力是 Flutter 業界領先的開發者體驗和生產品質的核心推動力。

我們持續發展 Dart 語言——以下是自 2021 年我們主要的 null safety 功能以來,我們所做的所有改進的可視化呈現。

Dart 語言演進

可感知空值的元素

今天,在 Dart 3.8 中,我們添加了 可感知空值的元素,它允許您在集合中包含一個元素,僅當其運行時值為非空值時。您可以使用此功能重寫以下程式碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 沒有可感知空值的元素的程式碼。
var listWithoutNullAwareElements = [
if (promotableNullableValue != null)
promotableNullableValue,
if (nullable.value != null)
nullable.value!,
if (nullable.value case var value?)
value,
];

使用可感知空值的元素,移除所有那些 if 語句:
// 使用可感知空值的元素的程式碼。
var listWithNullAwareElements = [
?promotableNullableValue,
?nullable.value,
?nullable.value,
];

點縮寫

我們還分享了我們正在開發一項名為 點縮寫 的新語言功能的消息——預計將於今年晚些時候發布——使用一種新的更短的語法來處理 Flutter 程式碼中的重複,用於根據上下文已知類型上的成員:

1
2
3
4
5
6
7
8
9
10
11
12
13
// 沒有點縮寫的程式碼。
Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
mainAxisSize: MainAxisSize.min,
children: […],
);

// 使用點縮寫的程式碼。
Column(
crossAxisAlignment: .stretch,
mainAxisSize: .min,
children: […],
);

更新開發者體驗

我們非常重視 Dart 和 Flutter 的開發者體驗,並有幾項更新。

屬性編輯器

任何框架中最棘手的部分之一就是學習所有可用的 API。起初這可能會令人不知所措。出色的開發者工具可以在這方面提供很大的幫助——今天我們宣布了一項新的屬性編輯器功能,現在可在 Flutter 3.32 中使用。

VS Code 中的屬性編輯器

當您在 IDE 中選擇一個 Widget 時,它會顯示主要的布局屬性,而無需閱讀文件或轉到宣告。然後,您可以直接在屬性編輯器中輕鬆地更改它們,並讓這些更改傳播到源程式碼。

Pub.dev 改進

我們還對 Dart 套件管理器 pub.dev 進行了幾項改進:我們增加了暗模式支援以獲得更好的對比度,一個新的下載計數功能,可幫助您了解套件的使用情況以及該使用在可用版本之間的分布情況。

我們本週宣布的一項全新功能是熱門套件,它顯示近期使用量顯著增加的套件。這可以用於發現可能感興趣的新套件。

pub.dev 熱門套件

改善格式化

Dart 格式化工具被大多數 Dart 開發人員使用。今年年初,我們添加了新功能,使其能夠自動管理尾隨逗號。根據您的反饋,我們在本週的 Dart 3.8 版本中進行了多項調整,並添加了一個新的設定選項,如果您更喜歡手動維護這些尾隨逗號,可以告訴格式化工具永不移除它們。

Dart 交叉編譯

接下來,我們也改進了 Dart 編譯器,使其能夠從 Windows 或 macOS 編譯適用於 Linux 的 Dart 可執行檔。這對於針對較小的嵌入式設備(如 Raspberry Pi)特別有用。在此之前,如果您沒有 Linux 機器,您必須在 Raspberry Pi 本身上編譯 Dart。

更深入地與平台整合

直接原生互通

去年,我們宣布了一項新計畫——直接原生互通——其願景是最終讓您可以像存取自己的 Dart 程式碼一樣輕鬆地存取原生 API。今天我們分享了幾項更新:

  • 線程合併:歷史上,Flutter 引擎使用兩個獨立的線程——平台線程和 UI 線程。絕大多數平台 API 都必須在平台線程上存取,但 Dart 程式碼在 UI 線程上運行,這使得直接從 Dart 呼叫平台 API 非常麻煩。這項工作現在已經在 Android 和 iOS 的穩定版本中完成,並在 Windows 和 macOS 的 Flutter 3.33 beta 版本中完成。Linux 上的線程合併工作正在進行中。詳細資訊請參閱 追蹤議題
  • 原生資產/建構鉤子:有時您需要與使用另一種語言(例如用 C 語言編寫的機器學習函式庫)編寫的第三方函式庫通訊。 建構鉤子(以前稱為原生資產)支援將原生程式碼與 Dart 套件捆綁,並且截至今天,已在主頻道中提供預覽。
  • ffigen/jnigen:我們持續改進 ffigen 和 jnigen 包裝生成器,並希望在今年下半年分享更多相關消息。

在 Android 上表現優異

  • Impeller:自 3.29 版起,Android 與 iOS 一樣,將 Impeller 設定為預設渲染器,但少數近 10 年的 Android 設備(圖形堆疊非常老舊)除外。為了支援這些設備,我們將在 Android API 等級 28 及更低版本上繼續使用 Skia。
  • Edge-to-edge:自 Flutter 3.27 起,我們將 Android 的 edge-to-edge UI 系統設定為 Flutter 的預設。此支援開啟了設備顯示器的全部高度,供在顯示器頂部或底部沒有系統欄的設備上運行的 Flutter 應用程式使用。這對 Flutter 如何考慮 SafeAreas 和系統 UI 等問題產生了微妙的影響。
  • Scribe:今年我們還添加了對 Android 的「Scribe」功能的支援,該功能將原始手寫內容轉換為實際文字。
  • Material 更新:我們已為 Material 提供了許多更新,包括支援新的頁面轉換、更新的進度指示器和滑塊,以及其他潤色區域。

在 iOS 上表現出色

我們希望為 iOS 打造的開發人員能夠交付美觀、功能豐富的應用程式,因此今年我們一直在努力提高 iOS 的保真度,並改善 Flutter 與 Apple 開發者生態系統的整合:

  • Cupertino 更新:對 Cupertino 函式庫進行了大量投資,以提高其保真度並擴展其涵蓋範圍。我們重新審視了彈簧和捲軸物理特性,對我們的底部工作表、可折疊 Widget、導航列(特別是帶有搜尋欄位的導航列)等 Widget 進行了大量更新。
  • Swift Package Manager:我們正在從 Cocoapods 遷移到 Swift Package Manager,以簡化我們的開發設置。此轉移正在進行中,但已有超過 150 個 plugin 加入了 Swift Package Manager 的支援,我們很高興地宣布其中包含了所有 Firebase plugin。我們的目標是盡快完成向 Swift Package Manager 的轉移!
  • Squircles:還有一件事…我們加入了對 Apple 獨特形狀(稱為 squircle)的新支援,它融合了多種不同形狀的弧線!iOS squircle 的精確算法對許多人來說仍然是個謎,但這並沒有阻止我們根據最高可能的保真度創造我們對它的詮釋。您可以在今天的穩定頻道中找到此功能,其類別為 RSuperellipse,並且我們已經在適當的地方將其包含在我們的 Cupertino Widget 中。

在網頁上表現出色

  • WebAssembly:去年我們宣布了支援將 Flutter 網頁應用程式編譯為 WasmGC,以加快應用程式啟動速度,並在複雜情況下將畫面渲染速度提高一倍。
  • 無障礙功能:我們在無障礙功能系統方面做了大量工作,無論是在效能方面,並且新增了全新的 Semantic Roles 系統,Flutter 會將其轉換為網頁上的標準 aria label。
  • 有狀態熱重載:如果您曾經為行動裝置建構過 Flutter 應用程式並希望將這些體驗帶到網頁上,那麼您可能在開發 Flutter 網頁應用程式時感受到了 Flutter 的旗艦功能——有狀態熱重載——的缺失。今天,我們宣布 Flutter 網頁的有狀態熱重載在所有頻道中提供預覽。您可以立即在 DartPad 中體驗它。

擴展生態系統

Google 很榮幸能支持 Flutter,但 Flutter 開發者的大部分價值來自於我們更廣大的社群。

Canonical

一個主要的貢獻者是 Canonical,他們是 Ubuntu 的幕後推手。他們自己使用 Flutter 來建立 Ubuntu 的第一方應用程式市場,並對為 Flutter 在桌上型電腦上的整體品質做出貢獻感到興奮,包括為多視窗支援貢獻功能。

在 Linux 上運行的多視窗支援

他們也對 Flutter 的重大 線程合併 在桌上型電腦上的實施做出了貢獻。他們還修復了許多與無障礙、文字輸入、焦點以及鍵盤和滑鼠事件相關的問題。

LG

另一家對 Flutter 具有業務關鍵利益的公司是 LG。去年,LG 宣布計劃使用 Flutter 重寫許多其核心 webOS 系統應用程式。今年,LG 很高興地宣布他們對 Flutter 的投資將大幅擴展,目標是完成一個新的 webOS-Flutter SDK 的開發,該 SDK 將允許開發人員將 Flutter 應用程式發布到 LG 內容商店。他們預計明年上半年正式發布。

擁抱 AI

在令人興奮且快速發展的 AI 領域,無論是 AI 驅動的應用程式還是 AI 驅動的開發,我們都有許多消息。

推出 Firebase AI Logic

Firebase 中的 Vertex AI 現已更名為 Firebase AI Logic。除了許多新功能外,它現在允許您從一個單一的 Dart SDK 使用 Vertex AI Gemini API(需支付按用量付費的 Blaze 定價方案費用)或新增的 Gemini Developer API(無成本的 Spark 定價方案可選擇付費)。更多詳細資訊請參閱 Firebase 部落格

DartPad 和 Gemini

我們已將 Gemini 支援直接加入到 DartPad 中,讓您無需設定或安裝即可輕鬆使用 Gemini 程式碼輔助功能。

DartPad 中由 Gemini 驅動的程式碼生成

此功能是使用 Gemini API 建構的。其完整原始碼可在 DartPad GitHub 儲存庫中找到,並可作為示範如何建立由 AI 驅動的開發工具。

Android Studio、VSCode、IntelliJ IDEA 和 Gemini

另一個現在支援 Gemini 的地方是 Android Studio。Flutter 和 Android Studio 團隊 合作,因此,截至最新的 Android Studio 版本(Meerkat Feature Drop),對 Dart 和 Flutter 的 Gemini 支援現在是一流的。

如果您是 VSCode 或 IntelliJ IDEA 的使用者,請放心。 Gemini Code Assist 擴充功能和 Google 帳戶將 Gemini 驅動的程式碼輔助功能帶入您的工作流程,直接在 VS Code 中。

MCP

MCP 是一個令人興奮的新開放協定,目前正迅速獲得動能,用於以標準化的方式讓 AI 代理存取並與各種資料來源和工具互動。

模型上下文協定

我們目前正在實驗,看看它是否能讓我們提供更精確和相關的程式碼生成,並允許處理複雜任務的工具,例如修復佈局問題、管理依賴關係,甚至解決運行時錯誤。

總結

衷心感謝所有讓 Flutter 成為現在的您。我們很自豪能與您一起繼續這趟旅程,打造世界上最好的應用程式框架。

祝您 I/O 大會愉快,查看 精彩的議程影片,並享受使用 Flutter 的樂趣!


Dart & Flutter 在 Google I/O 2025 上的發展勢頭 最初發佈於 Flutter 在 Medium 上,人們在那裡透過標記和回應這篇文章繼續討論。

【文章翻譯】Announcing Dart 3.8

【文章內容使用 Gemini 2.5 Flash 自動翻譯產生】

此版本帶來了格式化程式更新、集合的 null-aware 元素、新的跨平台開發功能、一種在 pub.dev 上找到熱門套件的更好方法、網頁上熱重載的可用性等等!我們也希望有一些開發人員有興趣加入我們的 FFigen 和 JNIgen 早期存取計畫。

宣布 Dart 3.8

格式化程式更新

在上一個版本中,Dart 包含了大幅重寫的格式化程式,支援一種新的 “tall” 風格。Dart 3.8 版本整合了額外的回饋、修復了錯誤報告並添加了其他改進。

請注意,如果您升級到 Dart 3.8 SDK,您的格式化程式不會改變,直到您更改套件的 pubspec 以選擇加入最新的語言版本。

末尾逗號和更高程式碼

在先前的版本中,末尾逗號會強制周圍的構造拆分。新的格式化程式現在決定是否應該拆分構造,然後根據需要新增或移除末尾逗號。

1
2
3
4
5
6
7
8
9
10
11
// Before formatter
TabBar(tabs: [Tab(text: 'A'), Tab(text: 'B')], labelColor: Colors.white70);

// After formatter
TabBar(
tabs: [
Tab(text: 'A'),
Tab(text: 'B'),
],
labelColor: Colors.white70,
);

如果您偏好舊的行為,可以使用 設定 標誌重新啟用它。

樣式變更

新增了許多樣式變更,這些變更使輸出更緊湊並有所改進。以下是一些範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Previously released formatter (functions)
function(
name:
(param) => another(
argument1,
argument2,
),
);

// Dart 3.8 formatter (functions)
function(
name: (param) => another(
argument1,
argument2,
),
);
1
2
3
4
5
6
7
8
9
10
// Previously released formatter (variables)
variable =
target.property
.method()
.another();

// Dart 3.8 formatter (variables)
variable = target.property
.method()
.another();

交叉編譯

現在支援從 Windows、macOS 和 Linux 開發機器 編譯 到原生 Linux 二進位檔。您可以使用 dart compile exedart compile aot-snapshot 指令以及 --target-os--target-arch 標誌來執行此操作。

1
2
// cross compilation example for an exe
$ dart compile exe --target-os=linux --target-arch=arm64
1
2
// cross compilation example for an aot-snapshot
$ dart compile aot-snapshot --target-os=linux --target-arch=arm64

範例使用案例:

  • 在快速的開發筆記型電腦上(例如 Raspberry Pi)比在功能較弱的嵌入式設備上進行更快編譯。
  • 在非 Linux 開發機器上更快編譯基於 Linux 的後端。

Null-aware 元素

新的 null-aware 元素 讓您可以在集合(例如列表、集合或 map)中新增元素,前提是這些元素不為 null。若要在集合文字中將元素設為 null-aware 元素,請在元素前面加上 ?

一個沒有 null-aware 元素,但移除 null 值的列表:

1
2
3
4
5
6
7
8
9
// Code without null-aware elements
var listWithoutNullAwareElements = [
if (promotableNullableValue != null)
promotableNullableValue,
if (nullable.value != null)
nullable.value!,
if (nullable.value case var value?)
value,
];

一個具有 null-aware 元素,並移除 null 值的列表:

1
2
3
4
5
6
// Code with null-aware elements
var listWithNullAwareElements = [
?promotableNullableValue,
?nullable.value,
?nullable.value,
];

文件導入

現在支援文件導入,這是一種新的基於註解的語法,可以在文件註解中引用外部元素,而無需實際導入它們。此標籤可以在庫指令上方的文件註解中指定。

在以下範例中,[Future] 和 [Future.value] 從 dart:async 函式庫導入,但僅用於文件註解:

1
2
3
4
5
6
7
8
/// @docImport 'dart:async';
library;

/// Doc comments can now reference elements like
/// [Future] and [Future.value] from `dart:async`,
/// even if the library is not imported with an
/// actual import.
class Foo {}

文件導入支援與常規 Dart 導入相同的 URI 風格,包括 dart: 方案、package: 方案和相對路徑。但是,它們不能使用 asshowhide 延遲或配置。

pub.dev 上的熱門套件

pub.dev 首頁 將「最受歡迎的套件」區塊替換為「熱門套件」區塊。這個新區塊展示了近期在採用和社群興趣方面展現出顯著增長的套件。

pub.dev 上的熱門套件區塊

網頁上的熱重載 (實驗性)

當您使用 Dart Development Compiler (DDC) 時,狀態熱重載現在可在網頁上使用。Dart 程式碼的 JS 表示重新設計,讓您可以在執行中的應用程式中替換程式碼。

這項功能仍在迭代中,但 Dart 3.8 提供了首次嘗試的機會,從 Flutter 應用程式開始。有關如何啟用熱重載的說明,請參閱 Flutter 部落格文章

Dart 網頁狀態熱重載

這是一項歷時數年的努力,包括更改運行時類型表示、重新設計類別層次結構以及更新程式碼載入到頁面的方式。目標是達到與 VM 現有熱重載實現完全一致。在幾乎所有情況下,該功能應已與您習慣從 VM 獲得的功能無異。您可以在 問題追蹤器 中找到所有已知問題。

重點在於首先讓 Flutter 應用程式能夠使用此功能,但計劃是稍後將熱重載整合到 build_web_compilers 中,以用於非 Flutter 網頁應用程式。

直接原生互通性

我們很高興推出 FFigen 和 JNIgen 的早期存取計畫,這是旨在簡化原生平台 API 整合的程式碼生成解決方案。我們正在尋找有興趣使用這些解決方案開發或重構 Plugin 的 Flutter Plugin 作者。

若要深入了解,請閱讀標題為 Flutter 朝向無縫互通之路 的部落格文章。其中涵蓋了我們對直接原生互通性的願望、實現目標的路線圖以及早期存取計畫。

總結

Dart 3.8 是我們持續致力於改進開發體驗的證明。我們鼓勵您探索這些新功能——從智慧格式化程式和交叉編譯支援到 null-aware 元素、網頁熱重載,以及原生互通的早期存取。您的見解和貢獻對於 Dart 和 Flutter 的持續成長至關重要,我們迫不及待想看看您將創造出什麼應用程式。

立即升級到 Dart 3.8,祝您程式設計愉快!


宣布 Dart 3.8 最初發佈在 Dart 上的 Medium,人們在那裡透過突出顯示和回應這個故事來繼續討論。

【文章翻譯】Flutter’s path towards seamless interop

【文章內容使用 Gemini 2.5 Flash 自動翻譯產生】

今天,我們很高興地宣布 [Flutter Plugin 作者的早期體驗計劃](https://docs.google.com/forms/d/e/1FAIpQLScSSBAb0sKsrCFJhXnxbhUWx7bdFbuDqWps5C24KIXdD7E-_Q/viewform?usp=header),他們準備利用程式碼生成解決方案建立/重建 Plugin。這是我們透過使用 FFIgen 和 JNIgen,使 Flutter 開發人員更容易存取原生平台 API 的工作的下一階段開發。只有有限的名額可供申請,提供給那些準備在第一波生產級 Plugin 中直接與我們合作使用 FFIgen 和 JNIgen 的作者。

這篇部落格文章涵蓋了更多關於我們希望透過直接原生互操作性實現什麼,我們計劃如何實現,以及更多關於早期體驗計劃以及如何加入我們旅程的資訊。

根本挑戰

開發人員經常需要呼叫在應用程式運行的主機平台(如 iOS 或 Android)上原生的 API。目前,Flutter 開發人員可以使用 Method Channel 來實現。Method Channel 依賴於 Dart 程式碼和原生程式碼(如 Kotlin 或 Swift)之間的訊息傳遞來呼叫原生 API。也就是說,Dart 程式碼向原生程式碼發送訊息,原生程式碼執行一些操作,然後透過訊息傳回結果來回應。

Method Channel 的根本挑戰在於它們可能很耗時且難以維護。它們需要大量手寫程式碼。維護需要手動更新其實作以呼叫最新的 API 版本。它們也很容易出錯,因為它們依賴於將訊息編碼和解碼為字串,如果 API 改變,這可能會導致執行時錯誤。最後,Method Channel 只支援非同步呼叫,這確保了 UI 保持響應,但可能會增加程式碼的複雜性,包括管理非同步結果、處理錯誤以及處理等待結果時可能出現的延遲。

我們已經透過 [Pigeon](https://pub.dev/packages/pigeon) 解決了使用 Method Channel 的一些痛點,Pigeon 是一個用於為 Dart 和原生 API 生成骨架程式碼的工具,用於處理您本來會手動使用 Method Channel 撰寫的訊息。雖然 Pigeon 減少了包裝方法和撰寫 Dart 和原生程式碼之間訊息處理程式的時間,但具有大型 API 表面積的 API 仍然需要撰寫繁瑣的程式碼。例如,iOS 的應用程式內購 Plugin 與許多 StoreKit 物件互動,由於它們嵌套在其他原生物件中,因此需要大量手動編碼才能將它們轉換為 Objective-C 端的 Pigeon 可序列化類別,並將這些 Pigeon 類別轉換回 Dart 端的包裝類別。

此外,兩個 Plugin 之間的互操作性是一個挑戰,沒有辦法將非序列化物件(例如 Android Image)透過 Dart 傳遞給另一個 Plugin,而無需它們彼此相依。

Flutter 對互操作性的願景

正如 Michael Thompson 在 #FlutterInProduction 期間所說,「我們正在投入大量精力來開發一種新的方法,我們稱之為直接原生互操作。」

我們對互操作性的願景是最終透過簡單且無縫的開發人員體驗,使開發人員更容易存取平台 API。目標是讓 Flutter 開發人員花更多時間關注他們正在嘗試建立的體驗,而減少花時間嘗試利用底層平台的力量。

解決方案

我們計劃透過稱為 FFIgen 和 JNIgen 的程式碼生成解決方案來解決根本的互操作性挑戰,這些解決方案直接處理 Dart 和每個平台的原生程式碼之間的橋接。FFIgen 將生成綁定以包裝 Objective-C 和 Swift API,而 JNIgen 也將以類似的方式為 Java 和 Kotlin API 進行。

與 Method Channel 不同,FFIgen 和 JNIgen 將使 API 能夠同步呼叫,支援樹狀抖動(編譯期間移除未使用的程式碼),並允許更多資料存放在平台層。

理想使用者

在此早期階段,新直接互操作性的理想使用者是對原生平台(iOS、Android 或兩者)有深入了解的 Flutter 開發人員,他們非常渴望更直接且更省力地存取他們需要的任何平台 API。透過 FFIgen 和 JNIgen,他們可以顯著減少將 Dart 與原生平台程式碼橋接的時間,並更容易建立和維護生態系統的 Plugin。

隨著工具隨著時間變得更加強大,我們想像任何熟悉原生平台的 Flutter 開發人員都能夠存取任何平台 API(例如尚無法在 Flutter 中生產或透過 pub.dev 上的套件取得的 API),以生成他們所需的程式碼,以便直接在 Flutter 應用程式中呼叫 Dart 程式碼。

我們希望透過簡化的開發人員體驗來實現比現有解決方案顯著更好的解決方案 - 在正確的地方具有魔力,同時又不迫使開發人員放棄控制。

加入互操作早期體驗計劃

我們正在尋找在建立 Flutter Plugin 和使用 Flutter 工具方面經驗豐富的候選人,以嘗試早期體驗計劃,您將重寫現有的 Plugin 以使用直接互操作,並提供詳細的意見回饋和問題來指導未來的開發。與任何預覽計劃一樣,過程中難免會有粗糙之處,但我們已準備好提供支援和早期存取權限,以克服您遇到的任何障礙。

請透過 [填寫此表單](https://docs.google.com/forms/d/e/1FAIpQLScSSBAb0sKsrCFJhXnxbhUWx7bdFbuDqWps5C24KIXdD7E-_Q/viewform?usp=header) 表達您的興趣。我們可能無法將所有申請此早期計劃的人都納入。選定的候選人將在 2025 年 6 月 20 日之後收到我們的通知。

我們期待收到您的來信!


Flutter 通往無縫互操作的道路 最初發佈在 Flutter 上的 Medium,人們在那裡透過突出顯示和回應這個故事來繼續討論。

【文章翻譯】Gemini in Android Studio now speaks fluent Flutter!

【文章內容使用 Gemini 2.5 Flash 自動翻譯產生】

作者:Ander Dobo,Flutter 產品經理,與 Sandhya Mohan,Android Studio 中 Gemini 的產品經理

我們很高興地宣布,對於在 Android Studio 中建立 Android 應用程式的 Flutter 開發人員來說,這是一個重大的飛躍。Android Studio 中的 Gemini 現在提供 Dart 和 Flutter 開發的第一級支援! 這意味著您可以直接在您最喜歡的 IDE 中利用 Gemini 的強大功能,以前所未有的速度和輕鬆地建立美麗、高效能的 Flutter 應用程式。

多年來,Flutter 讓開發人員能夠從單一程式碼庫建立令人驚嘆的多平台體驗。Android Studio 一直是這段旅程的基石,為許多 Flutter 開發人員提供了一個強大且熟悉的環境。

我們知道您一直在尋找提升生產力和簡化工作流程的方法。您告訴我們您想要更聰明的工具、更好的程式碼補齊,以及解決那些棘手佈局挑戰的幫助。這就是為什麼 Flutter 和 Android Studio 團隊合作確保 Gemini 理解 Flutter 開發的獨特細微之處。這得益於我們持續致力於讓跨平台開發對開發人員更輕鬆

這不僅僅是一般的 AI 協助。Android Studio 中的 Gemini 辨識 Dart 語法,了解 Flutter widget 和佈局,並可以提供專門為您的 Flutter 專案量身打造的上下文相關建議。想像一下:

  • 透過簡單的提示產生 UI 程式碼: 描述您想要的 UI,Gemini 可以產生相應的 Flutter 程式碼。需要一個帶有圓角和特定資料來源的列表視圖?儘管提出!
  • 即時修復佈局錯誤: 不再與溢出的像素或未對齊的 widget 搏鬥。Gemini 可以分析您的佈局,識別問題,並建議(甚至自動應用)修復程式。
  • 解釋複雜的 widget: 不確定特定 widget 如何運作?Gemini 可以提供清晰的解釋並指向相關文件。
  • 自信地重構 Dart 程式碼: Gemini 可以幫助您現代化您的程式碼庫,提高可讀性,並應用最佳實踐。
  • 產生單元和 Widget 測試: 透過 AI 產生的測試加快測試速度。

在 Android Studio 中使用 Gemini 解釋程式碼

這僅僅是個開始。我們致力於持續改進 Gemini 的功能並擴大對 Flutter 的支援。我們積極收集社群的回饋意見,以指導我們的未來開發。

立即免費開始!

準備好體驗 Android Studio 中的 Gemini 對 Flutter 開發的強大功能了嗎?

  1. 下載最新的 Android Studio: 確保您正在運行最新版本的 Android Studio。
  2. 啟用 Gemini: 打開一個 Flutter 專案,並在工具列中尋找 Gemini 圖示。按照提示啟用 Gemini。
  3. 開始聊天: 向 Gemini 提問任何問題!實驗不同的提示,看看它如何幫助您。
  4. 考慮適用於企業的 Android Studio 中的 Gemini: 若要啟用由 Google Cloud 支援的企業級隱私和安全功能,您可以購買 Gemini Code Assist Standard 或 Enterprise 授權。閱讀這篇部落格文章以了解更多資訊。
  5. 給予我們回饋: 我們想聽聽您的意見!為了幫助我們改進,請給產生的輸出評級,使用讚或倒讚。如果您收到您認為不安全、沒有幫助、不準確或因任何其他原因而不良的 AI 回應,請使用您選擇倒讚時出現的提供回饋選項提交回饋意見。

我們非常興奮地看到您使用 Android Studio 中的 Gemini 建立什麼!


Android Studio 中的 Gemini 現在能流利地說 Flutter! 最初發佈在 Flutter 上的 Medium,人們在那裡透過突出顯示和回應這個故事來繼續討論。

【文章翻譯】What’s new in Flutter 3.32

【文章內容使用 Gemini 2.5 Flash 自動翻譯產生】

Dash flying towards the text “Flutter 3.32”.

網頁即時熱重載、原生保真度與更深入的整合

簡介

歡迎來到 Flutter 3.32!此版本包含許多旨在加速您的開發並提升您的應用程式的功能。準備好迎接網頁上的即時熱重載、令人驚嘆的 Cupertino 圓角矩形以實現原生保真度,以及與 Firebase 的強大新 AI 整合。Flutter 3.32 包含來自 156 位獨特貢獻者的 1024 次提交,其中包括 39 位首次貢獻者,這證明了我們社群的卓越工作。讓我們一起探索新功能!

網頁

網頁上的熱重載 (實驗性)

我們很高興地宣布,您現在可以在網頁上進行熱重載!網頁支援熱重載是 Flutter 追蹤器上得票數排名第二的議題。我們很高興能讓您有機會在您自己的專案中試用!我們需要您的協助,以確保這項令人興奮的新功能具備開發人員所需的一切。

如果您發現任何問題,請使用 Dart 的 網頁熱重載議題範本 提交錯誤。您可以在 網頁熱重載已知問題 GitHub 專案上找到已知問題列表。

現在是有趣的部分:如何使用此功能

我們新增了一個簡單的命令列旗標 --web-experimental-hot-reload,您可以在任何呼叫 flutter run 的地方將其傳遞給 Flutter。

從 VS Code 執行

如果您在 VS Code 中使用除錯配置,您可以將此額外配置新增至您的 launch.json 檔案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
"configurations": [

{
"name": "Flutter for web (hot reloadable)",
"type": "dart",
"request": "launch",
"program": "lib/main.dart",
"args": [
"-d",
"chrome",
"--web-experimental-hot-reload",
]
}
]

為了獲得最佳效果,我們建議在 VS Code 中啟用「Dart:儲存時 Flutter 熱重載」設定。也可以使用 Run/Debug 面板中的 ⚡ 圖示觸發熱重載。仍然可以使用 ⟳ 按鈕觸發熱重啟。

從命令列執行

如果您在命令列上使用「flutter run」,您現在可以使用以下命令在網頁上運行熱重載:

1
flutter run -d chrome --web-experimental-hot-reload

啟用熱重載後,您可以在運行的終端機中按「r」來重載您的應用程式,或按「R」來熱重啟。

在 DartPad 中重載

熱重載現在也已在 DartPad 中提供,並新增了一個 Reload 按鈕。此功能僅在運行應用程式中檢測到 Flutter 時才可用。您可以使用 DartPad 提供的 範例應用程式 試用。

感謝您花時間協助我們讓網頁上的熱重載變得如此出色!

框架

我們繼續努力將邏輯從 Material 函式庫移至 Widget 函式庫。

此版本引入了一個新的 Expansible Widget,讓您可以更輕鬆地建立具有不同視覺主題的展開和收合 Widget。此新 Widget 作為 Material 風格 ExpansionTile 的基礎構成要素。

此版本中的另一項寶貴新增功能是由社群成員 davidhicks980 貢獻的 RawMenuAnchor。此 Widget 現在作為 Material 風格 MenuAnchor 的基礎構成要素,為建立具有各種視覺主題的選單鋪平了道路。此外,RawMenuAnchor 可以獨立作為無樣式選單使用,讓您可以完全控制其外觀。

像這樣的重構可以更好地支援核心 Widget 用於實作 Cupertino 和 Material 等設計語言(以及更多!)以實現更一致的介面和程式碼共用。

Cupertino

圓角矩形

我們很高興能向 Flutter 的形狀能力引入一項重要的全新功能:圓角超橢圓形。

這種形狀通常被稱為「蘋果圓角矩形」,是 iOS 設計語言的基石,以其比傳統圓角矩形更平滑、更連續的曲線而聞名。社群經常請求支援這種形狀。它的加入代表著我們努力在 Apple 平台上提供具有原生外觀和感覺的高保真 UI 又邁出了一步。

CupertinoAlertDialog 和 CupertinoActionSheet 都已更新為使用這種新的形狀!

您可以使用這些新的 API 將圓角超橢圓形新增到您的應用程式中:

  1. RoundedSuperellipseBorder 用於繪製或作為 Widget 形狀
  2. ClipRSuperellipse 用於裁剪。
  3. Canvas.drawRSuperellipseCanvas.clipRSuperellipsePath.addRSuperellipse 用於提供更直接控制的低階 API。

請注意,圓角超橢圓形仍在積極開發中。目前僅在 iOS 和 Android 上支援,否則行為會回歸標準圓角矩形。效能最佳化也在進行中。我們鼓勵您考慮這些因素來探索這項新功能,我們期待在未來的更新中增強其功能!

工作表

Cupertino 工作表也解決了幾個問題,包括修復工作表在 Android 上打開時如何設定系統 UI 主題。

工作表已調整,以修復導覽列的高度並確保內容底部不會被截斷。以下螢幕截圖顯示了此變更之前和之後的效果。

此版本中的其他修復包括解決工作表轉場與 PopupMenuButton 不相容的問題,以及改進工作表的圓角轉場,使其在更多裝置上看起來正確。之前,它在某些具有不同圓角半徑的螢幕上看起來不正確。

您現在也可以在 CupertinoSheetRouteshowCupertinoSheet 上使用新的 enableDrag 引數來停用 Cupertino 底部工作表的拖曳關閉行為。( #163923**)

導覽列

CupertinoSliverNavigationBar.search 在打開或關閉搜尋視圖時的動畫忠實度有所改進,以及搜尋欄位的前置和後置圖示正確對齊。

最後,CupertinoNavigationBars 或 CupertinoSliverNavigationBars 之間的路由轉場已更新,以符合最新的 iOS 轉場 (#164956)。

Material

此版本為 Material 函式庫帶來了一系列功能增強和錯誤修復,改善了功能和開發人員體驗。

功能增強包括:

  • CarouselController 提供了一個更方便的 animateToIndex 方法,可透過固定或動態大小的項目以及 flexWeights 實現基於索引的平滑輪播導航。
  • TabBar 現在具有 onHoveronFocusChange 回調,讓您可以更好地控制 Widget 在不同狀態下的外觀。
  • SearchAnchor 和 SearchAnchor.bar 現在分別包含 viewOnOpenonOpen 回調,以便更好地觀察和處理開啟/關閉事件。
  • CalendarDatePicker 現在接受一個 calendarDelegate 以實現自訂日曆邏輯的整合,超越公曆系統。範例展示了一個假設的日曆系統,其中偶數月份有 21 天,奇數月份有 28 天,並且每個月份都從星期一開始,展示了此 delegate 的靈活性。

其他次要增強包括為 showDialog、showAdaptiveDialog 和 DialogRoute 新增 animationStyle,以自訂對話框開啟和關閉時的動畫;Divider 現在接受 borderRadius,以允許自訂分隔線的邊框,特別是在分隔線很粗時。

除了新功能外,此版本還解決了 Material 函式庫中與 DropdownMenu 和 Sliders 相關的幾個錯誤:

  • DropdownMenu Widget 現在允許其選單寬度小於文字欄位。範例已更新,以解決之前的 RenderFlex 溢位錯誤。DropdownMenu 的預設寬度現在會尊重文字欄位中的文字標籤寬度。
  • 當滑鼠懸停在 RangeSlider 拇指上時,只會出現懸停拇指的覆疊。之前,兩個覆疊都會不正確地顯示。當軌道顏色透明時,Slider 拇指現在可以到達軌道的兩端,克服了之前無法到達的限制。

輔助使用

最佳化 語義樹編譯

此功能將語義編譯時間減少了約 80%。在 Flutter 網頁應用程式中,這意味著啟用語義後,框架時間減少了 30%。

引入更精細的語義角色

一個新的 SemanticsRole API 已整合到 Semantics Widget 及其相關組件中,為開發人員提供了更精確的控制,以決定 UI 元素如何由輔助技術解釋。此增強功能允許透過簡單地將整個 Widget 子樹包裝在配置有所需角色的 Semantics Widget 中,為其指派特定的角色。

官方 API 文件 中詳細列出了可用角色。目前,此進階語義角色功能僅適用於基於網頁的應用程式,對其他平台的支援將在未來版本中提供。

欲了解更多資訊,請參閱透過語義角色增強輔助使用

其他輔助使用改進

  • 改善 Widget 和螢幕閱讀器的使用者體驗: 改善了各種 Widget 的輔助使用支援和使用者體驗,包括文字欄位、焦點處理、選單、滑塊和下拉式選單。現在,當使用者與這些元素互動時,螢幕閱讀器會提供更詳細的回饋。
  • 透過語義改善網頁焦點導航: 在啟用語義時,優化了網頁焦點行為,顯著減少了 Widget 之間突兀的焦點跳轉,以提供更直觀的導航體驗。
  • 改善 Android TalkBack 對連結的辨識: Android TalkBack 現在可以正確識別和宣告使用 Semantics.linkUrl 或 url_launcher 套件中的 Link Widget 定義的連結。
  • Flutter 網頁應用程式支援 Windows 高對比模式: 引入了對 Windows「強制色彩」模式(通常用於高對比情況)的支援。開發人員現在可以在 ThemeData 中設定 useSystemColors 布林值,以自動將系統色彩應用於 Flutter 主題,從而增強依賴這些設定的使用者的可見性。
  • 精進 iOS 語音控制體驗: 改善了 iOS 語音控制的使用者體驗,確保非操作性 Widget 不再顯示不必要的標籤,為使用者帶來更清晰、更專注的互動。

文字輸入

此版本對文字輸入進行了多項改進:

  1. iOS 上啟動了系統文字選取上下文選單,這在下面的 iOS 部分有說明。
  2. Autocomplete Widget 選項的布局已移植到 OverlayPortal,改善了效能並修復了布局錯誤。
  3. 現在可以在文字欄位中自訂 onTapUpOutside 行為 (#162575)。
  4. 開發人員現在可以為 FormField 產生任何想要的 Widget 作為錯誤訊息,而不僅僅是錯誤文字 (#162255)。
  5. Flutter 中的可選取文字變得錯誤較少 (#162228),並且在網頁上的效能更好 (#161682)。

多視窗支援進度

Canonical 的貢獻者在允許桌面應用程式擁有多個視窗方面取得了顯著進展!

Canonical 修復了應用程式有多個視窗時損壞的幾個功能:

  1. 輔助使用:#164577
  2. 應用程式生命週期通知:#164872
  3. 焦點:#164296
  4. 鍵盤事件:#162131#163962
  5. 文字輸入:#163847#164014
  6. 滑鼠事件:#163855

Canonical 還增加了一個功能,讓 Dart 程式碼 FFI 可以直接與 Flutter 引擎通信 (#163430)。這為 Flutter 未來的視窗 API 奠定了基礎。

最後,Canonical 在 Linux 上引入了一個渲染線程 (#161879)。這提高了框架吞吐量,即使您有多個視窗,也能確保 Flutter Linux 保持流暢。

桌面執行緒合併

Canonical 還更新了 Windows 和 macOS,允許應用程式合併 UI 和平台執行緒 (#162883#162935)。

合併的執行緒讓您可以使用 Dart FFI 與必須在平台執行緒上呼叫的原生 API 進行互操作。例如,如果您在 Windows 上啟用合併的執行緒,您可以使用 Dart FFI 使用 win32 API 調整應用程式視窗的大小!

在 Windows 上,您可以透過在 windows/runner/main.cpp 檔案中的 wWinMain 方法內新增以下內容來開啟合併的執行緒:

1
project.set_ui_thread_policy(UIThreadPolicy::RunOnPlatformThread)

在 macOS 上,您可以透過在您的 macos/Runner/Info.plist 檔案中的 <dict> 元素內新增以下內容來開啟合併的執行緒:

1
2
<key>FLTEnableMergedPlatformUIThread</key>
<true />

在未來版本中,我們將在 Windows 和 macOS 上預設開啟合併的執行緒。請試用此功能,如果您遇到任何錯誤,請 建立議題

iOS

我們增強了 Flutter 應用程式在 iOS 上的貼上體驗!對於沒有自訂操作的基本文字欄位,使用者從其他應用程式貼上內容時將不再看到確認對話方塊。這現在已在所有 Flutter iOS 應用程式上預設啟用。請注意,如果您的應用程式使用自訂操作(例如,上下文選單中的「傳送電子郵件」),此功能 尚未支援

Android

Gradle 工具的 Kotlin 語言重寫

Flutter 的 Gradle Plugin 已從 Groovy 轉換為 Kotlin。這種向 Kotlin 的轉換使程式碼庫更容易貢獻,並且也促進了對 Plugin 引入單元測試。新增的測試以及從動態類型和執行的語言轉換為靜態類型語言,應會為 Flutter 開發人員帶來更穩定可靠的建構過程。我們不預期重寫會導致任何行為變化,因此如果您注意到 Android 建構行為與您預期的不同,請 提交問題

Scribe / Stylus 支援

您現在可以在 Android 上使用觸控筆在文字欄位中書寫,就像 Apple Pencil 手寫輸入已在 Flutter iOS 應用程式上工作一樣。使用者可以直接在任何 Flutter 文字輸入欄位上開始書寫,手寫內容將以文字形式顯示在欄位中。並非所有手勢都已支援,但我們正在 努力彌補這些差距。此功能在 Android 14 及更高版本上支援,並且可以在需要時使用 TextField.stylusHandwritingEnabledCupertinoTextField.stylusHandwritingEnabled 參數停用。

引擎

Android 上的 Impeller

從 3.29.3 版本開始,在執行 Android API 級別 28 (Android 9) 及更舊版本的設備上,Flutter 應用程式將使用傳統的 Skia 渲染器。此變更提高了 Flutter 在較舊 Android 設備上的穩定性。Impeller 繼續成為在執行 API 級別 29 (Android 10) 及更新版本的設備上的預設渲染器。

隨著我們從使用不同裝置的使用者那裡獲得更多回饋,我們調整了哪些裝置使用 Impeller 的 Vulkan 與 OpenGLES 後端。特別是,在此版本中,以下裝置將使用 OpenGLES 而非 Vulkan:Android 模擬器、API 版本低於 31 的 MediaTek 裝置、早於 CXT 的 PowerVR 裝置,以及不支援 Vulkan 1.3 的較舊版本 Samsung XClipse GPU。

如同先前版本,您可以按照 這些指示 選擇不使用 Impeller。由於我們對 Impeller 穩定性和效能越來越有信心,在即將推出的穩定版本中,將會移除在較新 Android 裝置上選擇不使用 Impeller 的功能。

最後,Flutter 3.27 有許多與 Impeller 在支援 Vulkan 的裝置上渲染相關的渲染錯誤和崩潰,這些問題在 3.29 及更高版本中已修復。我們不打算將這些變更熱修復到 3.27 中,我們強烈建議更新到 3.29 或更高版本。如果您的應用程式無法這樣做,我們建議在 Android 裝置上選擇不使用 Impeller。

其他 Impeller 更新

此版本改進了 Impeller 的文字渲染。值得注意的是,文字動畫更流暢,抖動更少,這歸功於 Impeller 字體地圖中更高解析度的字形,以及修復浮點計算中的四捨五入錯誤。有關更多詳細資訊,請參閱 flutter#149652

之前
之後

此版本還包括各種其他準確度和效能改進,包括:

DevTools 與 IDE

[新功能] Flutter 屬性編輯器

透過新的屬性編輯器工具,輕鬆編輯 Widget 屬性並閱讀文件,該工具可從 Flutter 屬性編輯器側邊欄面板 (VS Code) 或工具視窗 (Android Studio / IntelliJ) 存取。

VSCode
Android Studio 與 IntelliJ

設備上 Widget 檢查器中的變更

設備上的 Widget 檢查器新增了一個按鈕,可用於在選取 Widget 模式下開啟或關閉 Widget 選取行為。這允許您在 Widget 選取模式下與應用程式互動 (例如,導航到新頁面) 並選取 Widget。

DevTools 改進

DevTools 進行了額外改進,包括網路螢幕的新離線支援、與熱重啟相關問題的錯誤修復、文字焦點、Deep Links 工具以及 CPU 分析工具和記憶體螢幕的資料改進。此版本還包括 DevTools 的多項效能和記憶體改進,這將導致更快的資料載入時間和更少的記憶體相關崩潰。

這些只是此版本中的部分亮點。要了解 Flutter 3.32 中包含的所有更新,請查看 DevTools 的發行說明:2.44.02.45.02.46.0

分析器改進

我們持續改進 Dart 分析器,進而改善開發者體驗。這包括加入「doc imports」,這是一種新的基於註解的語法,允許在文件註解中引用外部元素,而無需實際匯入它們。請參閱 dart.dev 上的詳細資訊。我們也進行了多項快速修復、協助和重新命名改進。

Android Studio 中的 Gemini 現在能流利地說 Flutter 和 Dart

Android Studio 中的 Gemini 現在為 Dart 和 Flutter 開發提供一流的支援!這意味著您可以直接在您喜歡的 IDE 中利用 Gemini 的強大功能,比以往更快、更輕鬆地建立精美、高效能的 Flutter 應用程式。

閱讀這篇部落格文章 以了解更多資訊。

Dart 和 Flutter 對模型上下文協議 ( MCP ) 的支援即將到來

對模型上下文協議 ( MCP ) 和最近發布的 Dart MCP SDK 的支援正在積極進行中。一個新的 Dart 工具 MCP 伺服器 也在開發中,它將向 MCP 用戶端 (例如 IDE) 公開 Dart 和 Flutter 的靜態、執行時和生態系統工具。

這將為 Dart 和 Flutter 開發人員帶來以下好處:

  • 更準確、更相關的程式碼生成。
  • 複雜的任務,例如修復布局問題、管理依賴項,甚至解決執行時錯誤,都將變得可行,因為 MCP 協議會公開來自實際 Dart 和 Flutter 工具的語義資訊。

請持續關注!

使用 AI 建立

隆重推出 Firebase AI Logic

您可能聽說過,甚至使用過 Firebase 中的 Vertex AI,這是我們用於直接將 Gemini API 驅動功能整合到您的 Flutter 應用程式中的用戶端 SDK。

許多人要求使用 Gemini Developer API,而不是 Vertex AI,以利用慷慨的免費方案並開始免費新增生成式 AI。我們聽到了!從今天起,我們將 Firebase 中的 Vertex AI 演變為 Firebase AI Logic,它只需一個 Flutter SDK 即可存取兩個 Gemini API 提供者。它讓您可以直接從 Flutter 應用程式中使用 Gemini 和 Imagen 模型,而無需伺服器端 SDK。

請查看 firebase_ai 套件以了解新功能。如果您已經使用 firebase_vertexai 套件,它目前將繼續按原樣工作,但我們鼓勵您遷移到新的套件。

透過 AI 監控儀表板獲得可行的洞見

Firebase 控制台中的全新 AI 監控儀表板提供您 Gemini API 使用情況的詳細且可行的洞見。這包括全面了解消耗模式、效能指標和潛在問題。這能讓您做出資料驅動的決策,並確保您以最有效的方式使用 Gemini API。AI 監控還有助於您偵錯 Gemini API 的使用情況,並識別和解決任何非預期的行為。

重大變更與棄用

Android 輔助使用公告

在 Android 上,語義公告事件 從 API 36 開始已棄用。相反,請透過配置 SemanticProperties.liveRegion 來使用「禮貌」的隱式公告。目前,在公告不應獲得焦點的文字時存在一個已知限制。請參閱議題 #165857,以了解此限制的詳細資訊以及解決此問題的計畫。若要查看其他解決方案,請查看 SemanticService.announce 的文件

停用 6 個套件的支援

正如我們在 Flutter 3.29 版本部落格文章 中計畫和分享的,我們已停用以下套件的支援:

我們鼓勵社群成員參考每個議題中的討論以尋找替代方案。

iOS 和 macOS 最低版本

Flutter 將在下一個穩定版本中棄用對 iOS 12 和 macOS 10.14 (Mojave) 的支援,並將目標設定為最低支援 iOS 13 和 macOS 10.15 (Catalina)。這意味著使用未來 Flutter 版本建構的應用程式將無法在 iOS 12 或 macOS 10.14 上執行。

其他重大變更

此版本中的其他重大變更與棄用包括:

  • Material 中的 ExpansionTileController 已棄用,改用 Widget 層中新的可重複使用 ExpansibleController
  • SelectionChangedCause.scribble (已棄用) 已重新命名為 SelectionChangedCause.stylusHandwriting,因為 Apple 的 Scribble 功能現已與 Android 的 Scribe 統一。
  • 作為我們持續努力標準化 Material 主題的一部分,ThemeData.indicatorColor 已棄用,改用 TabBarThemeData.indicatorColor,而 cardTheme、dialogTheme 和 tabBarTheme 的組件主題類型則需要遷移到 CardThemeDataDialogThemeDataTabBarThemeData
  • 某些行為中的 SpringDescription 公式已更正。此變更解決了某些參數組合的行為與預期現實世界物理不符,並在臨界阻尼點附近表現出不連續性的問題。此變更會影響阻尼比小於 1 且品質值非 1 的欠阻尼彈簧。在此變更之前建立的此類彈簧在升級後可能會表現出不同的彈跳行為。要恢復之前的動畫行為,請根據 Spring Description Underdamped 重大變更指南 更新您的彈簧參數,您還可以在其中找到 一個工具,用於計算參數調整。

若要查看此版本中所有棄用或重大變更的遷移指南,請參閱 重大變更 頁面。更新後執行 dart fix 會自動為您遷移部分變更。

結論

Flutter 3.32 標誌著又一個向前邁進的步伐,這得益於我們社群令人難以置信的奉獻精神。我們很高興能為您帶來網頁熱重載等功能和持續的平台改進。您的貢獻是無價的,我們迫不及待想看看您會建立什麼。欲獲取全面概覽,請查看詳細的發行說明和變更日誌。要開始使用,只需執行 flutter upgrade 並深入了解最新版本!


Flutter 3.32 的新功能最初發佈在 Flutter 上的 Medium,人們在那裡透過突出顯示和回應這個故事來繼續討論。

【文章翻譯】Learn how to build agentic apps with Flutter, Angular, Firebase, and Vertex AI

【文章內容使用 Gemini 2.5 Flash 自動翻譯產生】

我們建構應用程式的方式正在演變。想像一下應用程式不僅僅對使用者輸入作出反應,而是主動提供協助、自動執行任務並創造全新類型的體驗。歡迎來到 Agentic 應用程式 的世界!

今天,我們很興奮地宣布推出我們最新學習系列 Building Agentic Apps 的入門套件,該系列將於今天 2025 年 4 月 23 日至 5 月 14 日 舉行!這三週將提供新的資源、直播、問答,旨在讓 Angular 和 Flutter 開發人員有機會花幾個週末鑽研 AI 技術,並在此過程中了解 AI 的基礎建構區塊,知道何時何地運用它們,並建構一個值得展示的完整範例。

什麼是 Agentic 應用程式?

Agentic 應用程式包含由代理驅動的使用者體驗,代理是大型語言模型 (LLM)、目標以及實現目標所需的工具(例如 API 或函數)的組合。想像一下一個 Flutter 旅行應用程式,它不僅顯示目的地,還可以根據天氣預報和計劃的活動生成個人化打包清單,或者一個可以自動將您未讀郵件匯總為優先待辦事項清單的應用程式。有了代理,應用程式可以提供更多幫助,更主動,並且比以往任何時候都更容易使用。

為什麼現在?

因為現在正是認識最新 AI 工具並了解它們在哪裡可以(或不能)幫助您為使用者帶來價值的最佳時機。到三週結束時,您將建構出一個代理式體驗,並對術語、設計模式以及最適合 AI 的使用者歷程有很好的掌握,即使您是一名新的開發人員也是如此!

活動期間(4 月 23 日 - 5 月 14 日)預計內容:

  • 入門套件: 我們將發佈四個開放原始碼入門專案,供 Angular 和 Flutter 開發人員使用,將兩者與 Genkit 和 Firebase 中的 Vertex AI 結合。它們旨在為您提供易於理解、修改和重新利用的 Agentic 體驗結構。
  • 專家指導: 加入直播和線上活動,活動將邀請 Flutter 和 Angular 開發社群、Firebase 以及 Google AI 團隊的工程師。提出問題、觀看現場編程並學習最佳實踐。
  • 社群: 與其他開發人員聯繫、分享您的進度並查看社群建構了哪些驚人的內容。我們與 Google 的 Build With AI 系列合作,以確保他們的實體活動能夠存取新的資源。

立即開始!

立即前往 goo.gle/BuildingAgenticFluttergoo.gle/BuildingAgenticAngular 註冊。我們迫不及待想看看您會建構什麼!


學習如何使用 Flutter、Angular、Firebase 和 Vertex AI 建構 Agentic 應用程式 最初發佈在 Flutter 上的 Medium,人們在那裡透過突出顯示和回應這個故事來繼續討論。

http://creativecommons.org/licenses/by/4.0/

【文章翻譯】Gemini for DartPad

【文章內容使用 Gemini 2.5 Flash 自動翻譯產生】

DartPad 獲得 Gemini 加持

嗨,開發人員!

DartPad 是我們許多人嘗試新想法、學習 Dart 和 Flutter 細微差別以及直接在瀏覽器中進行實驗的地方。我們很高興能讓這個過程更快、更有效率。歡迎來到 DartPad 中的 Gemini!您現在可以:

  • 從提示生成新程式碼。
  • 使用圖片,例如 UX 模擬圖和螢幕截圖來協助程式碼生成。
  • 從提示重構現有程式碼。
  • 針對分析和執行時錯誤建議程式碼修正。

讓我們詳細介紹這些酷炫的新功能。

從提示生成新程式碼

DartPad 使用者現在可以利用 Gemini 直接從自然語言提示中生成新的 Dart 或 Flutter 程式碼片段。

從 AI 提示建立 Dart 和 Flutter 程式碼

使用圖片協助程式碼生成

您也可以將圖片加入到提示中。圖片可以協助程式碼生成。

使用圖片協助程式碼生成

從提示重構現有程式碼

除了完全生成新的程式碼片段外,DartPad 中的 Gemini 還可以幫助您反覆運算和修改現有程式碼。

從提示重構現有程式碼

針對分析錯誤建議程式碼修正

在 DartPad 現有的顯示 Dart Analyzer 診斷訊息的功能基礎上,我們整合了 Gemini 來幫助解決程式碼中可能出現的問題。如果您的程式碼片段在分析面板中標記了錯誤,您只需在分析面板中選取 Gemini 圖標,檢閱建議的變更,如果您同意,則接受。

針對分析錯誤建議程式碼修正

針對執行時錯誤建議程式碼修正

DartPad 還可以為執行時錯誤提供錯誤修正建議。

針對執行時錯誤建議程式碼修正

總結

DartPad 致力於尋找降低嘗試新想法和學習 Dart 和 Flutter 的門檻的方法。我們與 Gemini 的新整合是沿著這條道路邁出的另一步,讓您可以更輕鬆地進行實驗和探索。我們迫不及待想看看您會建立什麼!


DartPad 的 Gemini 最初發佈在 Dart 上的 Medium,人們在那裡透過突出顯示和回應這個故事來繼續討論。

【文章翻譯】Flutter 2025 roadmap update

【文章內容使用 Gemini 2.5 Flash 自動翻譯產生】

透明度是 Flutter 開源計畫的核心目標,從議題到設計規格都在公開環境中分享。最常被要求提供的資訊之一是 Google 核心 Flutter 團隊的年度藍圖,今天我們很高興分享 2025 年藍圖

我們自 2020 年以來一直在發佈我們的藍圖,這是往年工作的自然延續;我們仍在努力實現我們的長期目標,即創建最受歡迎、增長最快且生產力最高的跨平台 UI 框架,以建立豐富的應用程式體驗!

有關所有詳細資訊,請查看剛剛更新的 GitHub 上的 Flutter 藍圖

與任何其他軟體產品藍圖一樣,請注意計畫會在全年調整和適應,因此如果在此過程中發生一些變化,請不要感到驚訝。但我們仍然認為分享我們的整體計畫很重要。

另請注意,我們在此列出的內容主要是從我們這些在 Google 擔任 Flutter 員工的人收集的內容。現在非 Google 貢獻者的人數已超過 Google 員工,因此這不是我們希望今年 Flutter 中所有新的和令人興奮的事情的詳盡列表!

我們仍然非常感謝社群和您持續的支持。我們迫不及待地想看看您會建立什麼!


Flutter 2025 年藍圖更新 最初發佈在 Flutter 上的 Medium,人們在那裡透過突出顯示和回應這個故事來繼續討論。