【文章翻譯】Announcing Genkit Dart: Build full-stack AI apps with Dart and Flutter

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

隆重推出 Genkit Dart 預覽版,一個開源 AI 框架,用於為任何平台構建全端、AI 驅動的應用程式。

Dart 和 Flutter 社群一直都在突破螢幕所能實現的界限。您已經證明,構建高品質、多平台應用程式不需要犧牲開發人員體驗。現在,我們將相同的「一次編寫,隨處運行」理念帶到了 AI 驅動的功能和應用程式中。

我們非常興奮地宣布推出 Genkit Dart 的預覽版,這是一個為 Dart 和 Flutter 開發人員提供的開源 AI 框架。Genkit 已經可用於 TypeScript、Go 和 Python,現在它使您能夠為任何平台構建高品質、全端、AI 驅動的應用程式

隆重推出 Genkit Dart(預覽版)

為什麼選擇 Genkit Dart?

Genkit Dart 為您提供以下功能:

  • 模型無關 API: 開箱即用支援 Google、Anthropic、OpenAI 和與 OpenAI API 相容的模型。您永遠不會被鎖定在單一提供商。
  • 類型安全: 使用 Dart 強大的類型系統與 schemantic 套件,生成強類型資料並創建類型安全的 AI 流程。
  • 程式碼隨處運行: 編寫一次 AI 邏輯,並將其作為後端服務或直接在 Flutter 應用程式中運行。
  • 開發人員 UI: 包含一個 localhost 網頁 UI,您可以在其中測試提示、查看追蹤並調試您的流程。
  • 完整的 AI 工具包: 提供構建高品質 AI 功能所需的一切,包括結構化輸出、工具、多步驟流程、可觀察性等等。

模型無關 API

Genkit 旨在支援任何 LLM 提供商,在此版本中開箱即用支援 Google、Anthropic、OpenAI 和與 OpenAI API 相容的模型。這讓您可以以最少的程式碼更改在提供商之間切換。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import 'package:genkit/genkit.dart';
import 'package:genkit_google_genai/genkit_google_genai.dart';
import 'package:genkit_anthropic/genkit_anthropic.dart';

void main() async {
// Initialize Genkit with plugins
final ai = Genkit(plugins: [
googleAI(),
anthropic(),
]);

// Call Google Gemini
final geminiResponse = await ai.generate(
model: googleAI.gemini('gemini-3.1-pro-preview'),
prompt: 'Hello from Gemini',
);

// Call Anthropic Claude
final claudeResponse = await ai.generate(
model: anthropic.model('claude-opus-4.6'),
prompt: 'Hello from Claude',
);
}

類型安全的 AI 流程

Genkit 讓您可以將您的 AI 邏輯包裝成可測試、可觀察、可部署的函數,稱為流程

以下是一個使用強類型輸入和輸出模式以及工具呼叫的旅遊規劃器流程範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import 'package:genkit/genkit.dart';
import 'package:genkit_google_genai/genkit_google_genai.dart';
import 'package:schemantic/schemantic.dart';

part 'travel_flow.g.dart';

// Define flow input schema with schemantic
@Schema()
abstract class $TripRequest {
String get destination;
int get days;
}

// Define tool input schema
@Schema()
abstract class $WeatherRequest {
@Field(description: 'The city name')
String get city;
}

void main() async {
// Initialize Genkit and register the Google AI plugin
final ai = Genkit(plugins: [googleAI()]);

// Define a tool the model can invoke to fetch live data
ai.defineTool(
name: 'fetchWeather',
description: 'Retrieves the current weather forecast for a given city',
inputSchema: WeatherRequest.$schema,
fn: (request, _) async => request.city.toLowerCase() == 'seattle' ? 'Rainy' : 'Sunny',
);

// Construct a strongly-typed, observable flow
final tripPlannerFlow = ai.defineFlow(
name: 'planTrip',
inputSchema: TripRequest.$schema,
outputSchema: .string(),
fn: (request, _) async {
// Generate content using the model and tool
final response = await ai.generate(
model: googleAI.gemini('gemini-3.1-pro-preview'),
prompt: 'Build a ${request.days}-day travel itinerary for ${request.destination}. '
'Make sure to check the weather forecast first to suggest appropriate activities.',
toolNames: ['fetchWeather'],
);

return response.text;
},
);

// Run the flow
final itinerary = await tripPlannerFlow(
TripRequest(destination: 'Seattle', days: 3)
);
print(itinerary);
}

準備就緒後,您可以使用 genkit_shelf 套件輕鬆地將您的流程公開為 API,並將其部署到任何支援 Dart 的平台。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import 'package:genkit_shelf/genkit_shelf.dart';
import 'package:shelf_router/shelf_router.dart';
import 'package:shelf/shelf_io.dart' as io;

void main() async {
// ... initialize Genkit and define tripPlannerFlow ...

final router = Router()
..post(
'/api/planTrip',
shelfHandler(tripPlannerFlow),
);

await io.serve(router.call, 'localhost', 8080);
}

Dart 運行在哪裡,代碼就能在哪裡運行

大多數複雜的 AI 邏輯都在伺服器上運行。然而,由於 Dart 在前端和後端都可以運行,Genkit 讓您可以輕鬆地在伺服器和 Flutter 應用程式之間移動您的 AI 程式碼。

以下是使用 Genkit Dart 構建的幾種方式:

1. 完全在 Flutter 中進行原型開發

您可以直接在 Flutter 應用程式中編寫所有 Genkit 邏輯,包括模型呼叫。這非常適合原型或使用者提供自己的 API 金鑰且提示不是私密的應用程式。

警告: 您絕不應發布將您的 API 金鑰嵌入到原始碼中的應用程式,因為它可能會被提取並被其他人使用。

2. 從 Flutter 呼叫後端流程

當您的提示敏感或您的 AI 邏輯複雜時,您可以將整個流程移動到您的後端。然後,您的 Flutter 應用程式可以透過將其定義為「遠端動作」來呼叫此流程。由於後端和前端都是用 Dart 編寫的,因此它們可以共用相同的模式以實現端到端類型安全。

以下是一個範例,展示如何從您的 Flutter 應用程式呼叫我們之前定義的旅遊規劃器後端流程:

1
2
3
4
5
6
7
8
9
10
11
12
import 'package:genkit/client.dart';
import 'package:my_shared_models/models.dart'; // Shared schema

final tripPlannerFlow = defineRemoteAction(
url: 'https://your-server.com/api/planTrip',
inputSchema: TripRequest.$schema,
outputSchema: .string(),
);

final itinerary = await tripPlannerFlow(
input: TripRequest(destination: 'Tokyo', days: 5),
);

3. 在 Flutter 中使用遠端模型

為了在 Flutter 應用程式中保留核心 AI 邏輯的同時保護您的 API 金鑰,您可以建立一個小型 Genkit 後端,該後端使用自定義授權邏輯將請求代理到模型提供商。透過此後端公開的模型是遠端模型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import 'package:genkit_google_genai/genkit_google_genai.dart';
import 'package:genkit_shelf/genkit_shelf.dart';
import 'package:shelf_router/shelf_router.dart';
import 'package:shelf/shelf_io.dart' as io;

// Backend securely proxies requests to the model
void main() async {
final geminiApi = googleAI();
final targetModel = geminiApi.model('gemini-3.1-flash-lite-preview');
final router = Router()
..post(
'/api/gemini-model',
shelfHandler(
targetModel,
// Insert custom authorization logic here
contextProvider: (req) async => {'customAuth': true},
),
);
await io.serve(router.call, 'localhost', 8080);
}

在您的 Flutter 應用程式中,使用遠端模型而不是直接模型外掛程式,傳遞伺服器所需的任何標頭。這可以避免公開您的 API 金鑰,並讓您對請求授權有更多控制權。

1
2
3
4
5
6
7
8
9
10
import 'package:genkit/genkit.dart';

// Flutter app communicates with the proxy server
final ai = Genkit();
final secureModel = ai.defineRemoteModel(
name: 'secureModel',
url: 'https://api.yourdomain.com/api/gemini-model',
headers: (context) => {'Authorization': 'Bearer ${fetchSessionToken()}'},
);
final response = await ai.generate(model: secureModel, prompt: 'Write me a poem.');

強大的 AI 開發工具

構建高品質的 AI 應用程式需要徹底的測試和持續迭代才能獲得可靠的結果。為此,Genkit 提供了強大的本機開發人員 UI。

您可以透過使用 Genkit CLI 運行您的應用程式來啟動開發人員 UI:

1
genkit start -- dart run bin/server.dart

以下是開發人員 UI 中測試更進階版本的旅遊規劃器流程:

顯示正在運行流程的 Genkit 開發人員 UI

AI 編程輔助

為了在使用 Genkit Dart 搭配 Antigravity、Gemini CLI 或 Claude Code 等 AI 編碼工具時獲得最佳體驗,請安裝 Genkit Dart agent skill。這將使您的 AI 助理具備準確編寫和偵錯 AI 功能的知識。

將技能新增至您的專案:

1
npx skills add genkit-ai/skills

了解更多

此版本為早期預覽版。我們希望與 Dart 和 Flutter 開發人員合作,共同改進此框架。您今天可以在 pub.dev 上找到核心套件和提供商外掛程式。

我們迫不及待地想看到您使用 Genkit Dart 構建的成果!


隆重推出 Genkit Dart:使用 Dart 和 Flutter 構建全端 AI 應用程式 最初發佈於 Dart 上的 Medium,人們正在透過突出顯示和回應這個故事來繼續討論。

【文章翻譯】Dart in Google Summer of Code 2026

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

我們很高興地宣布,Dart 專案將在 Google Summer of Code 2026 中第七次指導貢獻者!

Google Summer of Code (GSoC) 計劃的重點是將來自世界各地的學生開發人員帶入開源軟體開發。Google 贊助學生在夏季與指導性開源組織合作進行為期 12 週(或更長時間)的程式設計專案。在過去的 21 年中,超過 22,000 名貢獻者參與了 Google Summer of Code。

您有興趣嗎?

若要立即開始,請閱讀專案創意清單,以找到符合您技能和興趣的專案。正式申請必須在 3 月 31 日之前提交。我們鼓勵潛在申請人提交早期草稿並徵求回饋。

Dart 團隊預計將有足夠的導師只能接受少量申請,因此我們鼓勵您也查閱其他指導組織

如果您對 Dart 和 GSoC 有特定的問題,請在我們的專用郵件清單上提出。

若要進一步了解 Google Summer of Code,請觀看以下影片或閱讀Google Summer of Code 的貢獻者指南

我們期待您的來信!


Dart in Google Summer of Code 2026 最初發佈於 Dart,一個人們透過突出顯示和回應故事來繼續對話的 Medium 網站。

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

【文章翻譯】20 apps in 20 days with Flutter and Antigravity

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

  • 為什麼我停止規劃並開始建造
Dash 愉快地建構 Flutter 應用程式。

大家好,我是 Kevin Lamenzo!我最近加入了 Dart 和 Flutter 團隊(🎉),今年一月我開始了一項任務:在 20 天內使用 Flutter 和 Antigravity 建立 20 個應用程式。但為什麼要這樣做呢?首先,好奇心的成本已經正式歸零。您可以在 10 分鐘內從想法到應用程式。其次,作為團隊的新成員,我想透過建立一些東西來學習這個框架。最後,也是最重要的一點,我想驗證一個理論,即在 2026 年,我們都可以成為開發者。

我來分享我在實戰中學到的東西。如果您從這篇文章中只學到一件事,那就是:停止閱讀,去建立一些東西。

火花

我的第一個應用程式是一個健康追蹤器。

在最近的一次體檢中,我的醫生「強烈建議」我注意血壓和酒精攝入量。我的第一反應是:「不要告訴我該怎麼做!」我的第二反應是:「我要為此建立自己的應用程式。」沒有訂閱優惠,沒有資料收集,沒有遊戲化的新手引導。只是一個解決我特定問題的簡單工具。

我的第一個應用程式 — 個人健康追蹤器。

為什麼選擇 Flutter?

我總是四處奔波。我最初建立了一個網路應用程式,這很好,但我需要這個工具放在我的口袋裡。Flutter 讓網路應用程式到行動應用程式的過渡感覺像魔法一樣。Antigravity 幾乎不需要更改程式碼。

在建立行動版本後,我甚至開設了一個 Google Play 開發人員 帳戶(25 美元),並將應用程式發佈給自己作為測試人員。現在我的創作已在我的手機上運行(儘管我仍然沒有徽標或圖示)。

我的手機上的健康追蹤器應用程式,帶有預設圖示。

衝刺想法

建立健康追蹤器應用程式的成功令人陶醉。到第一週結束時,我的手機上已經有四個應用程式,並且我啟動了一個內部部落格(我稱之為「每日應用程式」)來記錄我的旅程並與我的同事分享混亂。

這感覺不僅僅是氛圍程式設計 — 我在建立。我正在探索手機的感測器,使用觸覺回饋,甚至使用 API。

我的內部部落格登陸頁面 — 每日應用程式

嘗試擴展時碰壁

並非一切都一帆風順。當我試圖將一個快速構思的應用程式在每週的每一天都加入新功能時,我碰壁了。

大型應用程式是可能的,但您需要不同的心態。您必須深入了解架構。您可能需要向代理提出 100 個追蹤問題。您在這個流程步驟中帶來的知識越多,您的體驗就越好。這是您 學習「傳統」開發 的藉口。

然而,「每日應用程式」心態的美妙之處在於,您不必總是擴展。小型應用程式建立速度快,有幫助,而且您可以明天醒來並轉向一個全新的應用程式。

這引出了我的「AI 思想領導肥皂箱時刻」:

現在我們都有能力獨自完成驚人的事情,但下一個前沿是 協作。我們如何利用我們的 AI 超能力以新的方式一起工作是一個未知的領域。因此,如果您與朋友或團隊一起「氛圍建立」一個應用程式,請記錄您的旅程並與我們分享。

Dash 在他的肥皂箱上發表意見。

我推薦的工作流程

我收到了一些同事和朋友關於我如何保持組織的問題。這是建立您自己的應用程式的工作流程:

  1. 保持組織 (Google 文件) - 我還沒有完全 AI 化。我需要一些靜態、熟悉的東西,一個放置我想法的地方。我從 Google 文件開始每個應用程式,無論大小。我加入了日期和我的快速筆記。這讓我有了一個需要時可以返回的地方。
  2. 完善我的想法 (Gemini) - 這個步驟正在成為一個經典的「AI 技巧」:不要自己撰寫提示;寫下您的原始想法,然後請 LLM 為您建立一個黃金提示。
  3. 開始建構! (Antigravity) - Google 新的 AI 賦能 IDE 是一個主力。相比之下,如果您要求任何流行的 LLM(Gemini、ChatGPT 等)「寫一本書」,它們只能輸出那麼多。當您向 Antigravity 提出這樣一個複雜的任務時,它首先會制定一個計畫,然後循序漸進地執行該計畫中的每個任務。您一路引導它。我將所有黃金提示放入 Antigravity,並引導它將它們建構到應用程式中。
  4. 測試、迭代、重複(也是 Antigravity)- 在 Antigravity 完成您的第一個建構後,是時候動手操作了。運行軟體。試用它。向 Antigravity 提供您的回饋,並要求它進行您需要的更改。不知道如何運行 Flutter 應用程式?只需向 Antigravity 中的代理詢問即可。
  5. 部署(可選)(Google Play、Firebase)- 我已經提過將我的應用程式放到我的手機上。另一個分享的絕佳途徑是 Firebase。不確定從何開始?請 Gemini 指導您。Firebase 讓託管您的應用程式和加入更進階的服務(例如身份驗證)變得更加容易。

突破我的內部部落格

我從這個挑戰中獲得的能量最終幫助我突破了它。我沒有建立內部部落格,而是建立了自己的個人網站。在這裡,我擺脫了每天建立一個小東西的人為限制。相反,我正在處理大大小小的事情,隨時抓住想法,毫不猶豫地繼續前進。

如果您想了解我如何在公司防火牆之外應用這些經驗教訓,請到 ladevzo.com/scrappy-path 找我。

ladevzo.com 的螢幕截圖。看看吧!

結論:找到您自己的流程

話雖如此,我還是想以這句話作結:您不需要在 20 天內建立 20 個應用程式。從小處著手。使用 Gemini 進行腦力激盪。使用 Antigravity 建立原型。在您深陷於掌握程式碼之前,專注於從「想法」轉變為「可運作的現實」。

工具已準備就緒。您準備好了嗎?

附錄:應用程式列表

  1. 同義詞滑塊 (1 個檔案,207 行程式碼) — 一個簡單的應用程式,為使用者提供給定單詞的同義詞列表。展示了基本的 HTTP 整合。
  2. 感測器應用程式 (1 個檔案,228 行程式碼) — 使用 sensors_plus 套件與設備硬體互動。
  3. 漢語移位 (1 個檔案,230 行程式碼) — 一個語言實驗,將英語短語和句子翻譯成漢語風格的表意文字格式(漢語在與 LLM 互動時,由於其語法,使用的標記少得多)。
  4. VIP 徽章 (1 個檔案,273 行程式碼) — 透過 Firebase 和 Google 登入實現身份驗證。
  5. 我的應用程式 Widget (4 個檔案,305 行程式碼) — 一個 Android 主螢幕「容器」,用於容納我所有的應用程式。利用 Android Intents 建立主螢幕 Widget。
  6. 觸覺音效板 (2 個檔案,311 行程式碼) — 一個具有音訊播放功能的音效板應用程式。
  7. 生鏽俳句 (4 個檔案,403 行程式碼) — 一個簡單的俳句生成器。展示了 API 使用和 Riverpod 狀態管理。
  8. 思緒點 (5 個檔案,481 行程式碼) — 在地圖上放置一個標記並透過語音輸入捕捉一個想法。具有語音轉文字、地圖、地理定位和本地資料庫功能。
  9. 震動 (6 個檔案,494 行程式碼) — 專注於使用共享偏好設定和自訂 UI 字體的本地儲存。
  10. 接受變更 (2 個檔案,547 行程式碼) — 嘗試將 Antigravity 的推播通知反彈到我的手機。透過通知提供設備回饋並連接到即時資料庫。
  11. 街頭偵探 (9 個檔案,574 行程式碼) — Geoguesser 的變種:一個協同謀殺懸疑遊戲,您需要使用 Google 地圖尋找線索並解決謎題。基於地圖的應用程式,具有使用者身份驗證和 Google 街景整合。
  12. 學習維特 (7 個檔案,588 行程式碼) — 一個用於理解維特根斯坦的學習應用程式。專注於使用自訂字體的使用者介面設計。
  13. 帕奇西遊戲 (5 個檔案,625 行程式碼) — 帕奇西遊戲的重製版。這是使用 Antigravity 進行「一次性提示」的嘗試。使用 Riverpod 和 Equatable 管理複雜邏輯和狀態。
  14. 健康追蹤器 (6 個檔案,641 行程式碼) — 用於監測日常血壓和酒精攝入量的個人健康追蹤應用程式。管理本地狀態並利用檔案系統進行儲存。
  15. 魔法八爪魚 (6 個檔案,692 行程式碼) — 我對魔法八號球的看法。
  16. 會議幫手 (5 個檔案,778 行程式碼) — 使用 Firebase 身份驗證和 Cloud Firestore 的生產力工具。
  17. 髮型日誌 (6 個檔案,901 行程式碼) — 一個 Google 相簿整合,可幫助髮廊利用 Google 相簿函式庫 API 管理使用者髮型照片。
  18. Wwks (6 個檔案,1121 行程式碼) — Kevin 會怎麼說?我的個人化、啟用 AI 的聊天介面。結合了 Google 生成式 AI 和完整的 Firebase 後端。
  19. 人類速度 (15 個檔案,1124 行程式碼) — 一個個人思考工具。允許您在 LLM 執行緒之間自行管理上下文。使用 Riverpod、GoRouter 和 Firebase 建構的全端 AI 應用程式。
  20. 數學事實 AI (11 個檔案,1520 行程式碼) — 利用生成式 AI 教學數學事實的教育工具。
  21. 運動夥伴 (11 個檔案,1582 行程式碼) — 運動追蹤器,具有 Riverpod、Cloud Functions 和 Freezed 程式碼生成功能。
  22. 脈搏 (14 個檔案,1928 行程式碼) — 整合生成式 AI、穩健的狀態管理和程式碼生成的大規模專案。
