Flutter Web Hot Reload 正式版:拿掉 experimental flag,日常開發最有感的一步


Flutter 講「一套程式碼跑遍所有平台」講很多年了,但攤開來看,Web 一直是那個被當繼子養的平台。手機端早就有 hot reload,改一行 code、存檔、畫面秒更新;輪到 Web,你得加上 experimental flag,而且體驗時好時壞。

這周有個變化值得記一筆:Flutter 的 Web Hot Reload 正式轉正了,不再需要 experimental flag,預設就能用。

聽起來只是拿掉一個旗標。但對每天盯著瀏覽器改 UI 的人來說,這是體感差距最大的一步。

為什麼「熱重載」才是生產力分水嶺

先講清楚差別。過去在 Web 上開發 Flutter,多數時候你靠的是 hot restart:整個 app 重跑,state 全部歸零。改一個按鈕顏色,等重編、等重載,然後還要手動點回你剛才那個畫面、重新填一次表單,才能看到那顆按鈕。

Hot reload 不一樣。它保留 app 的 state,只把改動的程式碼注入進去。你停在第三層的某個彈窗,改完 code,彈窗還在,只是長得不一樣了。

我在跑起來的 app 上按下存檔,改動當場注入,畫面立刻變樣

這個差別在單次操作上只是幾秒鐘,聽起來沒什麼。但開發是一整天、上百次的循環。幾秒乘上百次乘每天,累積起來就是「心流被打斷幾次」和「一路順順改下去」的差別。真正貴的不是那幾秒,是每次等待時你的注意力被拉走、又要重新撿回來。

Web 端補上這一塊,等於把手機開發早就享受到的那套迴圈,還給了瀏覽器。

我小心換掉塔上其中一塊,整座塔穩穩不倒,state 沒被清空

這對 Flutter 的全平台策略意味著什麼

把這件事放進更大的脈絡看會更有意思。這一波 Flutter 的更新方向很一致:Web Hot Reload 轉正,把開發體驗補齊;WebAssembly 定為 Web 的預設編譯目標,讓執行效能往原生靠;Web build 整體也更靈敏,少了那種「手機硬塞進瀏覽器」的違和感。

開發體驗一頭、執行效能一尾,都在補。這透露的訊號是:Google 這次是認真想把 Web 當成 Flutter 的一等公民,而不是「順便也能 build 成網頁」的附屬品。

我把最後一塊 Web 拼圖,接到手機和桌面旁邊,全平台終於湊齊

對做技術選型的人來說,這改變了一件事。以前推薦 Flutter,通常會加註一句「手機很成熟,Web 就看情況」。這個但書正在慢慢消失。如果你的產品需要同時上 App 和 Web、又不想養兩支團隊,Flutter 的天平比一年前更值得重新秤一次。

但先講清楚:Flutter Web 不是拿來做官網的

講到這裡得踩個煞車,免得有人熱血衝過頭。截至 2026 年中,Flutter Web 有個沒解決的老問題,就是 SEO 很差。

原因在渲染方式。Flutter Web 把畫面畫到 canvas(CanvasKit/Wasm)上,你的文字、標題、內容基本上不進 HTML 的 DOM。搜尋引擎爬蟲來看你的頁面,看到的幾乎是一塊空白畫布,讀不到你的內容,自然也排不上關鍵字。對任何靠 Google 自然流量吃飯的網站,這是硬傷。

所以別拿 Flutter Web 去做行銷官網、部落格、電商商品頁這種需要被搜尋到的東西。那是 SSR 框架(Next、Astro 這類)的主場,不是它的。

那 Flutter Web 到底適合什麼?我目前想到的答案很集中:UI 密集、登入後、不靠自然搜尋的應用。最典型的就是看盤、看股票這一類。這種場景通常有大量即時數字、圖表和頻繁互動,UI 複雜度高;使用者是登入進來用工具,不是從 Google 搜進來看內容;而你多半本來就有一套 Flutter 手機 app,想讓網頁版共用同一套邏輯和元件。

這種場景下,SEO 根本不在考量內,Flutter Web 那套「一套 code 跨端、又有接近原生的互動體驗」才真正發揮。dashboard、後台管理、內部工具、交易看盤台,都落在這個甜蜜區。

講白一點:Flutter Web 是拿來做「應用」的,不是拿來做「網站」的。分清楚這條線,前面講的那些進步才用得對地方。

順帶一提:canvas 讓你的畫面比較難被抄

還有個常被拿來說嘴的副作用。因為 Flutter Web 把畫面畫在 canvas 上、DOM 幾乎是空的,別人想「檢視原始碼、複製你的 HTML/CSS、扒整個版面」這種懶人 clone,會做得很痛苦,靠解析 DOM 的爬蟲也抓不到你的表格結構。對一個看盤網站來說,這確實把「抄前端」的門檻抬高了。

但別把這個當成安全機制,這是我想特別提醒的地方。它擋掉的是低成本抄襲,擋不住真心想偷的人。

你的行情資料是走 API 的。別人根本不用碰你的 UI,直接打你的 API endpoint 就能把數據撈走,canvas 對這層完全沒防守。看盤網站最值錢的是即時數據流,而這條路 Flutter Web 一點忙都幫不上。編譯後的 JS/Wasm 也仍然可以反編譯、逆向你的邏輯。真想抄畫面的人,截圖重畫就好,canvas 只是讓他多花點功夫。

所以真正的防線在後端,不在渲染方式:API 鑑權(登入後才發數據、token 綁 session)、rate limiting 和異常存取偵測、數據分級與浮水印,加上 ToS 和反爬蟲服務。canvas 讓「抄畫面」變難,但「偷數據」始終是後端的事,別因為畫面難扒就在 API 那層鬆懈。

我的看法:別小看「拿掉一個 flag」

技術圈很容易對這種更新無感。它不是新語法,也沒有酷炫 demo,只是把一個實驗功能標成穩定而已。

但我反而覺得,這種「把既有東西做到可以放心用」的更新,才是框架成熟的真訊號。炫技的功能誰都能發,難的是把日常會用一百遍的東西打磨到不卡。Hot reload 就是那種你不會寫進發表會標題、但每天都在用的功能。它從「能用但要冒險開 flag」變成「預設就穩」,代表官方對這塊的信心到位了,這比多發幾個新 widget 更能說明 Flutter Web 現在的狀態。

如果你之前因為開發體驗卡卡而把 Flutter Web 打入冷宮,這是個重新試一輪的好時機。


參考來源: