Flutter 不只是讓我學會開發 App 的框架;Flutter 也改變了我作為開發者的思考方式:我開始用 widget 的角度拆解介面,用錯誤訊息與 bug/crash 當作修正方向,並靠 Hot Reload 反覆嘗試、即時學習。對我這個 Computer Science student 來說,成功更像是「持續與一致性」累積出來的結果,而不是一次寫出完美程式碼。
「Every great app begins with a single widget.」這句話我一開始只覺得是口號,後來才發現它其實在提醒一件很現實的事:很多看起來很大的作品,最早就是從一個小小的元件開始堆起來的。很慢。很笨。很真。
我原本以為 Flutter 只是眾多框架之一
剛聽到 Flutter 時,我以為它只是工具清單裡的其中一個選項,沒期待會帶來什麼「思維上的變化」。但實際投入之後,從好奇到上手,再到被迫面對各種不懂的概念,那種轉變是慢慢發生的,而且很難用一句話帶過。
我念的是 Computer Science,所以理論、語法、資料結構這些東西不陌生;只是把程式寫在 terminal 裡,常常會有一種距離感。可以跑。可以印出結果。可是它不像「產品」。我想做的是人可以摸得到、點得到、會回應你的東西——有互動、有畫面、有感覺,像真的活著一樣。
那個想法把我帶到 Flutter。不是什麼宏大計畫,就只是:想把東西做出來。
一開始其實不順:新世界的名詞直接砸下來
剛開始學 Flutter 時,我的感受很直接:overwhelming。就算有程式背景,Flutter 仍然像是走進另一套世界觀。
你會突然遇到一堆新詞:widgets、layouts、navigation、state management。還有那些看起來像咒語的類名:StatelessWidget、StatefulWidget、BuildContext、Scaffold、Navigator。它們不是「背一背就好」的關鍵字,比較像是一整套你必須慢慢適應的積木。
其中最讓我卡住的,是「everything is a widget」這個概念。當我第一次聽到時,腦袋其實是空的:所以按鈕是 widget、文字是 widget、版面也是 widget?那整個畫面到底算什麼?這個問題在一開始不是哲學,它很務實——因為我就是做不出我以為會出現的 UI。
我也真的有過那種盯著程式碼很久、一直看不懂為什麼畫面不照我預期跑的時刻。你以為只是「簡單 UI」,結果它就是不聽話。很煩。然後你開始懷疑:是不是自己其實什麼都不會。
但同時,那也是一種被迫成長的方式:你不能只靠直覺,你得開始理解它的規則。
第一個 App 很簡單,但跑在真實裝置上那刻很重
我的第一個應用非常基本:幾個按鈕、一些文字、一個很簡單的 layout,外加一堆錯誤。即使如此,它最後還是跑起來了。
那一刻其實很安靜,沒有什麼戲劇性配樂,但心裡會突然冒出一句:「喔,原來我真的做出來了。」不是因為它很複雜,而是因為它是「從無到有」。
把自己寫的 App 跑在真實裝置上,帶來的感覺跟在 terminal 看到輸出完全不一樣。它更像創造,而不是作業。你按下去,畫面回你;你改一下,介面跟著變。那種「我做的東西正在活著」的感覺,會讓人很想繼續做下去。
而且老實說,這個動機很實際:它讓我願意再多修一個 bug,再多讀一次錯誤訊息,再多試一次。
Flutter 讓我重新看待錯誤:bug/crash 不是失敗,是指路牌
Flutter 教我很大的一件事是:mistakes 不是 failures,它們是過程的一部分。錯誤訊息、bug、甚至 crash,很多時候是在告訴你「你現在的想法哪裡不成立」。
在比較傳統的學習情境裡,錯誤容易讓人沮喪;但在開發裡,錯誤其實更像提示。你不一定會立刻懂提示在說什麼,可是它至少指出方向:哪裡不對、哪裡需要改、哪裡值得你停下來想一下。
我慢慢接受一件事:程式設計不是第一次就寫出完美 code;更多時候是一步一步改,修到可以跑、修到更乾淨、修到更能維護。這個節奏一旦接受了,心態會變得比較穩。
有些人看到錯誤會先想逃,我以前也會;但後來我比較常做的是把它當成謎題。它不一定好玩,但它可以被拆開。可以被解掉。就這樣。
為什麼 Flutter「感覺不一樣」:single codebase、多平台、Hot Reload、widget 思維
Flutter 對我來說不只是做 App 的工具,而像是一個用來「做體驗」的完整環境;它用 single codebase 支援多平台輸出,並用 Hot Reload 與 widget-based architecture 讓我能更快迭代、用模組化方式設計 UI。這些特性讓我在實作時更常以實驗、拆解、重組的方式解決問題。
框架很多,這我知道。但 Flutter 讓我在做事的方式上有幾個明顯的改變。
第一個是跨平台的直覺感:用 single codebase,就可以把同一套想法帶到 Android、iOS、Web、Windows、macOS、Linux。對學生或獨立開發者來說,這種「不用每個平台重寫一套」的想像,本身就很有吸引力。你會覺得路變寬了。
第二個是 Hot Reload。我會把它稱作 game changer,但這是我的主觀感受:因為它讓「改一點點、立刻看到」變成常態,而不是每次都要重啟 App 才知道你剛剛那行到底有沒有用。當你可以快速測試,你就更敢嘗試;你更敢把東西打掉重做;你也更快知道自己哪裡搞錯。節奏一快,學習就會變得很即時。
第三個是 widget-based 的思維。以前我可能把 UI 當成一張靜態畫面,現在更像是在堆積木:一塊一塊組起來,能重用就重用,能拆就拆。這種模組化的感覺,會影響你怎麼設計畫面、怎麼整理程式,也會影響你怎麼跟自己溝通——「這一塊到底要負責什麼?」
講到 widget,我會突然想到另一件事:創意跟邏輯的關係。很多工具會讓你覺得「先照規則走」,但 Flutter 給我的感受比較像是:你可以有規則,也可以試試看不同組法。你不一定要把設計想得很完美才開始做,你可以先做出一版,再慢慢調。這點對我來說很重要。
我真正帶走的不是「會用 Flutter」,而是一串更可落地的能力
學 Flutter 之後,我提升的不只是做 mobile applications 的能力;更準確地說,它把我一些原本偏理論的知識,拉到「實作時必須面對」的層次。那些能力不是突然就有,但每做一次功能、每解一次 bug,就會多一點點。
原文列的技能很多,我把它整理成幾個比較好理解的群組(內容不變,只是把同類放在一起):
- 程式結構與思維:Object-Oriented Programming 在真實應用裡怎麼落地、怎麼讓 code 更 scalable、更接近 maintainable code 的狀態。
- 介面與體驗:UI/UX、使用者體驗的思考、以及面對不同螢幕尺寸時的 Responsive design。
- 資料與串接:API integration 與 data handling,以及和後端互動時會遇到的各種狀況。
- 登入與後端服務:Firebase、Firebase authentication、以及相關的 backend services。
- 穩定性與排錯:在壓力下做 debugging、一步一步把複雜問題拆開、找出真正的原因。
- 應用流程:state management 與整體 application flow 的掌握感(這通常不是第一次就能搞懂的那種)。
這裡我不想把它講成「學了就全會」那種勵志劇。比較像是:每個專案、每個功能,都是新的課題;每個課題都會逼你多理解一點點。很慢,但很扎實。
挫折感沒有消失,但我學到耐心:問題有時不在 code,而在想法
Flutter 也教會我耐心。不是那種抽象的「要堅持」,而是你真的會遇到:東西就是不動,然後你得坐下來跟它耗。
有時候是 layout 莫名其妙壞掉,你找不到明顯原因;有時候是 API 突然不回應;有時候是一個小錯誤,硬是讓你找了好幾個小時。最折磨人的其實不是時間,而是你會開始懷疑自己是不是漏了什麼超基本的東西。
更麻煩的是:有時候問題甚至不在 code,而在你怎麼理解問題。你以為你在修 A,其實你真正需要調整的是 B——你的假設、你的流程、你對狀態的想像。這種時候,改程式只是表面,真正要改的是腦袋裡那套模型。
所以我後來比較能接受「struggle is part of growth」這句話。不是因為它好聽,而是因為它符合現場:每次卡關都讓你更懂;每次很煩的 bug 都逼你更精確;每次失敗的嘗試都在縮小你離答案的距離。
我也因此比較不怕問題。問題更像拼圖。當然,有時候拼圖很爛,很想丟掉。真的。
往前看:Flutter 是起點,不是終點
我知道技術一直在變,Flutter 也在演進;新功能、效能改善、平台支援擴張,這些都讓它在「現在」看起來很有活力——但這仍然是我的觀察與感受,不是什麼客觀排名。
對我來說更關鍵的是:Flutter 不是終點,它比較像是一個開始。我的目標不是只成為 Flutter developer,而是成為能解決問題、能做出有意義產品的人。
我希望自己做的應用能解決真實世界的問題,而不是只用來展示技術。這句話聽起來可能很大,但它其實會落回一些很小的選擇:你做的功能到底對使用者有沒有幫助?你在意的是炫技,還是可用性?你願意花時間把流程整理順嗎?
另外,我也有一個未來的方向:把 Flutter 結合 Artificial Intelligence、cloud computing、以及 modern backend systems,去做更「聰明」也更有影響力的應用。這是願景,不是我已經完成的成果;我只是很清楚自己想往那邊走。
我相信科技真正的力量在於改善人類生活,而我希望自己能成為那個改變的一部分。這也是我願意一直寫、一直修、一直做下去的原因。
最後留給自己的提醒:成功更像一致性,不像天分
我從這段旅程裡帶走的一句話是:開發上的成功不在天分,而在一致性。你不需要完美,你需要的是一直走下去。
寫程式。每天一點點也好。做小專案。把東西弄壞,再修好。從每次錯誤裡學到一點點,然後把那一點點累積起來。
因為你今天寫的那個小小 Flutter app,未來可能會變成更大的東西——可能真的能幫到人、解決問題,甚至改變某些人的生活。這是可能性,不是保證,但它足夠讓人認真。
我也越來越認同:最好的開發者不一定是「什麼都知道」的人,而是那些願意一直學、一直試、一直長大的人。
結尾我不想再喊口號了。就一句:繼續做下去。讓下一個 widget 變成下一個作品的起點。