Dash 在跑步機上健身。

【文章翻譯】Flutter & Dart’s 2026 roadmap

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

透明度是 Flutter 開源專案的核心目標,今天我們很高興能分享下一代應用程式的發展藍圖。我們的使命大致保持不變,我們仍在努力實現創造最受歡迎、增長最快、生產力最高的多平台 UI 框架的長期目標。您可以查看 GitHub 上最新更新的發展藍圖 以獲取所有詳細資訊,在這篇文章中,我們將介紹推動我們使命的主題。

當您深入了解我們今年的計劃時,請記住,這份發展藍圖——一如既往——是我們對未來的抱負策略。與任何其他發展藍圖一樣,計劃在一年中往往會發生變化和調整,因此如果在此過程中發生一些變化,請不要感到驚訝。雖然它主要反映了我們 Google 團隊正在專注的工作,但事實是 Flutterverse 現在比任何一家公司都要大得多。

高保真多平台:Impeller、Wasm 及更多

我們的主要使命是透過專注於原生級別的品質和效能,繼續提供最佳的多平台堆疊。在 2026 年,我們將完成 Android 上 Impeller 渲染器的遷移。透過最終移除 Android 10 及更高版本上的傳統 Skia 後端,我們確保了流暢的動畫並減少了每個使用者的卡頓。我們仍然將 Impeller 視為快速啟動和一致效能的最佳解決方案。

在網頁端,我們打算讓 WebAssembly (Wasm) 成為預設選項,以提供原生品質的體驗和效能。我們也致力於深度平台整合,確保 Android 17 和即將推出的 iOS 版本提供零日支援,同時為桌面提供多視窗支援,我們的 Canonical 合作夥伴將繼續取得進展。

GenUI、暫時性體驗和代理應用程式

我們正在從根本上改變應用程式架構,以啟用代理 UI——不僅是預先構建的介面,而是即時適應使用者意圖的介面。這由 Flutter GenUI SDKA2UI 協定 提供支援,使 AI 模型能夠動態生成豐富的體驗。

為了支援這一點,我們正在研究透過在 Dart 執行時中添加對解釋型位元組碼的支援來發展 Dart 語言。這使得「暫時性」程式碼交付成為可能,其中應用程式的特定部分可以按需載入,而無需完整的應用程式商店更新——這是實現真正代理應用程式的關鍵技術步驟。

全端 Dart:隨處攜帶您的工具

我們正在擴展我們的堆疊以支援全端和代理應用程式的發展。一個主要重點是 Firebase 的 Dart Cloud Functions,提供約 10 毫秒的冷啟動,以確保高效能後端邏輯。我們還在研究 Google Cloud SDK 的 Dart 支援,以便您可以輕鬆地在 Google Cloud 上連接和構建您的後端。此外,我們正在與 Genkit 團隊合作,啟用 Dart 支援以幫助您構建複雜的 AI 功能。

AI 重新構想的開發者體驗

人工智慧編碼代理正在顛覆應用程式的建構方式。我們將繼續在 Google 內部協作,以確保 Dart 和 Flutter 在 Gemini CLI 和 Antigravity 中獲得頂級支援,確保有狀態熱重載等核心工作流程與人工智慧代理無縫協作。

我們還在投資 Dart 工具的 MCP (模型上下文協定) 伺服器,使 AI 代理能夠透過直接與 Dart 分析器「對話」,以高準確度執行複雜的重構並選擇安全、高效能的函式庫。

可持續開源與治理

為了釋放 Flutter 的全部潛力,我們正在轉向開放且可持續的運營模式。這包括將 Material 和 Cupertino 設計系統解耦為獨立的套件,以加速開發並允許它們獨立發展。我們還在改進 Flutter 引擎的可擴展性,以便可以「樹外」編寫新平台的支援。

我們透過將與利害關係人的協作正式化,深化我們對生態系統的承諾。這方面的核心是擴大我們的諮詢計畫、內部人員和 Google 開發者專家 (GDE) 網路、客戶諮詢委員會 (CAB) 和合作夥伴諮詢委員會 (PAB),這些都為我們的團隊提供了直接的回饋。

現代語法與編譯效能

Dart 將繼續發展成為一種高效能語言。在 2026 年,我們計劃推出主要建構函式以簡化類別宣告,以及增強功能以簡化程式碼生成。我們將繼續專注於改進 build_runner 和 Dart/Wasm 編譯,同時重構分析器以提高大型應用程式的效能。

將開發者帶入 Flutter 和 Dart

我們最近完成的全新 Dart 和 Flutter 學習路徑 為新開發者提供了一個簡化、有指導的入門路徑。在 2026 年,我們計劃繼續在現場和數位平台進行推廣,以改善開發人員及其 AI 工具的體驗。

在 Google Cloud Next 和 I/O 見!

雖然這份發展藍圖是我們今年的計畫,但您無需等待太久就能看到團隊的下一個重大成果。請在您的日曆上標記 Google Cloud Next 2026 在拉斯維加斯(4 月 22-24 日)和 Google I/O 2026(5 月 19-20 日)。這些將是您下次看到 Flutter 實際運作的最佳時刻!

現在非 Google 貢獻者的數量已經超過我們受僱於 Google 的人,正在發生的大量令人興奮的工作甚至沒有被列出!在開源專案中準確預測總是一個挑戰,因此請將此視為我們意圖和優先順序的真誠聲明,而不是固定的保證。我們非常興奮能與大家一起繼續建構應用程式的未來,迫不及待地想看看您會建構什麼!

您最期待什麼? 使用主題標籤 #Flutter2026 在社交媒體上告訴我們。如果您對我們的更多消息感到興奮,請務必在 X 上關注我們,查看 GitHub 上的倉庫,並關注此部落格以獲取最新更新。讓我們一起建構應用程式的未來!🚀


Flutter & Dart 的 2026 年發展藍圖 最初發佈於 Flutter 的 Medium 網站上,人們在那裡透過突出顯示和回應這個故事來繼續討論。

【文章翻譯】Announcing Dart 3.11

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

好的,請注意,我將以繁體中文輸出 Markdown 格式的內容:

宣布 Dart 3.11

各位 Dart 開發人員您好!最新的穩定版 Dart 3.11 正式發布了!

此版本著重於響應能力和工具改進,您將在日常工作流程中感受到這些變化。從更智慧的分析伺服器到新的 pub 客戶端功能和增強的 AI 支援,Dart 3.11 旨在讓您保持流暢。繼續閱讀以了解更多資訊。

宣布 Dart 3.11

語言更新

此 Dart 版本中沒有新的語言更新。

工具更新

Dart MCP 和 AI 支援:套件 URI

我們將繼續改進 Dart 和 Flutter MCP 伺服器,以更好地支援 AI 編碼助手。

我們在 MCP 伺服器中新增了一個名為 read_package_uris 的工具。此工具允許 AI 代理(如 Cursor、Gemini 或 Copilot)從您的專案中讀取套件 URI 並將其添加到其上下文。這確保您的 AI 助手在產生程式碼時可以正確讀取、解析和利用相依性。

分析伺服器

此版本包含 Dart 分析伺服器的多項效能改進。伺服器現在使用「細粒度相依性」,使其在決定 IDE 會話期間需要重新分析哪些程式碼時更智慧。

我們還改進了特定情況下的分析效能,例如分析由符號連結導致的目錄結構中存在循環的程式碼,或許多常數物件的深層樹。

伺服器現在會快取編譯過的分析器插件入口點,從而縮短 IDE 會話以及 dart analyzeflutter analyze 命令的啟動時間。

最後,我們增強了許多分析伺服器功能中的「點式簡寫」支援,特別是程式碼補全、快速修復和快速協助。

Pub 更新

Pub 工作區中的 Glob 支援

