"Dart"
- late final 欄位不能用欄位覆蓋 — Dart 欄位的隱藏 getter/setter 機制
Dart 的 late final 欄位在底層會生成 getter 和 setter。子類用另一個欄位覆蓋時,會產生兩個獨立的儲存槽,父類程式碼讀到的是未初始化的那份,導致 LateInitializationError。Dart analyzer 要求改用 getter 覆寫。
- Widget 子類重新宣告 key — 遮蔽父類屬性與 duplicate key 風險
在 StatelessWidget 子類中重新宣告 final Key? key,會遮蔽 Widget 繼承的 key 屬性,產生兩份儲存槽。若再把同一個 key 往下傳給 child widget,同一棵子樹出現重複 key,rebuild 時 Flutter 可能拋錯。
- 為什麼這個場景適合用高階函式?以 Flutter 設定更新為例,比較 typedef 改寫前後
高階函式的適用判準(流程固定、變化點單一且開放)與裸函式型別 vs typedef 的可讀性取捨並排比較。
- 寫測試時 sync try-catch 接不到 BotToast 的 async 錯誤:fire-and-forget API 的接管設計
測試裡 sync try-catch 接不到錯誤,或 fire-and-forget API 從 async gap 後拋 `LateInitializationError`。用 runZonedGuarded 同時罩 sync 與 async 失敗路徑,含 fallback 訊息 signature 設計。
- 三 MCP 工作流與 Dart 實測:cbm / codegraph / serena 的職責分工與三刀流
在同一個 Dart 商業專案上跑同一組 query,量化 codebase-memory-mcp / codegraph / serena 三個 code intelligence MCP 的能力差距,得到「不能互相取代、要互補使用」的三刀流結論。含 5 個實驗的 CLI baseline 跟 MCP 驗證對照。
- Freezed 的三層結構解剖:with、_$、以及更好懂的替代路徑
freezed `class X with _$X implements Y` 的分層結構解剖:`with` 與 `_$` 各自的角色、沒有 freezed 怎麼手做、中間投影物件 vs DTO 直接 implements 的維護取捨。
- Dart test 的跨檔案 GetX 狀態污染:flaky 真因不是 fail 訊息上的那個 test
`flutter test` 整套跑隨機 fail、單獨跑該 file 卻 100% 過。根因是 dart test runner 同 process 內 GetX state 跨 file 污染,fail 位置看 `+N -1` 累計而非訊息標示的 test。
- Dart StreamController:single-subscription vs broadcast 的設計選型問題
Dart `Bad state: Stream has already been listened to.` 的根因:預設單訂閱在第二個訂閱者出現時才爆。StreamController vs .broadcast() 修復決策、與 Rx / .obs 的比較。
- Freezed 選型評估
Dart 專案是否引入 freezed 的選型評估:原型階段選 json_serializable + Equatable 取代 freezed 的理由與優缺點對照。
- 測試全過但有 Bug
從多廚房印表機功能開發經驗,歸納測試設計的三大陷阱與檢查清單,避免測試全過但線上有 Bug