Pub 工作區 現在支援使用 glob 宣告套件。這使您可以輕鬆地將目錄中的所有套件包含在 pub 工作區中,而無需一一列舉:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Before
name: workspace
environment:
sdk: ^3.10.0
workspace:
- pkg/a
- pkg/b
- pkg/c
# After
name: workspace
environment:
sdk: ^3.11.0
workspace:
- pkg/* # Adds all packages inside pkg.

注意:要使用此功能,您的 pubspec.yaml 必須具有 Dart 版本 3.11 或更高版本。

Pub 快取垃圾回收

Pub 始終將套件儲存在一個單一的全局 PUB_CACHE 中,確保您永遠不會下載相同的套件兩次。然而,由於 Pub 沒有追蹤哪些專案使用了快取,因此無法知道哪些套件已過時,導致套件版本隨著時間的推移而累積。到目前為止,唯一的解決方案是清除整個快取並重新開始。

從 Dart 3.9 開始,pub get 已將解析的專案路徑儲存在快取中。現在在 Dart 3.11 中,我們引入了 pub cache gc 命令,該命令遍歷所有「活動」專案,標記它們所依賴的所有套件版本,並刪除其餘的。這可以幫助您回收寶貴的磁碟空間。

1
2
3
4
5
6
7
8
9
10
> dart pub cache gc
Found 3 active projects:
* /home/yourusername/projects/pub
* /home/yourusername/projects/pub-dev
* /home/yourusername/projects/pana
All other projects will need to run `dart pub get` again to work correctly.
Will recover 2 GB.
Are you sure you want to continue? (y/N)? y
Deleting unused cache entries... (4.5s)
>

總結

Dart 3.11 就這樣!此版本完全著重於在日常開發中產生影響的細節。

有關完整的變更列表,請查看 Dart SDK 變更日誌。一如既往,我們很樂意聽取您的回饋!


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

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

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

賦能社群

今天,我們很高興地宣布發布 Flutter 3.41,這標誌著我們共同旅程中的一個轉型里程碑!對於開發者來說,這是一個多麼令人興奮的時代;此版本代表了我們致力於賦能社群塑造 Flutter 方向的承諾。Flutter 3.41 包含來自 145 位獨特貢獻者的 868 次提交,提供了額外的透明度和模組化,以進一步改善對 Flutter 的貢獻體驗。

我們正在引入公開發布窗口,讓您更容易了解您貢獻的變更何時會發布到穩定版本。我們還將繼續解耦我們的設計函式庫,這從長遠來看將幫助我們更快地發展設計系統,同時也讓您可以控制在應用程式中採用哪些設計變更。無論您是透過新的片段著色器改進來突破 GPU 的極限,還是使用內容大小的視圖將 Flutter 無縫嵌入到現有的原生應用程式中,此版本都能確保您擁有自信和快速構建的工具。

有太多值得探索的內容,讓我們深入了解…

結構透明度和模組化

公開發布窗口

可預測性是安全地實現複雜功能的關鍵。我們正在引入公開發布窗口,為整個社群提供規劃所需的能見度。透過公開明確地指出分支截止日期和發布目標,我們使整個社群能夠清楚地了解他們的變更何時會發布到未來的穩定版本。

那麼什麼是分支截止日期?這個日期是拉取請求提交到預設分支(Dart 為 main,Flutter 為 master)的截止日期,以保證包含在下一個穩定版本中。如果您的 PR 在截止日期之前合併,它將在下一個穩定版本中發布。如果它在截止日期之後合併,它將等待下一個週期。

2026 年,我們計劃發布四個穩定版本(包括此版本),日期如下:

  • Flutter 3.41 — 2 月 | 1 月 6 日分支
  • Flutter 3.44 — 5 月 | 4 月 7 日分支
  • Flutter 3.47 — 8 月 | 7 月 7 日分支
  • Flutter 3.50 — 11 月 | 10 月 6 日分支

解耦以實現更精簡的核心

我們正在繼續將 Material 和 Cupertino 函式庫遷移到獨立套件的專案。這種模組化方法有幾個優點:

  • 更快的發布週期: 我們不再需要等待每季的 SDK 發布才能發布設計更新。我們可以在新的 Material 或 Cupertino 功能和錯誤修復準備就緒時立即發布。
  • 獨立升級: 如果您由於專案限制而使用舊的 SDK 版本,您仍然可以升級您的設計套件以獲得最新的外觀和感覺。
  • 自適應設計: 版本化的套件使我們能夠在 iOS 或 Android 引入 drastic 設計轉變(例如「液態玻璃」或「Material 3 Expressive」)時更快地做出反應,確保您的應用程式永不過時。

請關注 GitHub 議題 以追蹤進度。

擁抱生態系統標準

賦能社群的一部分是確保 Flutter 與我們已經依賴的工具良好協作。

Swift Package Manager 和 UIScene

從 CocoaPods 到 Swift Package Manager 的過渡仍在繼續。我們強烈鼓勵 Plugin 作者 採用 Swift Package Manager,因為它現在是 Apple 生態系統的標準。此外,為確保與未來 iOS 版本的相容性,Flutter 現在 預設完全支援 UIScene 生命周期。此更新對於滿足 Apple 對即將推出的 iOS 版本的需求至關重要。為了簡化從已棄用的 AppDelegate 生命周期邏輯的遷移,請查看我們的 遷移指南

Android Grade Plugin (AGP) 9 和 Kotlin DSL

我們持續與現代 Android 標準保持一致。隨著 Android Gradle Plugin (AGP) 9 的發布,我們正在努力支援新的嚴格要求並提供如何應對這些要求的指導。

警告: 請勿 將您的 Flutter Android 應用程式更新到 AGP 9,因為 將 Plugin 遷移到 AGP 9 和在 AGP 9 上使用 Plugin 的 Flutter 應用程式 尚未支援 (#181383)。此支援已暫停,因為 Flutter 團隊正在審核遷移以確保與舊版本 AGP 的向後相容性。此 遷移文件 將隨著指導變更而更新。

感謝社群成員 Byoungchan Lee (bc-lee@) 的貢獻,新的 Plugin 專案現在預設使用 Gradle 的 Kotlin DSL。

平台特定資產

由於 Alex Frei (hm21@) 的努力,優化現在變得更容易。您現在可以在 pubspec.yaml 中指定資產應捆綁哪些平台。這允許進行優化,例如,從行動建置中排除大型桌面資產,從而顯著減小應用程式大小。

1
2
3
4
5
6
7
flutter:
assets:
- path: assets/logo.png
- path: assets/web_worker.js
platforms: [web]
- path: assets/desktop_icon.png
platforms: [windows, linux, macos]

傾聽社群的聲音

Google 的 Flutter 團隊持續優先考慮對您最重要的事項。

入門體驗

多年來,社群一直指出,雖然 Flutter 令人愉悅且高效,但很難知道從何開始學習。

我們最近推出了完全重新構想的 Dart 和 Flutter 入門體驗

這是一個新的學習途徑,旨在引導您了解使用 Flutter 和 Dart 構建應用程式的基礎知識。讓我們快速瀏覽一些變更:

  • 我們引入了一個新的「快速安裝」指南,該指南利用網頁上的熱重載,使學習者能夠快速體驗 Flutter 的全部功能,而無需首先設定特定於平台的環境。這是一個包含書面教學、低風險測驗以及 Google Flutter 團隊中一些熟悉的面孔的八個新影片的途徑。
  • 學習者將在完成學習路徑後從頭開始構建 4 個應用程式。

在我們網站上重新設計的 學習 部分中嘗試新的入門體驗,該部分由 Jaspr 提供支援。

片段著色器改進

在 2025 年第四季度,我們調查了使用 FragmentShader API 的開發人員,並簡單地問道:是什麼阻礙了您的工作? 您告訴我們,您在使用 API 時需要改進人體工學,同時在定義著色器時擁有更大的靈活性。為此,我們進行了以下變更:

  • 在 3.41 中,我們加入了同步圖片解碼。以前,為著色器建立紋理可能會引入一幀延遲。使用 decodeImageFromPixelsSync,您現在可以在同一幀中生成紋理並將其用作取樣器。
  • 我們還加入了對高位元速率紋理(高達 128 位元浮點)的支援,解鎖了使用高解析度查找表 (LUT) 進行 GPU 加速照片濾鏡和 SDF 的能力。
1
2
3
4
5
6
7
8
9
10
11
12
void attachTexture(ui.FragmentShader shader) {
ui.PictureRecorder recorder = ui.PictureRecorder();
Canvas canvas = Canvas(recorder);
canvas.drawCircle(const Offset(64, 64), 64, Paint()..color = Colors.red);
ui.Picture picture = recorder.endRecording();
ui.Image image = picture.toImageSync(
128,
128,
targetFormat: ui.TargetPixelFormat.rFloat32,
);
shader.setImageSampler(0, image);
}

Widget 預覽(實驗性)

根據您的早期回饋,我們正在快速疊代 Widget 預覽。在此版本中,Widget 預覽得到了以下改進:

  • Flutter Inspector 支援: Widget 預覽環境現在可以存取嵌入式 Flutter Inspector 實例,使檢查佈局和預覽 Widget 的狀態變得容易。重要提示: 預設情況下,可能需要配置額外的套件目錄才能看到專案中的 Widget。為此,請點擊齒輪圖標打開 Flutter Inspector 設定,並添加一個指向您專案的新套件目錄。
  • 支援具有 dart:ffi 依賴項的應用程式: 以前,包含具有 dart:ffi 函式庫傳遞依賴項的 Widget 預覽會導致編譯錯誤並阻止預覽環境更新。發生這種情況是因為 dart:ffi 不支援 Web 平台 (flutter/flutter#166431)。Widget 預覽器現在可以處理對平台特定函式庫(包括 dart:ffidart:io)具有依賴項的預覽。重要提示:在 Widget 預覽器中不支援調用這些函式庫的 API,並且將導致針對調用這些平台特定 API 的預覽顯示錯誤。有關如何撰寫與原生和 Web 平台都相容的程式碼的範例,請參閱 Dart 條件導入文件

框架保真度和優化

我們持續專注於平台保真度和開發人員效率,以改進當前的體驗。

iOS 優化

在 Flutter 3.41 中,我們透過新的「有界模糊」風格對視覺效果進行了改進。以前,使用 BackdropFilter 的半透明 Widget 可能會出現邊緣顏色滲出的問題。由於 Impeller 渲染引擎的改進,我們已經消除了這種假影。

我們還透過 showDragHandle 屬性為 CupertinoSheet 加入了原生風格的拖曳處理支援。

添加到應用程式

現在將 Flutter 視圖添加到現有的 Android 和 iOS 應用程式中變得更容易了!嵌入在現有原生應用程式中的 Flutter 視圖現在可以根據其內容自動調整大小。以前,Flutter 視圖需要由其原生父級提供固定大小。這使得某些情況變得困難,例如將 Flutter 視圖添加到原生可捲動視圖中。

要使用此功能,您的根 Widget 必須支援無界約束。避免在樹的頂部使用需要預定義大小的 Widget(例如 ListView 或 LayoutBuilder),因為它們將與動態大小調整邏輯衝突。

要在 iOS 上啟用此行為,請 FlutterViewController.isAutoResizable 設定為 true。對於 Android,請在您的 Android Manifest 中啟用內容大小調整,並 將您的 FlutterView 的寬度或高度設定為 content_wrap

導航和捲軸

我們努力透過以下變更來消除核心互動模型中的粗糙邊緣:

  • 我們引入了 Navigator.popUntilWithResult,允許您在單一呼叫中彈出多個螢幕並將值傳回目的地路由,大大簡化了多步驟流程中的狀態管理。
  • 我們使用從 Android 12 移植的基於模擬的方法重新實現了 StretchingOverscrollIndicator。這確保了更自然流暢的過度捲軸效果,可正確回應高速滑動。
  • 我們修復了 NestedScrollViewSliverMainAxisGroup 中固定標題的問題,確保標題正確覆蓋後續的 sliver。

無障礙

幫助您建立無障礙體驗,讓使用者在任何螢幕上都能使用,是我們使命的核心。在此更新中,我們加入了以下內容:

  • CircularProgressIndicatorLinearProgressIndicator 的原生無障礙支援,允許輔助技術宣布進度更新。
  • Flutter 現在尊重網頁使用者的文字間距覆蓋,以改善閱讀體驗。
  • 我們在 flutter_test 中引入了新的匹配器,例如 isSemanticsaccessibilityAnnouncement,以使驗證無障礙變得更容易。

Material 和動畫

我們引入了新的原始類型和屬性,以擴展對動畫和佈局的控制。感謝社群成員 Bernardo Ferrari (bernaferrari@) 的努力,RepeatingAnimationBuilder 引入了一種宣告式的方式來創建連續動畫,例如載入指示器、脈衝按鈕或閃爍的佔位符效果。

例如,您可以這樣製作一個方塊來回滑動:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
RepeatingAnimationBuilder<Offset>(
animatable: Tween<Offset>(
begin: const Offset(-1.0, 0.0),
end: const Offset(1.0, 0.0),
),
duration: const Duration(seconds: 1),
repeatMode: RepeatMode.reverse,
curve: Curves.easeInOut,
builder: (BuildContext context, Offset offset, Widget child) {
return FractionalTranslation(
translation: offset,
child: child,
);
},
child: const ColoredBox(
color: Colors.green,
child: SizedBox.square(dimension: 100),
),
),

我們還更新了 CarouselView,增加了 .builder 構造函數,讓建立動態內容的輪播變得更容易。DropdownMenuFormField 現在支援自訂的 errorBuilder,並且 RawAutoComplete 現在包含 OptionsViewOpenDirection.mostSpace 選項,可以根據可用的螢幕空間智能地定位選項。

社群主導的演進

Flutter 開源夥伴關係最強大的範例之一是我們與 Canonical 的長期關係。他們的團隊持續推動 Flutter 桌面的發展藍圖,提供造福整個生態系統的關鍵功能。

感謝 Canonical 的工程領導,我們正在彌補複雜桌面 UI 需求方面的差距。此版本引入了用於創建彈出視窗和工具提示視窗的實驗性 API,以及對 Linux、macOS 和 Windows 上對話框視窗的跨平台支援。最後,增加了新的 API,讓您可以測試多視窗應用程式。如果您想先睹為快這些即將推出的視窗 API,請查看 Flutter 的 multiple_windows 範例應用程式

Flutter Linux 現在也預設啟用合併執行緒,簡化了執行緒模型並提高了效能,同時也致力於提高 Windows 的穩定性。我們打算在未來的版本中移除合併執行緒選擇退出。如果您對合併執行緒有任何問題,請 告知我們

DevTools

Devtools 在效能和穩定性方面都有所改進:

  • Flutter 的 DevTools 使用 dart2wasm 編譯,從而提高了效能。您仍然可以選擇退出並恢復到 dart2js 編譯的 DevTools,方法是使用設定對話框。
  • 與 Dart Tooling Daemon (DTD) 的斷開連線現在會自動重試,以改善機器休眠後恢復時的體驗。

這些只是此版本中的幾個亮點。若要了解 Flutter 3.41 中包含的所有更新,請查看 DevTools 2.52.02.53.02.54.0 的發行說明。

下一步:flutter upgrade

Flutter 3.41 是朝著改善我們的開源貢獻體驗邁出的一步,同時也改善了 Flutter 的基礎功能,以增強您的開發體驗,無論您是將插件遷移到 Swift Package Manager,為特定平台優化資產,還是使用新的 Shader API 推動像素。我們感謝我們共同建立的精彩社群。

有關所有變更的完整列表,請務必查看詳細的 重大變更發行說明。要試用 Flutter 3.41 中的新功能,只需運行 flutter upgrade


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

【文章翻譯】Announcing our new Dart and Flutter Getting Started experience

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

當我加入 Dash DevRel 團隊時,我的經理給了我一份入職文件,開頭是這樣的:「你新工作的宗旨只有一句話:改善 Dart 和 Flutter 開發者的生活。」

久而久之,我逐漸了解到「Dart 和 Flutter 開發者」的定義也包含了那些尚未稱自己為 Dart 和 Flutter 開發者的人;他們只是對 Flutter 感到好奇。

今天,我們推出了一個我們認為可以改善這些未來 Flutter 開發者生活的事物:Dart 和 Flutter 入門體驗

我們建造了什麼

入門體驗是一條為尚不了解 Dart 或 Flutter 的程式設計師設計的多學科學習路徑。它涵蓋 Dart 和 Flutter 網站,並結合了書面教學、影片系列、測驗和文件,引導您從設定 Flutter 到建立一些旨在教授基本原理的應用程式。

為那些只想試用 Flutter 的人提供的快速安裝指南。

自從 Hot Reload 在網路上發布以來,Flutter 學習者可以在不需要下載特定平台的開發環境的情況下,獲得完整的 Flutter 體驗。我們編寫了一份新的快速安裝指南,以減少嘗試 Flutter 的阻力。我們不希望在您甚至開始之前,就讓您感覺像是一種承諾!

兩個完整的教學課程:一個用於 Dart,一個用於 Flutter。

Dart 教學課程旨在引導到 Flutter 教學課程,但它們之間並無依賴關係。如果您已經熟練使用另一種現代、物件導向的語言,您可以直接跳入 Flutter 教學課程。

您將從零開始建構的四個應用程式。

在我們自問的所有設計問題中,我們花費最多時間思考的是讀者將實際建構什麼。它會是一個巨大的應用程式,幾個獨立的食譜式 Flutter 程式碼片段,還是介於兩者之間的東西?

最終,我們得出結論,較小的應用程式能為初學者提供更好的體驗,原因有以下幾點:

  • 對於較大的應用程式,出錯的空間更大,這可能會讓初學者感到沮喪。
  • 應用程式越大,需要的程式碼就越多,而這些程式碼實際上與教學課程試圖教授的內容無關。
  • 我們不希望要求使用者複製一個包含 25 個專案的儲存庫,其名稱類似於 flutter_tutorial_step_1。然後您必須將 Git 和終端命令引入其中,您必須要求讀者複製適用於其作業系統的命令,依此類推。這只是一堆不必要的累贅,阻礙了學習。

同時,應用程式必須超越單一功能,否則我們將無法將功能與更大的圖景聯繫起來。

八部影片伴隨主要主題。

入門體驗中的影片旨在提供最關鍵的上下文,以便讀者在進入實作程式碼部分時,能理解他們正在做什麼。

包含這些影片對我個人而言也很重要。多年前當我學習 Flutter 時,我對早期的 DevRel 團隊感到敬畏。他們深切關心 Flutter 的教學,而且他們是如此真誠和支持,以至於我想成為他們正在做的一切的一部分。由於這個學習路徑通常是新的 Flutter 開發者第一次互動的東西,我想尊重這種感覺,並讓對 Flutter 好奇的開發者感到興奮和歡迎加入社群。

為此,我們利用這些影片來教學 Flutter,同時也介紹了一些每天都在努力讓 Flutter 和 Dart 變得更好的真實人類——工程師、技術撰寫人員和產品經理都參與其中。

整個過程中有小測驗,以確認您所學到的知識。

我們在每個教學頁面末尾加入了簡單的測驗。它們風險低且不具阻擋性。它們僅僅是為了給您一點回饋和信心。如果您不喜歡它們,就跳過它們吧!

現有的「Flutter 如何運作」YouTube 系列作為結論。

我們以 Craig Labenz 幾個月前發布的精彩影片系列「Flutter 如何運作」作為學習教學的結尾。這個系列以足夠的深度教導您 Flutter 的內部運作,使其仍然易於理解,同時提升您編寫 Flutter 應用程式的能力。這是成為一名進階 Flutter 開發者必學的知識。

網站更新

這份教學文件將與 Dart 和 Flutter 網站的幾項更新一起發布。您可能知道我們一直在將我們的網站基礎設施從基於 JavaScript 的靜態網站產生器 (SSG) 遷移到 Jaspr,一個 Dart SSG。這次遷移的時機並非偶然!我們知道我們想這樣做,而且在我們開始對入門教學文件進行網站的大量更新之前,這似乎是正確的選擇。

作為讀者,最明顯的更新是將主要文件文章與網站的學習區塊分開。網站的學習區塊是透過點擊網站標頭導航中的「學習」按鈕來存取的,如螢幕截圖所示:

「學習」區塊將組織所有現有和未來的教學式文件和文章,以使主要文件更容易導航。在標頭導航中,可以透過「使用者指南」按鈕(或點擊網站標題)到達主要文件。

嘗試看看

學習路徑已在 docs.flutter.dev/learn/pathway 上線。如果您完整閱讀了它——或者只是其中一部分——請填寫該頁面上連結的回饋調查。我們正在傾聽,並且已經在思考接下來要做什麼。


宣布我們新的 Dart 和 Flutter 入門體驗 最初發表於 Flutter on Medium,人們在那裡透過突出顯示和回應這個故事來繼續討論。

【文章翻譯】Jaime’s build context: Prompt engineering as infrastructure

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

總結

在代理式人工智慧時代,專案規模擴展的瓶頸已從程式碼量轉移到程式碼完整性。若要在人工智慧所允許的速度下前進,同時不引入系統性摩擦,我們必須停止將人工智慧視為魔杖,而應將其視為需要完美校準軌道的高效能引擎。

  • 縮小差距:工程團隊正在分裂——一端是傳統主義者,另一端是高速的代理式超級使用者。對於生產應用程式,您的基礎架構必須連接兩者,創建一個共享空間,讓傳統的嚴謹性和代理式速度不僅共存,而且積極地相互強化。
  • 傾向於可重現的系統:代理程式的好壞取決於其回饋迴路。如果您的測試不可重現,並且您的 CI 缺乏高訊號回饋迴路,那麼您的代理程式將會盲目運行。
  • 將提示視為基礎架構:停止將您最好的 AI 指令視為當會話結束時就會消失的臨時聊天一次性內容。相反,將這些自動化工作流程指令移到版本控制檔案中,將您的個人部落知識轉化為可執行文件,確保每個團隊成員都能在整個專案中可靠地觸發相同的高完整性結果。
  • 轉向基於技能的架構:成功意味著將您經過驗證的工作流程晉升為共享技能。透過從單個提示轉向專案範圍的技能,您為整個團隊提供了一個標準的、高完整性的劇本,代理程式可以自動執行。

最近,我一直在反思,對於新一批貢獻者來說,擴展開源專案的真正意義是什麼。我們正在進入一個代理式人工智慧可以如此快速地生成程式碼的時代,以至於純粹的數量不再是瓶頸;相反,真正的挑戰是確保這種湧入不會損害我們的程式碼庫,或我們作為隊友的共同價值觀。許多團隊正在分裂成啞鈴形狀:一端是傳統的手動編碼,另一端是高速的代理式超級使用者。

對於大型應用程式來說,我們的基礎設施必須作為連接這兩個極端的手柄,創造一個共享空間,讓傳統的嚴謹性和代理式速度不僅共存,而且積極地相互強化。為了有效擴展,我們必須透過將我們的工作流程建立在可重現軟體開發的基礎上來堅持基礎。為了在這些工具允許的速度下前進,而不會陷入技術債務或難以閱讀的程式碼庫,我們的環境必須提供明確、高訊號的回饋迴路。

在這種代理式情境下,原始碼健康狀況嚴格以通過測試、確定性覆蓋率指標和乾淨的分析來衡量。如果缺少這些基本要素,就像要求高效能引擎在黑暗中以極快的速度行駛一樣。如果環境尚未準備好,感覺需要抵制這些新工具是完全合理且通常是負責任的。

這裡的目標不是為了速度而將工具強加於專案;而是建立數位感測器,使我們能夠安全地採用新的速度。更重要的是,這種轉變是關於讓我們的隊友一起參與。基礎設施不應該是將「AI 超級使用者」與團隊其他成員分開的障礙;它應該是我們所有人都感到自信的共同點。在代理式時代成為一名好隊友意味著確保儘管我們的儲存庫可能移動得更快,但我們的文化仍然支持。我們建立這些系統是為了讓每個人都能自信地前進,確保「代理式速度」對整個團隊來說都是一項勝利,而不僅僅是現有功能軟體產品的新風險。

然而,這些數位感測器的可靠性取決於它們所處的環境。這就是為什麼我們必須將信任建立在 CI 系統中。在真正可重現的工作流程中,CI 是唯一重要的現實版本;它是缺乏人類直覺的代理程式的最終仲裁者。如果變更未能通過自動化閘門,它實際上就不存在。透過將 CI 視為高訊號回饋迴路,我們消除了手動驗證的人為瓶頸,並將其替換為可重現的閘門。這種絕對的真相來源使我們能夠更負責任地擴展——使代理程式能夠快速失敗、迭代,並最終成功,而不會損害專案的完整性或團隊的安心。

請求

一次性的提示成功只是僥倖。真正的規模化來自於創造一個飛輪:每次您或隊友回到儲存庫時,代理程式都應該比上次更有能力,因為知識債務已預付到共享的提示儲存庫中。您正在建立一個不會被困在單一開發人員腦中的共享機構記憶。

為了讓您團隊中的任何開發人員都能重複使用此功能,您需要一個提示指令函式庫,充當可執行文件。雖然許多團隊急於創建全域「config」和「rules」檔案,但我發現這些通常會導致結果不一致——代理程式可能會「忘記」規則或將其錯誤地應用於錯誤的情境。作為具有科學頭腦的工程師,我們應該更喜歡消除變數。透過控制特定任務的確切提示,您可以確保代理程式擁有該特定任務在您的儲存庫中所需的確切內容。以有意的方式在專案中這樣做有助於個人和團隊對這些新工具建立真正的信心。

進入代理技能

2025 年末,Anthropic 推出了 Agent Skills ——一個開放標準,旨在為 AI 代理提供專業的模組化專業知識。技能不僅僅是通用工具,它還將指令和資源打包在一起,以確保複雜任務的一致執行。這正在迅速發展;截至 2026 年初,許多工具已經開始支援此標準,以實現跨平台可移植性。

  • 彈性:您可以將技能與許多代理程式搭配使用,包括 Antigravity、Cursor、Claude Code Gemini CLI 和 VS Code,因為它們是 開放標準
  • 共享知識:技能可以輕鬆地與協作者共享,或儲存到使用者資料夾中以供跨專案使用。
  • 可重複的工作流程:技能透過清晰的程序步驟指導代理程式,確保代理程式一致地執行複雜的多步驟任務。
  • 其他資源:技能可以包含腳本、範本或除了指令之外的其他資料。
  • 即時存取:當技能首次載入時,只有中繼資料會載入到代理程式的上下文中。這意味著只有在需要時才會將特定指令添加到上下文中,從而節省了令牌。
  • 維護程式碼品質:這些技能的建構可以用作一組工具,幫助貢獻者獲得正確的上下文,以根據您的最佳實踐組合出更高品質的 PR、測試和文件。

當前支援技能的主要工具文件

請參閱您的工具文件以了解在哪裡添加這些檔案。

有效技能的構成

為了確保您的技能函式庫仍然是「機器人的操作手冊」,而不僅僅是建議清單,此集合中的每個提示都遵循一套嚴格的最佳實踐:

  • 已知良好狀態:在代理程式接觸任何程式碼之前,它必須驗證現有的測試是否通過且分析器是否乾淨。如果基礎破裂,代理程式會在其上構建之前修復基礎。
  • 可操作的驗證:將指令錨定在 flutter test --coveragedart fix --apply 等命令中,以向代理程式提供自我修正所需的確定性回饋。
  • 有限的範圍設定:為了確保代理程式保持高度的上下文和專注,提示的設計具有明確的界限——針對特定函數、檔案或覆蓋率差距。這確保代理程式專注於單一目標,防止範圍蔓延並確保輸出易於審查。
  • 報告和審查迴路:代理程式的工作以結構化摘要結束,而不是提交。透過要求代理程式解釋其變更並提供建議的提交訊息,而不是實際推送程式碼,我們將人類工程師保留在最終決策者的角色中。

範例技能:準備當前工作以供 PR

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
---
name: pr-prep
description: Prepare current work for PR
---
## 準備當前工作以供 PR:驗證測試通過並清理

**目標:** 使用 `flutter test` 驗證當前測試套件狀態,清理任何臨時修改,並加強活動檔案的測試覆蓋率。

**指令:**
1. **基準:**
* 執行 `dart fix --apply` 以應用自動修復。
* 執行 `flutter analyze` 以確保沒有分析問題。
* 執行 `flutter test` 以建立當前通過狀態。
* 執行 `flutter test integration_test/app_test.dart` 以驗證整合完整性。
2. **修復失敗:** 如果有任何測試失敗或分析錯誤,請調查並解決它們。優先修復程式碼而不是刪除測試。
3. **清理:** 審查任何當前修改的檔案(執行 `git status` 或檢查差異)。移除任何:
* `print` / `debugPrint` 語句。
* 未使用的導入。
* 註釋掉的程式碼塊。
* 應替換為正確解決方案的臨時「駭客」修復。
4. **驗證和擴展:**
* 對於您修改或清理的檔案,檢查其單元測試是否缺少明顯的邊緣情況。添加測試以涵蓋這些情況。
* 再次執行 `flutter analyze` 以確保程式碼乾淨。
* 再次執行 `flutter test` 以確保清理沒有破壞任何東西。
* 根據需要重複此步驟。
5. **報告和審查:**
* 總結清理狀態(例如,「測試通過,已移除 3 個 debug print」)。
* **行動:** 要求使用者仔細審查變更,以確保沒有意外刪除預期的程式碼。
* **不要提交或推送。**
* 提供建議的 Git 提交訊息(例如,「準備 PR:修復測試並移除 debug 程式碼」)。

範例技能:單檔測試覆蓋率

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
---
name: single-file-test-coverage
description: Write a new test or modify an existing test
---
## 單檔測試覆蓋率改進

**目標:** 撰寫新的單一測試檔案,或修改現有檔案,以改善特定目標類別的覆蓋率。

**指令:**
1. **識別目標:** 選擇 `lib/` 中具有低或無測試覆蓋率且適合單元測試的單一原始碼檔案 (Dart)(例如,實用程式類別、邏輯輔助函數)。
3. **建立基準:**
* 執行 `flutter analyze` 以確保有效性。
* 執行 `flutter test` 以確保專案穩定。
* 執行 `flutter test --coverage` 並檢查 `coverage/lcov.info`。
4. **實作/更新測試:** 在 `test/` 中建立新的測試檔案或更新現有檔案。專注於:
* 邊緣情況(空輸入、空字串、邊界值)。
* 分支覆蓋率(確保 if/else 路徑已執行)。
* 必要時模擬依賴項(使用 `mockito` 或 `mocktail`)。
5. **驗證與迭代:**
* 執行測試以確保它們通過。
* 執行 `flutter analyze` 以確保沒有回歸。
* 如果覆蓋率仍然很低,**請迭代幾次**:分析遺漏的行/分支並添加有針對性的測試案例。
5. **報告與審查:**
* 總結已修復/覆蓋的內容並報告覆蓋率進度(例如,`X% -> Y%` for `<filename>`)。
* **行動:** 要求使用者仔細審查新的測試。
* **不要提交或推送。**
* 提供建議的 Git 提交訊息(例如,「改進 [類別名稱] 的測試覆蓋率」)。

範例技能:遷移到現代 Dart 功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
---
name: migrate-to-modern-dart-features
description: Migrate to modern Dart features (Dart 3+)
---
## 遷移到現代 Dart 功能

**目標:** 透過遷移到現代 Dart 功能(Dart 3+)來優化一致性和簡潔性。

**可遷移的候選者:**
* `if-else` 鏈 -> `switch` 表達式。
* 具有手動 `==`/`hashCode` 的資料類別 -> `Records` 或 `equatable`(或類別修飾符)。
* 空檢查 -> 模式匹配。

**指令:**
1. **基準:** 執行 `flutter test` 和 `flutter analyze`。
2. **選擇目標:** 識別 *單一* 遷移機會。
3. **限制:** 將變更保持極小(**最多 50 行**)。
4. **遷移:** 重構以使用新功能。
5. **驗證:**
* 執行 `flutter analyze`。
* 執行 `flutter test` 以確保沒有回歸。
6. **報告和審查:**
* 總結遷移。
* **行動:** 要求使用者仔細審查變更。
* **測試位置:** 明確說明使用者應該去應用程式中的哪個位置手動測試變更(例如,「應用程式打開後點擊底部按鈕」)。
* **不要提交或推送。**
* 提供建議的 Git 提交訊息(例如,「重構:在 [類別名稱] 中使用 switch 表達式」)。

總結

代理時代的長遠目標不在於您今天產生的程式碼量;而在於負責任地設計明日儲存庫的基礎設施和文化期望。透過建立啞鈴的把手,確保我們的工具運行速度更快時,它們仍然植根於我們共同的價值觀和技術嚴謹性。

在不久的將來,代理將從反應式助理轉變為主動貢獻者——在您睡覺時檢查您的儲存庫並解決問題。透過強化您的高訊號回饋迴路並在版本控制的技能套件中記錄您的工作流程,您不僅節省了時間;您還在訓練未來的代理程式尊重您的特定架構、願景和標準。最重要的是,您正在確保隨著開發引擎的加速,您的整個團隊都擁有數位感測器和共享知識,可以帶著集體信心和更強大、更有彈性的工程文化向前邁進。


Jaime 的建構上下文:提示工程即基礎設施 最初發佈在 Flutter 上的 Medium,人們在那裡透過突出顯示和回應這個故事來繼續討論。

【文章翻譯】The Top Ten Highlights from Flutter & Dart in 2025

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

嗨,Flutter 社群!我叫 Emma Twersky,我又回來提供 Flutterverse 的每月更新了。我非常感謝大家的熱情歡迎,也很高興能成為這個社群的一份子。

這篇文章有點一石二鳥:我們將深入探討今天直播「Flutter 飛行計畫」中的熱門新內容,幫助您在我們最常被請求的主題上騰飛。然後,我們將花點時間反思 2025 年這個真正具有里程碑意義的一年。我們全力以赴,讓 Dart 和 Flutter 成為建構出色多平台應用程式的最佳方式,我們很高興向您展示新功能和接下來的計畫。

2025 年 Flutter 和 Dart 的 10 大亮點

多麼精彩的一年!讓我們深入探討其中 10 個最重要的時刻,儘管很難縮小範圍…

您可能知道,Dart 和 Flutter 每季都會發布更新。在 2025 年,我們發布了八個內容豐富的穩定版本:

  1. Flutter 3.29Dart 3.7 (2025 年 2 月): 這個版本著重於效能和保真度,包含 Impeller 的重大更新,將 Dart 執行移至行動裝置上的主執行緒以改進原生互通性,以及新的 Dart 格式化程式。

  2. Flutter 3.32Dart 3.8 (2025 年 5 月) 我們獲得了實驗性的 Web 熱重載,Cupertino「圓角矩形」,Android 上的手寫筆支援,Dart 的交叉編譯,以及空感知元素。

  3. Flutter 3.35Dart 3.9 (2025 年 8 月): Web 熱重載成為預設,我們推出了實驗性的 Widget 預覽,引入了 Dart 和 Flutter MCP 伺服器,並宣布了 Material/Cupertino 解耦。

  4. Flutter 3.38Dart 3.10 (2025 年 11 月): Dart 加入了點位簡寫,Web 工具得到改進,Widget 預覽也整合了 IDE!此外,還有關鍵的 iOS 26/Xcode 26 支援和 UIScene 遷移路徑。

  5. 我們在年初就闡述了我們的願景,分享了我們的 Flutter 2025 路線圖更新,很高興看到這麼多成果,以及對多平台卓越和 AI 整合的持續關注。

…而且由於許多人一直在詢問,是的,我們計劃在 2026 年初再次發布類似的年度文章,因為我們將根據您的回饋繼續調整我們的路線圖。我們的目標是最終繼續使用最佳的開發者體驗和功能集來建立最佳的跨平台框架。

  1. 說到您… Flutter 社群和生態系統正在蓬勃發展!Google I/O 上,我們分享了 近 30% 的新免費 iOS 應用程式是使用 Flutter 建構的

我們對您所建構的內容感到驚訝。在 2025 年,我們與一些出色的公司合作,展示他們如何以重大方式建構和押寶 Flutter 和 Dart,包括 NotebookLM、teamLab、Agape、環球影城與渡假村、Reflection.app 和奇異家電。

今年的一些亮點包括:

talabat 是 MENA 地區領先的隨選外送平台。每天有數百萬用戶,talabat 使用 Flutter 將數百萬客戶與 8 個國家/地區的食物、雜貨等聯繫起來。

Google 的 NotebookLM 使用 Flutter 來滿足爆炸性的使用者需求,在不到 7 個月的時間內提供了令人愉悅的 4.8 星行動體驗。

teamLab 在藝術和數位解決方案中使用 Flutter,將體驗擴展到超過 3500 萬人。

Flutter 融入了 Agapé Wellness 的使命,幫助人們即使分開也能感到親近。

  1. 隨著我們持續發展,了解 Flutter 如何運作 至關重要。因此,我們製作了一整個系列關於這個主題的影片

現在我們知道它是如何運作的,讓我們讓它在未來更具彈性。

  1. Flutter 3.35 中所宣布,將 Material 和 Cupertino 解耦到它們自己的套件中的工作正在進行中。這是生態系統成熟度和彈性的一大步。我將讓 Justin 解釋這到底意味著什麼:
  1. 我們知道速度很重要…所以我們讓 build_runner 更快了(在某些情況下快了兩倍或更多!)。John 在這段精彩的影片中分享了我們如何加速 Dart 程式碼生成:
  1. 2025 年加速的另一件事是 AI 的發展速度。

AI 真正在 Flutter 和 Dart 生態系統中佔據了中心舞台。 建立代理應用程式 系列和我們在 Google I/O 上的宣布真正奠定了基調,我們將以兩項 Flutter 飛行計畫 結束這一年,為應用程式的未來做準備。2025 年帶來了 AI 輔助開發的巨大飛躍。在 Flutter 文件中的 使用 AI 建立 部分閱讀所有相關內容。

Dart 和 Flutter MCP 伺服器 現已穩定,為 Gemini CLI、Antigravity 等工具以及您使用 AI 進行開發的任何地方提供支援。
看到 Android Studio 中的 Gemini 極大地提升了 Dart 和 Flutter 開發,真是令人難以置信。而 Gemini CLI 的 Flutter 擴充功能?這對 AI 輔助應用程式建構來說是個遊戲規則改變者。

我們還宣布了 Flutter AI 工具包 v1.0,現已準備好用於您的生產工作負載。Flutter AI 工具包是一組與 AI 相關的 Widget,可以輕鬆地為您的 Flutter 應用程式添加生成式 AI 功能。自我們上次 Beta 版本發布以來,AI 工具包已遷移到 Firebase AI Logic SDK,並在此過程中添加了新功能,包括用於代理工作流程的多輪函數呼叫、插入自訂語音轉文字翻譯器的能力,以及將 LLM 回應轉化為 Widget 的完整支援。

談到新工具,Google 推出了 Antigravity,這是一種新的 IDE 體驗,旨在透過 AI 提升開發人員工作流程。我們正在與 Google 的各團隊合作,讓 Flutter 開發在 Google AI 可用的所有方面都成為世界一流的體驗。觀看 Observable 直播 以了解更多資訊。

我想分享一件我們最期待在 2026 年來臨前發生的事情…

  1. 我們在 pub.dev 上推出了 GenUI SDK for Flutter 的 Alpha 版本,為使用 LLM 建立動態 UI 開啟了大門。

GenUI 旨在幫助您從自然語言或結構化資料生成 Flutter UI,潛在地顯著加快您的開發流程。我將讓 Khanh 深入探討細節:

很高興看到社群已經在 GenUI 上進行建構了!
看看兩位社群成員是如何做的:

  • Khalid 使用 GenUI 建立了一個 AI 禮賓代理,其中包含一個很棒的總結影片。絕對值得一看!
  • Chris Sells 的 dartantic
    dartantic_ai 套件 是一個代理框架,旨在建立可以在 Dart 運行的任何地方運行的多模型代理應用程式,包括行動裝置、網頁、桌面、CLI 或伺服器。隨著新的 2.0 版本發布,dartantic 提供了 ContentGenerator,用於在新的 Flutter GenUI 專案中實作。這使您可以插入任何提供者或模型,並利用伺服器端工具(如網路搜尋和程式碼執行)和媒體生成等進階功能,包括對 Google 新的 Nano Banana Pro 的開箱即用支援。

我們正在努力使我們的 GenUI SDK 成為業界領導者。

其中一個方式是與 ADKA2UI 背後的團隊合作,提供一種更以模板為導向的 UI 生成方法。Rody 的演講探討了 Flutter 如何利用 ADK:

寒假您將建立什麼?

我列出這個清單時感到既受啟發又不知所措。創新太多了,有時候很難跟上。但幸運的是,假期是修補的完美時機!

我們都因不同的原因而期待假期,有些人去滑雪,有些人與親人共度時光,但這也是深入學習新事物的機會。

如果您是這樣的人,我們很樂意看到您建造了什麼。以下是一些我們集思廣益的想法:

  1. 在 Jaspr 中重建您的個人網站 — 並使用 Antigravity 輕鬆更改您的技術堆疊
    拿一個現有的網站,並使用代理程式將其遷移到 Jaspr,所花的時間比手動遷移所需的時間少得多,我們發現 Antigravity 在這方面非常出色。
  1. 開始學習 GenUI 的動態 UI 未來
    建立一個 GenUI Live Sketch Pad 應用程式,其中鍵入的 UI 描述由 GenUI 即時渲染。或者,如果您使用 SDK 構建了其他東西,請在社交媒體上告訴我們。該套件處於 Alpha 階段,因此我們正在積極尋求您使用它的回饋!

  2. 建構代理工作流程: 安裝 Dart MCP 伺服器 並建立一個工作流程,該工作流程會擷取您應用程式的螢幕截圖,從 Gemini 獲得評論,並使用熱重載應用更改。

  3. 無中生有地產生 UI: 進一步推進您的工作流程,使用 Stitch 設計 UI,然後請 Gemini 為您撰寫 Flutter 程式碼。

  4. 成為 Flutter 貢獻者: 首次為 Flutter 貢獻。尋找並修復開放文件問題或解決「好的首次錯誤」。

  1. 解決效能錯誤: 使用 DevTools 分析應用程式的效能。使用追蹤和程式碼代理識別並修復效能瓶頸。

  2. 現代化您的程式碼庫: 使用 Dart 3.10 的點位簡寫 重構現有的 Flutter 專案,以獲得更簡潔、更簡明的程式碼,從而提升您的專案。

  3. 探索 Flutter 中的 Gemini API 建立一個語音應用程式,展示不同的 Gemini API 功能,使用 Flutter AI Playground 範例應用程式,該應用程式使用 Firebase AI Logic SDK。

  4. 建立您自己的程式碼助理: 訓練一個代理程式,使其在您的 GitHub 儲存庫上自動管理您的套件相依性或執行其他繁瑣的任務。

  5. 使用生態系統升級您的應用程式: 整合來自 Flutter 相關業務的服務,例如用於空中更新的 Shorebird 或用於可擴展後端的 Serverpod

使用標籤 #Flutter2026 與社群分享您的寒假專案。

感謝您在 2025 年成為 Flutter 的一份子,2026 年見!

憑藉 2025 年奠定的基礎,我們對 2026 年充滿期待,我們將突破多平台開發的界限,深入探索 AI 驅動的短暫體驗,並賦予您建構真正全端、跨平台應用程式的能力。

衷心感謝令人難以置信的 Flutter 和 Dart 社群。您的熱情、回饋和貢獻使 2025 年變得精彩。我們很幸運能成為這個社群的一份子。💙

祝大家度過一個美好而富有創意的寒假。我們迫不及待想看看您在 2026 年回來建構什麼!


2025 年 Flutter 和 Dart 的十大亮點 最初發佈在 Flutter 上的 Medium,人們在那裡透過突出顯示和回應這個故事來繼續討論。

【文章翻譯】Jaime’s build context: A Flutter developer’s thoughts about Antigravity + Tips!

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

大家好,我是 Jaime Wren,一名在 Flutter 團隊中長期從事開發者工具軟體工程師。這些年來,我見證了軟體行業的許多轉變,但整個行業剛剛以極快的速度進入了一個新的狂野西部,這既令人興奮又令人緊張。

在我看來,我們開發者是複雜的生物,受兩種力量驅動:對任務生產力的需求和對程式設計本身的內在樂趣。當我們可以進入一個快速、不間斷的循環時,我們就會茁壯成長。為了充分發揮我們作為開發者的潛力,我們需要整個工具鏈協同工作,而不會產生摩擦。當我們過渡到代理時代時,對這種緊密循環的需求是不可協商的;這正是 Flutter 具有明顯優勢的地方。

過去幾年,我測試了很多 AI 工具,等待一些真正能節省 Flutter 開發者時間的東西,而不是僅僅轉移時間花費的地方。直到 Google 的新代理 IDE Antigravity 出現,才讓我看到了轉機。它彌合了原始模型能力和實際工程實用性之間的差距。我終於看到所有圍繞 LLM 的基礎設施和工具協同工作,以消除摩擦,而不是增加摩擦。

根據我自己的測試,Flutter 不僅僅是與像 Antigravity 這樣的 AI 工具「相容」;它獨特地具備了為它們提供動力的能力。為什麼?這歸結於 Flutter 嚴格的結構和強大的工具。Antigravity 的核心理念是依賴驗證來判斷一段程式碼是否真正起作用。Flutter 的工具提供了 Antigravity 的代理所需的即時回饋,以驗證這些動作。要開始使用,只需一些設定即可配置擴充功能和 MCP 伺服器。

一些你可以做到的很棒的事情

我和 Flutter 社群的其他成員已經學會了使用 Antigravity 來加速我們的開發過程,完成一些很酷的事情。我在下面列出了一些,但我請求如果您有任何其他提示,請將它們添加到此文章的評論中。

執行測試並修復問題程式碼

您可以使用 Antigravity 來執行現有測試,修復任何導致測試失敗的問題程式碼,然後驗證測試再次通過。這是我的提示:

1
2
3
使用 `flutter test` 執行完整的測試套件。如果發生失敗,
逐一修復。應用每個修復後,最後再執行一次完整的套件,
以確保沒有回歸。

修復錯誤和警告

在推送 PR 之前,您可以使用 Antigravity 來修復您的錯誤、警告和 lint。這是我的提示:

1
2
對我的專案運行 `flutter analyze`。如果失敗,修復任何錯誤和
警告,然後驗證它們是否已修復。

發現並使用 Lint

外面有很多 Lint,但我沒有時間研究所有這些並找出哪些最適合每個專案。我發現這個很酷的提示可以幫助 Antigravity 快速掃描我的專案,建議並啟用適合它的 Lint:

1
2
3
閱讀 https://dart.dev/tools/linter-rules 並識別我隱含遵循但尚未啟用的規則。
將它們添加到 analysis_options.yaml 中,運行 flutter analyze,
並修復任何導致的違規行為。

為我的專案發現好的 pub.dev 套件

外面有大量的 pub.dev 套件,就像 Lint 一樣,研究它們需要時間和精力。我想要一種方法來找出哪些可能最適合我的專案,同時又不離開我的 IDE。這個提示對我很有用:

1
2
3
4
5
6
我需要從我的應用程式的一個實例共享偏好設定到下一個實例,
請在 https://pub.dev/ 中搜尋此功能,然後運行
`flutter pub get`,驗證 pub 狀態是否良好。
然後,在我的專案中找到一個使用此新套件的範例,
修復 `flutter analyze` 中出現的任何問題,並修復它們。
最後,為新功能添加一個測試。

多年來我對 Flutter 的心路歷程以及我興奮的原因

我記得大約 10 年前 Flutter 首次亮相。從一開始,在我看來,Flutter 就將正確的語言、框架和工具結合在一起,使其預設可用。Flutter 成功的常被忽視的一個因素是這些組件並非來自不同的供應商。相反,框架、渲染引擎、CLI 工具、IDE 工具、語言和生態系統始終由同一個組織驅動,這使這些團隊能夠協調,實現預設可用的內聚願景。正因為如此,我認為每個新的 Flutter 開發者都有一個「我終於搞懂了 Hot Reload」的時刻,這讓他們感到興奮和充滿希望,因為:

  • Flutter 基礎設施能夠在毫秒內修補程式碼。
  • 錯誤和警告會在您輸入時出現,並確保程式碼在保存之前是有效的。
  • 語言有助於防止語法錯誤和摩擦。
  • 明顯的溢出錯誤會以黃色和黑色條紋顯示,表示需要解決的佈局問題。

在過去一年中,生成式 AI 在軟體開發中的前景堪比狂野西部——演示和產品取得了長足進步,但並未遵循 Flutter 成功核心的「預設可用」原則。隨著模型改進,例如允許模型實際閱讀專案的更大上下文窗口,以及該領域的概念融合,像 Flutter 這樣的框架已經有了為代理和工作流程增加價值的切入點。Flutter 團隊今年也效仿了 GenUI 的努力、Dart 和 Flutter MCP 伺服器 以及 AI 規則 建議。

現在,隨著 Antigravity 進入競技場,我們擁有的不僅僅是一個內建在 IDE 視窗中的聊天機器人。Antigravity 存在於 IDE 中,執行命令並利用對其他 Flutter 和 Dart 專案的知識,以正確遵循您的指示並代表您在專案空間中採取行動。

作為 Flutter 工程師,我們認為理所當然的是,我們知道如何在從未見過的專案中立即運行靜態分析(dart analyze)或啟動應用程式(flutter run)。雖然這些限制都沒有限制開發人員可以使用 Flutter 創建什麼,但 LLM 和代理工具的自然結果是,我們的集體統一性使這些介面在理解和作用於我們專案的結構方面取得了巨大飛躍。

為了從 LLM 工具中獲益,代理需要透過正向回饋迴圈進行驗證。如果模型每產生十個輸出中有九個是幻覺,我可能會覺得有趣,但我不會再次使用該工具。對於 Antigravity,驗證是核心理念,旨在為代理提供回饋迴圈,讓它們在完成工作之前進行迭代。這就是現有強大 Flutter 工具的好處所在,當使用 Antigravity 協助編寫程式碼時,代理會實際迭代,直到分析乾淨、格式一致、測試通過,並且 flutter run 的輸出確認像素正在繪製。

總結

毫無疑問,這些新的 AI 工具正在重新定義我們如何識別自己為高效的開發者,並享受程式設計的樂趣。同樣毫無疑問,一個穩健、快速、不間斷的循環將繼續成為這種體驗的核心。

Antigravity 不會取代程式設計師;它會消除阻礙您的想法變成現實的繁瑣工作。循環越來越快,坡道已經建好,Flutter 的未來比以往任何時候都更容易使用——也更令人愉快。


Jaime 的建構內容:一位 Flutter 開發者對 Antigravity 的看法 + 提示! 最初發佈在 Flutter 上的 Medium,人們在那裡透過突出顯示和回應這個故事來繼續討論。